1 | ;===========================================================================================================
|
2 | ; Beginn - Lauflicht.asm
|
3 | ;===========================================================================================================
|
4 | ; Titel: Lauflicht
|
5 | ; Datei: Lauflicht.asm
|
6 | ; Datum: 28.06.04
|
7 | ; Verwendete Hardware: ATMega8
|
8 | ; Funktion: 8 LEDS an PORTD sollen nacheinander aufleuchten, danach in anderer Reihenfolge wieder ausgehen
|
9 | ;===========================================================================================================
|
10 | ; Deklarationsteil
|
11 | ;===========================================================================================================
|
12 | .Include "4433def.inc"
|
13 | .def loops = r17
|
14 | .def zaehler = r18
|
15 | RJMP reset ; External Pin, Power-on Reset, Brown-out Reset, und Watchdog Reset
|
16 | RETI ; External Interrupt Request 0
|
17 | RETI ; External Interrupt Request 1
|
18 | RETI ; Timer/Counter2 Compare Match
|
19 | RETI ; Timer/Counter2 Overflow
|
20 | RETI ; Timer/Counter1 Capture Event
|
21 | RETI ; Timer/Counter1 Compare Match A
|
22 | RETI ; Timer/Counter1 Compare Match B
|
23 | RETI ; Timer/Counter1 Overflow
|
24 | RJMP timer0 ; Timer/Counter0 Overflow
|
25 | RETI ; Serial Transfer Complete
|
26 | RETI ; USART, Rx Complete
|
27 | RETI ; USART Data Register Empty
|
28 | RETI ; USART, Tx Complete
|
29 | RETI ; ADC Conversion Complete
|
30 | RETI ; EEPROM Ready
|
31 | RETI ; Analog Comparator
|
32 | RETI ; Two-wire Serial Interface
|
33 | RETI ; Store Program Memory Ready
|
34 | ;===========================================================================================================
|
35 | ; Initialisierungsteil
|
36 | ;===========================================================================================================
|
37 | reset: LDI r16, $FF ; PORTD als
|
38 | OUT DDRD, r16 ; Ausgabe definieren!
|
39 |
|
40 | LDI r16, $80 ; Stapel mit
|
41 | OUT SPL, r16 ; $80 initialisieren!
|
42 |
|
43 | LDI loops, $08 ; Zählregister für Zeit auf 8 gesetzt
|
44 |
|
45 | LDI r16, $01 ; Overflow für
|
46 | OUT TIMSK, r16 ; Timer0 aktivieren
|
47 |
|
48 | LDI r16, $F0 ; Timer-Zählregister
|
49 | OUT TCNT0, R16 ; auf F0 voreingestellt
|
50 |
|
51 | LDI r16, $05 ; Takt-Vorteiler
|
52 | OUT TCCR0, r16 ; auf 1024 stellen
|
53 |
|
54 | LDI zaehler, $00 ; Zählregister initialisieren
|
55 |
|
56 | LDI r19, $01 ; LED 1 2
|
57 | LDI r20, $02 ; LED 2 3
|
58 | LDI r21, $03 ; LED 3 4
|
59 | LDI r22, $04 ; LED 4 5
|
60 | LDI r23, $05 ; LED 5 6
|
61 | LDI r24, $06 ; LED 6 7
|
62 | LDI r25, $07 ; LED 7 8
|
63 | LDI r26, $08 ; LED 7 6
|
64 | LDI r27, $09 ; LED 6 5
|
65 | LDI r28, $0A ; LED 5 4
|
66 | LDI r29, $0B ; LED 4 3
|
67 | LDI r30, $0C ; LED 3 2
|
68 | LDI r31, $0D ; LED 2 1
|
69 |
|
70 | LDI r16, $FF ; LEDs
|
71 | OUT PORTD, r16 ; ausschalten
|
72 |
|
73 | SEI ; Interrupts akrivieren
|
74 |
|
75 | RJMP loop ; Sprung nach loop
|
76 | reset1:
|
77 |
|
78 | LDI r16, $80 ; Stapel mit
|
79 | OUT SPL, r16 ; $80 initialisieren!
|
80 |
|
81 | LDI loops, $08 ; Zählregister für Zeit auf 8 gesetzt
|
82 |
|
83 | LDI zaehler, $00 ; Zählregister initialisieren
|
84 |
|
85 | SEI
|
86 | loop:
|
87 | RJMP loop
|
88 |
|
89 | ;===========================================================================================================
|
90 | ; Hauptprogramm - Beginn
|
91 | ;===========================================================================================================
|
92 | timer0: LDI r16, $F0 ; Timer-Zählregister
|
93 | OUT TCNT0, R16 ; auf F0 voreingestellt
|
94 | DEC loops ; Loops -1
|
95 | BREQ led ; wenn Loops = 0 Sprung nach LED
|
96 | RETI
|
97 |
|
98 | led: INC zaehler ; Zählregister + 1
|
99 |
|
100 | LDI loops, $08 ; Loops wieder auf 8 setzen
|
101 |
|
102 | CP zaehler, r19 ; Vergleich Zählregister mit r19
|
103 | BREQ led12 ; wenn ja Sprung zu led12
|
104 |
|
105 | CP zaehler, r20 ; Vergleich Zählregister mit r20
|
106 | BREQ led23 ; wenn ja Sprung zu led23
|
107 |
|
108 | CP zaehler, r21 ; Vergleich Zählregister mit r21
|
109 | BREQ led34 ; wenn ja Sprung zu led34
|
110 |
|
111 | CP zaehler, r22 ; Vergleich Zählregister mit r22
|
112 | BREQ led45 ; wenn ja Sprung zu led45
|
113 |
|
114 | CP zaehler, r23 ; Vergleich Zählregister mit r23
|
115 | BREQ led56 ; wenn ja Sprung zu led56
|
116 |
|
117 | CP zaehler, r24 ; Vergleich Zählregister mit r24
|
118 | BREQ led67 ; wenn ja Sprung zu led67
|
119 |
|
120 | CP zaehler, r25 ; Vergleich Zählregister mit r25
|
121 | BREQ led78 ; wenn ja Sprung zu led78
|
122 |
|
123 | CP zaehler, r26 ; Vergleich Zählregister mit r26
|
124 | BREQ led76 ; wenn ja Sprung zu led76
|
125 |
|
126 | CP zaehler, r27 ; Vergleich Zählregister mit r27
|
127 | BREQ led65 ; wenn ja Sprung zu led65
|
128 |
|
129 | CP zaehler, r28 ; Vergleich Zählregister mit r28
|
130 | BREQ led54 ; wenn ja Sprung zu led54
|
131 |
|
132 | CP zaehler, r29 ; Vergleich Zählregister mit r29
|
133 | BREQ led43 ; wenn ja Sprung zu led43
|
134 |
|
135 | CP zaehler, r30 ; Vergleich Zählregister mit r30
|
136 | BREQ led32 ; wenn ja Sprung zu led32
|
137 |
|
138 | CP zaehler, r31 ; Vergleich Zählregister mit r31
|
139 | BREQ led21 ; wenn ja Sprung zu led21
|
140 |
|
141 |
|
142 | ;================================================================================================
|
143 | led12: LDI r16, $FC ; Wert $FC an
|
144 | OUT PORTD, r16 ; PORTD ausgeben
|
145 | SEI
|
146 | RJMP loop ; Rücksprung
|
147 |
|
148 | led23: LDI r16, $F9 ; Wert $F9 an
|
149 | OUT PORTD, r16 ; PORTD ausgeben
|
150 | SEI
|
151 | RJMP loop ; Rücksprung
|
152 |
|
153 | led34: LDI r16, $F3 ; Wert $F3 an
|
154 | OUT PORTD, r16 ; PORTD ausgeben
|
155 | SEI
|
156 | RJMP loop ; Rücksprung
|
157 |
|
158 | led45: LDI r16, $E7 ; Wert $E7 an
|
159 | OUT PORTD, r16 ; PORTD ausgeben
|
160 | SEI
|
161 | RJMP loop ; Rücksprung
|
162 |
|
163 | led56: LDI r16, $CF ; Wert $CF an
|
164 | OUT PORTD, r16 ; PORTD ausgeben
|
165 | SEI
|
166 | RJMP loop ; Rücksprung
|
167 |
|
168 | led67: LDI r16, $9F ; Wert $9F an
|
169 | OUT PORTD, r16 ; PORTD ausgeben
|
170 | SEI
|
171 | RJMP loop ; Rücksprung
|
172 |
|
173 | led78: LDI r16, $3F ; Wert $3F an
|
174 | OUT PORTD, r16 ; PORTD ausgeben
|
175 | SEI
|
176 | RJMP loop ; Rücksprung
|
177 |
|
178 | led76: LDI r16, $9F ; Wert $9F an
|
179 | OUT PORTD, r16 ; PORTD ausgeben
|
180 | SEI
|
181 | RJMP loop ; Rücksprung
|
182 |
|
183 | led65: LDI r16, $CF ; Wert $CF an
|
184 | OUT PORTD, r16 ; PORTD ausgeben
|
185 | SEI
|
186 | RJMP loop ; Rücksprung
|
187 |
|
188 | led54: LDI r16, $E7 ; Wert $E7 an
|
189 | OUT PORTD, r16 ; PORTD ausgeben
|
190 | SEI
|
191 | RJMP loop ; Rücksprung
|
192 |
|
193 | led43: LDI r16, $F3 ; Wert $F3 an
|
194 | OUT PORTD, r16 ; PORTD ausgeben
|
195 | SEI
|
196 | RJMP loop ; Rücksprung
|
197 |
|
198 | led32: LDI r16, $F9 ; Wert $F9 an
|
199 | OUT PORTD, r16 ; PORTD ausgeben
|
200 | SEI
|
201 | RJMP loop ; Rücksprung
|
202 |
|
203 | led21: LDI r16, $FC ; Wert $FC an
|
204 | OUT PORTD, r16 ; PORTD ausgeben
|
205 | SEI
|
206 | RJMP reset1 ; Rücksprung
|