Lauflicht.asm


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