You are on page 1of 3

.include "M32def.inc" .CSEG .org 0 jmp start .

org 0x2a start: ldi r25,0x80 ldi r27,0x02 ldi r20,high(RAMEND) out sph,r20 ldi r20,low(RAMEND) out spl,r20 ldi r20,0x00 out ddra,r20 ldi r20,0xff out ddrb,r20 ldi r20,0x00 loop: sbis rjmp sbis rjmp sbis rjmp sbis rjmp rjmp pina,1 alternate ;jump to alternate if PA1=0 pina,2 siren ;jump to siren if PA2=0 pina,3 flashing ;jump to flashing if PA3=0 pina,4 running ;jump to running if PA4=0 loop ;jump to begin loop

alternate: sbrc r18,0; skip if bit 0 in r18 is cleared ldi r20, 0xf0 sbrs r18,0; skip if bit 0 in r18 is set ldi r20, 0x0f out portb,r20 ;Port B<-R20 call delay1s ;delay com r18 rjmp loop siren: sbrc r18,0 ; skip if bit 0 in r18 is cleared ldi r20, 0xAA sbrs r18,0; skip if bit 0 in r18 is set ldi r20, 0x55 out portb,r20 ;Port A<-R20 call delay1s ;delay com r18 rjmp loop flashing: sbrc r18,0 ; skip if bit 0 in r18 is cleared ldi r20, 0xff sbrs r18,0; skip if bit 0 in r18 is set ldi r20, 0x00 out portb,r20 ;Port A<-R20 call delay1s ;delay com r18

rjmp loop running: ldi r22,0x8 ldi r23,0 sbrs r24,0; rjmp IncCnt sbrc r24,0; rjmp DecCnt rjmp loop

skip if bit 0 in r24 is set skip if bit 0 in r24 is cleared

IncCnt: ;Increment R18 and sent to Port B sts 0x600, r25 lds r18,0x600 ldi r24,0 ldi r26,8 com r18 out portb,r18 ;Port b<-R18 call delay1s com r18 inc r19 SUB r26,r19 breq zero;branch if equal to zero LSR R25;logical shift right rjmp loop DecCnt: ;Decrement R18 and sent to Port B sts 0x600, r27 lds r18,0x600 ldi r24,1 ldi r26,7 com r18 out portb,r18 ;Port B<-R18 call delay1s com r18 inc r19 sub r26,r19 breq zeroes;branch if equal to zero LSL R27;logical shift left rjmp loop zero: ldi r24,1 ldi r19,0 rjmp loop zeroes: ldi r24,0 ldi r19,0 ldi r25, 0x80 ldi r27, 0x02 rjmp loop ;Approximate 1 second delay delay1s: ldi r16,255 delay1s0: ldi r17,0xff delay1s1: dec r17

brne delay1s1 dec r16 brne delay1s0 ret

You might also like