Спойлер
Код: Выделить всё
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.def Temp5=R21
.def Temp6=R22
.def Temp7=R23
.def Temp8=R24
.def Temp9=R25
.dseg ;оперативка
key_buff: .byte 5 ; зарезервируем 5 байт в ОЗУ
;******************************************************************************
;******************************************************************************
.cseg
.org 0
rjmp RESET ; External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset
rjmp Int0x ; External Interrupt Request 0
rjmp Int1x ; External Interrupt Request 1
rjmp TIMER1CAPT ; CAPT Timer/Counter1 Capture Event
rjmp TIMER1COMPA ; COMPA Timer/Counter1 Compare Match A
rjmp TIMER1OVF ; OVF Timer/Counter1 Overflow
rjmp TIMER0OVF ; OVF Timer/Counter0 Overflow
rjmp USART0RX ; RX USART0, Rx Complete
rjmp USART0UDRE ; UDRE USART0 Data Register Empty
rjmp USART0TX ; TX USART0, Tx Complete
rjmp ANALOGCOMP ; COMP Analog Comparator
rjmp PCINT ; Pin Change Interrupt
rjmp TIMER1COMPB ; COMPB Timer/Counter1 Compare Match B
rjmp TIMER0COMPA ; COMPA Timer/Counter0 Compare Match A
rjmp TIMER0COMPB ; COMPB Timer/Counter0 Compare Match B
rjmp USISTART ; START USI Start Condition
rjmp USIOVERFLOW ; OVERFLOW USI Overflow
rjmp EEREADY ; READY EEPROM Ready
rjmp WDTOVERFLOW ; OVERFLOW Watchdog Timer Overflow
;RESET: ; External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset////
Int0x: ; External Interrupt Request 0
Int1x: ; External Interrupt Request 1
TIMER1CAPT: ; CAPT Timer/Counter1 Capture Event
;TIMER1COMPA: ; COMPA Timer/Counter1 Compare Match A/////////////////////////////////
TIMER1OVF: ; OVF Timer/Counter1 Overflow
TIMER0OVF: ; OVF Timer/Counter0 Overflow
USART0RX: ; RX USART0, Rx Complete
USART0UDRE: ; UDRE USART0 Data Register Empty
USART0TX: ; TX USART0, Tx Complete
ANALOGCOMP: ; COMP Analog Comparator
PCINT: ; Pin Change Interrupt
TIMER1COMPB: ; COMPB Timer/Counter1 Compare Match B----------------------------сюда наверно нужно загрузить число для равнения
TIMER0COMPA: ; COMPA Timer/Counter0 Compare Match A
TIMER0COMPB: ; COMPB Timer/Counter0 Compare Match B
USISTART: ; START USI Start Condition
USIOVERFLOW: ; OVERFLOW USI Overflow
EEREADY: ; READY EEPROM Ready
WDTOVERFLOW: ; OVERFLOW Watchdog Timer Overflow
reti ; выход из обраьотчика прерываний
;******************************************************************************
;******************************************************************************
;старт
;******************************************************************************
reset: ; включение микроконтроллера
cli ; глобальный запрет на прерывания
ldi Temp,low(RamEnd) ; инициализации стека
out SPL,Temp ;
ldi Temp,0b00000100 ;
out DDRB,Temp ; настроили порт "В"
; 00000х00 - "вывод" на передатчик (PB3- 15 ножка)
; 0000хххх - "ввод" для чтения клавиатуры
ldi Temp,0b00001111 ;
out DDRD,Temp ; настраиваем порт "D" на вывод (0-ввод, 1-вывод)
; 0000хххх - на сканирование столбцов клавы
ldi Temp,(1<<OCIE1A) ; разрешить прерывание компаратора
out TIMSK,Temp
ldi Temp,(1<<COM1A0) ;переключать ножку "OC1A" по совпадению (PB3- 15 ножка)
out TCCR1A,Temp ;*1
ldi Temp,(1<<wgm12)|(1<<cs10) ;подключили режим "CTC" (вместе с *1) и установили тактовый сигнал = CK (1:1)
out TCCR1B,Temp
; инициализация компаратора
ldi Temp,0xC ; 3кГц, 1/3000=0,00033сек=330мкс, 330/2=165мкс длительность импульса или паузы(время-Т)
out OCR1AH,Temp ; 0,05мкс*65535=3276,75 3276,75>165 --- по этому не будем делить тактовую частоту (СК)
ldi Temp,0xE4 ; 165мкс/0,05мкс=3300 тиков таймера 3300=CE4(hex)
out OCR1AL,Temp ;
ldi Temp,0 ;обнуление таймера при включении
out TCNT1H,Temp
out TCNT1L,Temp
sei ;глобальное разрешение прерываний
TIMER1COMPA:
;......
reti


