Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .include "tn13Adef.inc"
- .def temp = R16
- .cseg
- .org 0
- ;----- таблица векторов прерываний -----
- rjmp RESET ;Reset Handler
- reti ;IRQ0 Handler
- rjmp int_isr ;PCINT0 Handler
- reti ;Timer0 Overflow Handler
- reti ;EEPROM Ready Handler
- reti ;Analog Comparator Handler
- reti ;Timer0 CompareA Handler
- reti ;Timer0 CompareB Handler
- reti ;Watchdog Interrupt Handler
- reti ;ADC Conversion Handler
- ;----------- Настройка контроллера ---------------
- reset: ldi temp, RAMEND
- out SPL, temp
- ldi temp, 0x80
- out ACSR, temp
- ldi temp, (1<<PB0)|(0<<PB3) ;PB0 - выход, PB3 - вход
- out DDRB, temp
- ldi temp, (1<<PB3) ;Подтяжка на PB3
- out PORTB, temp
- ldi temp, (1<<PCIE) ;разрешить прерывание PCINT
- out GIMSK, temp
- ldi temp, (1<<PCINT3) ;выбор источника прерывания - PB3
- out PCMSK, temp
- sei ;Общее разрешение прерываний
- stop: rjmp stop ;Остановка программы в бесконечном цикле
- ;------------обработчик прерывания PCINT -----------
- int_isr:rcall dly02s ;Задержка 0,2 сек, пока дребезжит кнопка
- sbis PINB,3 ;проверка кнопки, выход если удерживается.
- rjmp return
- sbis PINB,0 ;проверка вывода светодиода
- rjmp setb ;если не горит - перейти и зажечь.
- cbi PORTB,0 ;если горит - погасить
- rjmp return
- setb: sbi PORTB,0
- return: ldi temp, (1<<PCIF) ;сброс флага очереди прерываний
- out GIFR, temp
- reti ;выход из прерывания
- ;-------------подпрограмма задержки -----------------
- dly02s: ldi R17, 0x10
- WL0: ldi R18, 0xC6
- WL1: ldi R19, 0xС9
- WL2: dec R19
- brne WL2
- dec R18
- brne WL1
- dec R17
- brne WL0
- ldi R17, 0x18
- WL3: dec R17
- brne WL3
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement