; count-->s[16] ; ; state-->r[18] ; flashes-->r[19] ; this-->r[20] ; ; DDRD-->i[0x11] ; PORTD-->i[0x12] ; PORTB-->i[0x18] ; DDRB-->i[0x17] ; .=0 ; [-->start, -->interrupt, -->interrupt, -->interrupt] rjmp start rjmp interrupt rjmp interrupt rjmp interrupt ; ; ; This example program flashes an LED on pin PD0. The timing values are suitable ; ; for running on the 1MHz RC oscillator. ;---------------------------------------------------------------------- ; Chapter start ;---------------------------------------------------------------------- .func start ; chapter start start: ldi r18, 1 ; state = 1 ldi r29, 1 ; DDRD = 1 out 17, r29 ldi r29, 1 ; PORTD = 1 out 18, r29 ldi r18, 0 ; state = 0 ; loop: ; loop) ldi r19, 1 ; flashes = 1 (1) 5 ; flash once, twice, thrice, four times L00000: mov r29, r19 ; this = 0 (1) 2flashes ; loop for twice the number of flashes. lsl r29 ldi r20, 0 L00001: rcall wait ; down wait ldi r28, 1 ; state = 1 - state sub r28, r18 mov r18, r28 out 18, r18 ; PORTD = state inc r20 ; repeat cpse r20, r29 rjmp L00001 ldi r20, 0 ; this = 0 (1) 5 ; pause between sequences L00002: rcall wait ; down wait inc r20 ; repeat ldi r29, 5 cpse r20, r29 rjmp L00002 inc r19 ; repeat ldi r29, 5 cpse r19, r29 rjmp L00000 rjmp loop ; -->loop ; do it again .endfunc ; close ;---------------------------------------------------------------------- ; End of Chapter start ; Used registers: r[28], r[29] ;---------------------------------------------------------------------- ; ;---------------------------------------------------------------------- ; Chapter wait ;---------------------------------------------------------------------- .func wait ; chapter wait,1 wait: ldi r16, 0 ; count = 0(1)10000 ldi r17, 0 L00003: ldi r26, 1 ; repeat ldi r27, 0 add r16, r26 adc r17, r27 mov r26, r16 mov r27, r17 subi r26, 16 sbci r27, 39 or r26, r27 clr r27 cpse r26, r27 rjmp L00003 ret ; up .endfunc ; close ;---------------------------------------------------------------------- ; End of Chapter wait ; Used registers: r[26], r[27] ;---------------------------------------------------------------------- ; ;---------------------------------------------------------------------- ; Service interrupt ;---------------------------------------------------------------------- .func interrupt ; service interrupt,2 interrupt: reti ; close .endfunc ;---------------------------------------------------------------------- ; End of Service interrupt ; Used registers: ;---------------------------------------------------------------------- ;