; Garage Door Minder ; Atmel AVR Assembly ; William Riley riley@randdtechnologies.com ; http://workbench.freetcp.com/ .NOLIST .INCLUDE "tn12def.inc" .LIST .def T1 = r1 .def T2 = r2 .def temp = r16 .def btime = r17 .ORG $0000 rjmp reset reti ;external interrupt handler ;with 1MHz clock should give ~200ms delay longDelay: clr T1 clr T2 delay_1: dec T2 brne delay_1 dec T1 brne delay_1 dec temp brne delay_1 ret reset: .equ led = 0 ;LED at PB0 .equ radio = 1 ;radio signal at PB1 .equ X = 3 ;blink on/off every X*200ms sbi DDRB,led ;PB0 set to output cbi DDRB,radio ;PB1 set to input cbi PORTB,led ;LED on ldi temp,1 rcall longDelay sbi PORTB,led ;LED off ldi temp,1 rcall longDelay cbi PORTB,led ;LED on ldi temp,1 rcall longDelay sbi PORTB,led ;LED off ldi temp,1 rcall longDelay cbi PORTB,led ;LED on ldi temp,1 rcall longDelay sbi PORTB,led ;LED off main: ;Go to sleep. ldi temp,$30 ;enable sleep and set T0 to respond to low level out MCUCR,temp ;enable sleep mode ldi temp,$40 ;enable external interrupt 0 out GIMSK,temp sei ;assure interrupts are enabled sleep ;good night. Wait for radio to go low (interrupt 0) blink: ldi btime,5 ; blink on/off 5 times ~3 seconds blink2: cbi PORTB,led ;LED on ldi temp,X rcall longDelay sbi PORTB,led ;LED off ldi temp,X rcall longDelay dec btime brne blink2 rjmp main