count down a and blink \o/
authorTero Marttila <terom@fixme.fi>
Wed, 05 May 2010 23:54:50 +0300
changeset 4 b45780fbd7e8
parent 3 0584de343264
child 5 7feeaeb473b5
count down a and blink \o/
led7seg.s
--- a/led7seg.s	Wed May 05 23:43:38 2010 +0300
+++ b/led7seg.s	Wed May 05 23:54:50 2010 +0300
@@ -173,6 +173,25 @@
     ; Done
         ret
 
+;; Delay for approx. 1s
+Delay_1s:
+        ; 20 * 255 * 255 = 1.3M cycles
+        ldi         r20, 40
+        ldi         r21, 255
+        ldi         r22, 255
+
+delay:
+        dec         r22
+        brne        delay
+        dec         r21
+        brne        delay
+        dec         r20
+        brne        delay
+
+        ret
+
+
+Main:
 init:
     ; Stack
         ldi         r16, high(RAMEND)
@@ -189,11 +208,47 @@
     ; LCD (requires interrupts)
         rcall       LCD_Init    
 
-main:
-    ; Output something
-        ldi         r16, LCD_4
+;; Count down from 9
+count:
+        ; init from 9
+        ldi         r24, LCD_9
+
+loop:
+        ; display
+        mov         r16, r24
         rcall       LCD_Show
 
-loop:
+        ; exit if zero
+        tst         r24
+        breq        blink
+
+        ; count down
+        dec         r24
+
+        ; wait...
+        rcall        Delay_1s
+
+        ; next
         rjmp        loop
+   
+;; Blink between dot and empty
+blink:
+        rcall       Delay_1s
+        
+        ; dot
+        ldi         r16, LCD_DOT
+        rcall       LCD_Show
 
+        ; wait...
+        rcall       Delay_1s
+        
+        ; empty
+        ldi         r16, LCD_EMPTY
+        rcall       LCD_Show
+        
+        ; loop
+        rjmp        blink
+
+end:
+        rjmp        end
+