Lauflicht.asm


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