author | Tero Marttila <terom@fixme.fi> |
Sat, 08 May 2010 20:09:08 +0300 | |
changeset 23 | a6afc0eb347f |
parent 19 | 1e00790c5029 |
child 25 | 33496b1a964f |
permissions | -rw-r--r-- |
3 | 1 |
.nolist |
2 |
.include "m168def.inc" ; Same family as 328P |
|
3 |
.list |
|
4 |
||
5 |
;; Interrupt Vector |
|
6 |
.org 0x00 |
|
7 |
rjmp init |
|
8 |
||
18 | 9 |
.org OC1Aaddr |
10 |
; Timer/Counter1 Overflow |
|
11 |
rjmp Timer_OC1A |
|
12 |
||
3 | 13 |
.org SPIaddr |
14 |
rjmp SPI_Interrupt |
|
15 |
||
8 | 16 |
.org ADCCaddr |
17 |
rjmp ADC_Interrupt |
|
18 |
||
23
a6afc0eb347f
synchronous SPI, two-digit led7
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
19 |
.org 0x40 |
a6afc0eb347f
synchronous SPI, two-digit led7
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
20 |
|
a6afc0eb347f
synchronous SPI, two-digit led7
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
21 |
;; Syntax |
a6afc0eb347f
synchronous SPI, two-digit led7
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
22 |
.include "macros.inc" |
a6afc0eb347f
synchronous SPI, two-digit led7
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
23 |
|
3 | 24 |
;; SPI |
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
25 |
.include "spi.inc" |
3 | 26 |
|
27 |
;; LCD |
|
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
28 |
.include "led7seg.inc" |
3 | 29 |
|
8 | 30 |
;; ADC |
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
31 |
.include "adc.inc" |
8 | 32 |
|
18 | 33 |
;; Timer |
34 |
.include "timer.inc" |
|
35 |
||
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
36 |
;; Utils |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
37 |
.include "delay.inc" |
7 | 38 |
|
6 | 39 |
;; Count down from 9 |
40 |
; Returns once we've hit zero |
|
41 |
Main_Countdown: |
|
16 | 42 |
; init from F |
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
43 |
ldi r24, LED7_F |
6 | 44 |
|
15
c8f3a514bbef
read SPI to r10, and use it (hack)
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
45 |
_count_loop: |
6 | 46 |
; display |
47 |
mov r16, r24 |
|
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
48 |
rcall LED7_Show |
6 | 49 |
|
50 |
; exit if zero |
|
51 |
tst r24 |
|
15
c8f3a514bbef
read SPI to r10, and use it (hack)
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
52 |
breq _count_end |
6 | 53 |
|
54 |
; count down |
|
55 |
dec r24 |
|
56 |
||
57 |
; wait... |
|
58 |
rcall Delay_1s |
|
59 |
||
60 |
; next |
|
15
c8f3a514bbef
read SPI to r10, and use it (hack)
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
61 |
rjmp _count_loop |
c8f3a514bbef
read SPI to r10, and use it (hack)
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
62 |
|
c8f3a514bbef
read SPI to r10, and use it (hack)
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
63 |
_count_end: |
c8f3a514bbef
read SPI to r10, and use it (hack)
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
64 |
; done |
c8f3a514bbef
read SPI to r10, and use it (hack)
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
65 |
ret |
6 | 66 |
|
67 |
;; Blink between dot and empty |
|
68 |
Main_Blink: |
|
69 |
_blink_loop: |
|
70 |
; dot |
|
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
71 |
ldi r16, LED7_DOT |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
72 |
rcall LED7_Show |
6 | 73 |
|
74 |
; wait... |
|
75 |
rcall Delay_1s |
|
76 |
||
77 |
; empty |
|
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
78 |
ldi r16, LED7_EMPTY |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
79 |
rcall LED7_Show |
6 | 80 |
|
81 |
rcall Delay_1s |
|
82 |
||
83 |
; loop |
|
84 |
rjmp _blink_loop |
|
85 |
||
86 |
;; Chase segments |
|
87 |
Main_Spin: |
|
88 |
_spin_init: |
|
89 |
; init from top |
|
90 |
ldi r24, 0b00000001 |
|
91 |
||
92 |
_spin_next: |
|
93 |
; display |
|
94 |
mov r16, r24 |
|
23
a6afc0eb347f
synchronous SPI, two-digit led7
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
95 |
mov r17, r24 |
a6afc0eb347f
synchronous SPI, two-digit led7
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
96 |
com r17 |
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
97 |
rcall LED7_ShowRaw |
6 | 98 |
|
18 | 99 |
; delay |
23
a6afc0eb347f
synchronous SPI, two-digit led7
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
100 |
rcall ADC_Read8 |
a6afc0eb347f
synchronous SPI, two-digit led7
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
101 |
;mov r16, r10 |
a6afc0eb347f
synchronous SPI, two-digit led7
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
102 |
|
19 | 103 |
ldi r17, 64 |
104 |
mul r16, r17 |
|
105 |
mov XL, r0 |
|
106 |
mov XH, r1 |
|
107 |
||
108 |
rcall Timer_Sleep |
|
6 | 109 |
|
110 |
; next segment |
|
111 |
lsl r24 |
|
112 |
||
113 |
; go back to A if we hit G |
|
114 |
sbrc r24, 6 |
|
115 |
rjmp _spin_init |
|
116 |
||
117 |
rjmp _spin_next |
|
4 | 118 |
|
119 |
Main: |
|
3 | 120 |
init: |
23
a6afc0eb347f
synchronous SPI, two-digit led7
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
121 |
; DEBUG |
a6afc0eb347f
synchronous SPI, two-digit led7
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
122 |
sbi DDRD, PORTD7 |
a6afc0eb347f
synchronous SPI, two-digit led7
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
123 |
sbi PORTD, PORTD7 |
a6afc0eb347f
synchronous SPI, two-digit led7
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
124 |
|
3 | 125 |
; Stack |
126 |
ldi r16, high(RAMEND) |
|
127 |
ldi r17, low(RAMEND) |
|
128 |
out SPH, r16 |
|
129 |
out SPL, r17 |
|
130 |
||
131 |
; Enable interrupts |
|
132 |
sei |
|
133 |
||
8 | 134 |
; ADC (slowest to start up) |
23
a6afc0eb347f
synchronous SPI, two-digit led7
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
135 |
rcall ADC_Init |
18 | 136 |
|
137 |
; Timer |
|
138 |
rcall Timer_Init |
|
8 | 139 |
|
3 | 140 |
; SPI |
141 |
rcall SPI_Init |
|
142 |
||
8 | 143 |
; LCD (requires interrupts, blocks) |
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
144 |
rcall LED7_Init |
6 | 145 |
|
146 |
; Run |
|
147 |
; spin! |
|
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
148 |
rcall Main_Spin |
15
c8f3a514bbef
read SPI to r10, and use it (hack)
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
149 |
|
c8f3a514bbef
read SPI to r10, and use it (hack)
Tero Marttila <terom@fixme.fi>
parents:
8
diff
changeset
|
150 |
; count! |
17
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
151 |
; rcall Main_Countdown |
a7c668003a19
split led7seg.s into .inc modules, and update Makefile to use .s -> .hex, and above .inc's for led7seg
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
152 |
; rcall Main_Blink |
4 | 153 |
|
154 |
end: |
|
155 |
rjmp end |
|
156 |