//**************************************************************************************** // // Библиотека Т45 LIB // // подпрограммы и макросы // // ОБЩИЕ ПРАВИЛА // Индексные регистры обзываем N M , кто то пишет I,J но плохо видно- то ли единица то ли эль ... // R18 =M индексные // R19 =N регистры // R17 =HTM старший байт рабочего регистра // R16 = TM общий или младший байт- временный рабочий регистр ТЕМП // R15= ZERO=0b00000000 готовый нуль // R14= ED =0b11111111 готовая единица // это ускоряет установку портов для которых нет команды установки и очистки // R13 для хранения SREG IN R13. SREG вместо IN TM, SREG // OUT SREG, R13 PUSH TM // POP TM // OUT SREG. TM // это особенность команд PUSH/POP - работают только с регистрами 0-31 // R0,R1 для чтения из памяти, R2-R12 для констант ввода-вывода, например можно хранить коды для семисегментника // // Самое главное- МАКРОСЫ И БИБЛИОТЕКА МАКРОСОВ //.MACRO SUBW ; Start macro definition // subi @2,low(@0) ; Subtract low byte // sbci @1,high(@0) ; Subtract high byte //.ENDM ; End macro definition // Вызов выглядит как обычная команда: // SUBW 0x1234,HTM,TM // Если кусок кода большой и вызыватся несколько раз- // то его выгоднее оформить в виде подпрогрпммы // subrout: // SUBW @0,@1,@2 // // // // // // // //****************************************************************************************** .macro REG_NAMES // обзываем регистры согласно соглашения .def addrh =r23 .def addr =r22 .def datah =r21 .def datal =r20 .def N =r19 .def M =r18 .def htm =r17 .def tm =r16 .def zero =r15 .def ed =r14 .endm //******************************************************************************** .macro INTER_TABLE // одним макросом устанавливаем таблицу прерываний, // но для каждого проекта она будет разной rjmp reset ; прерывание по сбросу или при сбое питания и прыгаем на метку "reset:" reti ;rjmp ext_int0 ; IRQ0 Handler reti ;rjmp pc_int0 ; PCINT0 Handler reti ;rjmp tim1_compa ; Timer1 CompareA Handler rjmp reset ;rjmp tim1_ovf ; Timer1 Overflow Handler reti ;rjmp tim0_ovf ; Timer0 Overflow Handler reti ;rjmp ee_rdy ; EEPROM Ready Handler reti ;rjmp ana_comp ; Analog Comparator Handler reti ;rjmp adc_conv ; ADC Conversion Handler reti ;rjmp tim1_compb ; Timer1 Compare b Handler reti ;rjmp tim0_compa ; Timer0 Compare a Handler reti ;rjmp tim0_compb ; Timer0 Compare b Handler reti ;rjmp wdt reti ;rjmp usi_start reti ;rjmp usi_ovf .endm //******************************************************************************* .macro INIT_MCU // заряжаем регистры , стек, калибровку генератора и прочее ser tm mov ed, tm clr tm clr zero out DDRB, ed .endm //********************************************************************************** .macro WR_EEPROM cli wite: sbic eecr, eepe // проверяем готовность епрома rjmp wite ldi tm, (0<