corrected careless mistake
[my-code/atmel.git] / beginners / test_port_d.asm
index 0e31045..36b7419 100644 (file)
@@ -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