X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=beginners%2Ftest_port_d.asm;h=36b7419b154340cd55a88f7a1ec8e8439325845b;hb=96c049990876625353c38ab10fd8bf0e698b3973;hp=0e310459e59aa07489d53c1a84fe66e94cb8bc68;hpb=f24e742bc7e1c8c86bd4bb8add6f621daf5d0f49;p=my-code%2Fatmel.git diff --git a/beginners/test_port_d.asm b/beginners/test_port_d.asm index 0e31045..36b7419 100644 --- a/beginners/test_port_d.asm +++ b/beginners/test_port_d.asm @@ -1,47 +1,48 @@ +; +; portd 3-7 blinken lights ;) +; +; author: hackbard@hackdaworld.dyndns.org +; + .include "../include/2313def.inc" INIT: -ldi r31,0 -ldi r30,0 -ldi r29,0 -out DDRD,r29 ; select all pins as input -jmp DECIDE - -DECIDE: -adiw r30,1 -cp r30,0 -breq SET_0 -cp r30,1 -breq SET_1 -cp r30,2 -breq SET_2 -ldi r30,0 -jmp DECIDE +ldi r30,2 ; light counter +ldi r28,1 ; constants +ldi r27,0x7f ; +out DDRD,r27 ; select all pins as output +rjmp LIGHT -SET_0: -ldi r16,0 -sbr r16,14 -out PORTD,r16 -jmp WAIT - -SET_1: -ldi r16,0 -sbr r16,48 +LIGHT: +ldi r31,0 ; reset wait counter +lsl r30 +cpi r30,128 +breq RESET_L +ldi r16,0xff +sub r16,r30 out PORTD,r16 -jmp WAIT +rjmp WAIT -SET_2: -ldi r16,0 -sbr r16,42 -out PORTD,r16 -jmp WAIT +RESET_L: +ldi r30,2 ; again start with 1 +rjmp LIGHT WAIT: -adiw r31,1 -cpi r31,0xff -breq RESET -jmp WAIT +ldi r29,0 ; reset inner wait counter +add r31,r28 ; increment wait counter +cpi r31,0xff ; after 255 steps +breq LIGHT +rjmp WAIT_MORE + +WAIT_MORE: +ldi r25,0 ; reset inner inner wait counter +add r29,r28 ; increment inner wait loop counter +cpi r29,0xff ; goto first wait loop after 255 cycles +breq WAIT +rjmp WAIT_MORE_MORE -RESET: -ldi r31,0 -jmp DECIDE +WAIT_MORE_MORE: +add r25,r28 ; inc inner inner wait counter +cpi r25,0x05 ; goto wait_more loop +breq WAIT_MORE +rjmp WAIT_MORE_MORE