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