1 | ;Demoprogramm für 8-fach-PWM mit Tastensteuerung Up-Down.
|
2 |
|
3 | ;8 LEDs gegen Vcc an PortB (STK500)
|
4 | ;8 entprellte Tasten gegen GND für die einzelnen PWM-Kanäle an PortD
|
5 | ;1 "Shift-Taste" an PA6 gegen GND zum Wählen der Stellrichtung der Kanaltasten.
|
6 | ;Shift offen -> Kanaltasten zählen hoch,
|
7 | ;Shift betätigt -> Kanaltasten zählen runter.
|
8 | ;Der Zählumfang wird nach oben und unten begrenzt.
|
9 |
|
10 | .include "m8515def.inc"
|
11 | .listmac ;Makros listen
|
12 | .equ clock = 8000000 ;Taktfrequenz 8Mhz
|
13 |
|
14 |
|
15 | .equ pwu = 100 ;PWM-Zählumfang
|
16 | .equ timerwert = -100 ;Timer-Startwert (Reload)
|
17 | .equ step=6 ;Schrittweite für Änderung pro Tastendruck
|
18 | .equ lep=portb ;Port für LEDs
|
19 | .equ tap=pinc ;Tastenport
|
20 | .equ ship=pind ;Port für Shift-Taste
|
21 | .equ shib=6 ;Bit für Shift-Taste
|
22 |
|
23 |
|
24 | .equ avt0=20 ;Startwert Anzeige-Vorteiler
|
25 |
|
26 |
|
27 |
|
28 |
|
29 | .def soll0 = r0 ;Sollwert Kanal 1
|
30 | .def soll1 = r1 ;Sollwert Kanal 2
|
31 | .def soll2 = r2 ;Sollwert Kanal 3
|
32 | .def soll3 = r3 ;Sollwert Kanal 4
|
33 | .def soll4 = r4 ;Sollwert Kanal 5
|
34 | .def soll5 = r5 ;Sollwert Kanal 6
|
35 | .def soll6 = r6 ;Sollwert Kanal 7
|
36 | .def soll7 = r7 ;Sollwert Kanal 8
|
37 | .def tsw = r8 ;Timer-Startwert
|
38 | .def sregtemp = r9 ;Sicherheitskopie SREG
|
39 | .def scan=r10 ;Scannwert Tastenport
|
40 | .def tz0=r11 ;Tasten-Prellzähler Bit0
|
41 | .def tz1=r12 ;Tasten-Prellzähler Bit1
|
42 | .def tas=r13 ;Tastenstatus (gültig)
|
43 | .def null=r14 ;immer 0
|
44 |
|
45 |
|
46 |
|
47 | .def temp = r16
|
48 | .def tfl=r17 ;Flags für Tasten, die gedrückt wurden
|
49 | .def pwz = r18 ;PWM-Zähler
|
50 | .def task=r19 ;Taskscheibe für diverse Aufgaben
|
51 | .def ri=r20 ;Richtung der Änderung
|
52 | .def max=r21 ;Maximum
|
53 |
|
54 |
|
55 |
|
56 | ;.dseg ;SRAM-Variablen
|
57 | ;astring: .byte 27 ;Startadresse für LCD-Ausgabestring im S-RAM
|
58 |
|
59 | .def avt=r22 ;Anzeige-Vorteiler
|
60 | .def flags=r23 ;Steuerflags
|
61 | .equ aktuLCD=7 ;7 ;LCD aktualisieren
|
62 |
|
63 | .def wl=r24 ;Working L
|
64 | .def wh=r25 ;Working H
|
65 |
|
66 |
|
67 |
|
68 | .equ lcdcontroller1=4 ;Flag für Controller 1
|
69 | .equ lcdcontroller2=6 ;Flag für Controller 2
|
70 |
|
71 | .cseg
|
72 | ;.org 0 ;Reset- und Interrupt-Vektoren Mega 8535
|
73 | .org 0 ;Reset- und Interrupt-Vektoren AT-Mega 8515
|
74 | rjmp RESET ;Reset Handler
|
75 | rjmp nix;EXT_INT0 ;IRQ0 Handler
|
76 | rjmp nix;EXT_INT1 ;IRQ1 Handler
|
77 | rjmp nix;TIM1_CAPT ;Timer1 Capture Handler
|
78 | rjmp nix;TIM1_COMPA ;Timer1 Compare A Handler
|
79 | rjmp nix;TIM1_COMPB ;Timer1 Compare B Handler
|
80 | rjmp nix;TIM1_OVF ;Timer1 Overflow Handler
|
81 | rjmp TIM0_OVF ;Timer0 Overflow Handler
|
82 | rjmp nix;SPI_STC ;SPI Transfer Complete Handler
|
83 | rjmp nix;USART_RXC ;USART RX Complete Handler
|
84 | rjmp nix;USART_UDRE ;UDR0 Empty Handler
|
85 | rjmp nix;USART_TXC ;USART TX Complete Handler
|
86 | rjmp nix;ANA_COMP ;Analog Comparator Handler
|
87 | rjmp nix;EXT_INT2 ;IRQ2 Handler
|
88 | rjmp nix;TIM0_COMP ;Timer0 Compare Handler
|
89 | rjmp nix;EE_RDY ;EEPROM Ready Handler
|
90 | rjmp nix;SPM_RDY ;Store Program memory Ready Handler
|
91 | nix: ;unbenutzte Interrupts
|
92 | reti ;zurück...
|
93 |
|
94 | .include"LCDprint.inc" ;LCD-Ausgabefunktionen
|
95 | .include"LCD_4x40.inc" ;LCD-Routinen für 4-Zeilen-LCDs mit HD44780
|
96 |
|
97 | Reset:
|
98 |
|
99 | ldi wl,low(ramend) ;Stackpointer initialisieren
|
100 | out SPL,wl
|
101 | ldi wl,high(ramend)
|
102 | out SPH,wl
|
103 |
|
104 | clr null ;immer 0
|
105 |
|
106 | ldi wl, 0xFF ;Port A = Ausgang
|
107 | out DDRA, wl
|
108 |
|
109 |
|
110 |
|
111 | ldi temp, 0xff
|
112 | out lep-1,temp ;Ports B = Ausgang (DDRx=PORTx-1)
|
113 |
|
114 | ;out lep,temp ;LED aus
|
115 |
|
116 | out tap+2,temp ;Pull-Ups für Tasten einschalten (PORTx=PINx+2)
|
117 | ldi temp, 0x00
|
118 | out tap+1,temp ;Ports d = Eingang (DDRx=PINx+1)
|
119 |
|
120 | cbi ship+1,shib ;Shift-Tastenanschluss als Eingang
|
121 | sbi ship+2,shib ;Shift-PullUp einschalten
|
122 |
|
123 |
|
124 | clr soll0
|
125 | clr soll1
|
126 | clr soll2
|
127 | clr soll3
|
128 | clr soll4
|
129 | clr soll5
|
130 | clr soll6
|
131 | clr soll7
|
132 | clr tz0 ;Definierte Startbedingung
|
133 | clr tz1 ;für Tastenentprellung
|
134 | clr tas
|
135 | clr tfl
|
136 |
|
137 |
|
138 | ldi temp, 0x01
|
139 | out tccr0, temp ;Timertakt = 1:1
|
140 | ldi temp, 1<<toie0
|
141 | out timsk, temp ;Timer OVF freigeben
|
142 | ldi temp,timerwert+12 ;Timer-Startwert, korregiert mit Int-Aufruf12
|
143 | mov tsw,temp ;definieren
|
144 | out tcnt0,tsw ;und ausgeben
|
145 |
|
146 | ldi temp, 0; 50
|
147 | mov soll0, temp ;Naja, wenn es sein muss...
|
148 | ldi temp,1<<se ;Sleep-Mode (idle)
|
149 | out mcucr,temp ;freischalten
|
150 | ldi max,pwu ;Max-Wert für Begrenzung der Änderung
|
151 |
|
152 |
|
153 |
|
154 |
|
155 | rcall lcd_init ;LCD initialisieren
|
156 |
|
157 | locate 0,20
|
158 | print '8'
|
159 | print ' '
|
160 | print 'K'
|
161 | print 'A'
|
162 | print 'N'
|
163 | print 'A'
|
164 | print 'L'
|
165 | print ' '
|
166 | print 'A'
|
167 | print 'V'
|
168 | print 'R'
|
169 | print ' '
|
170 | print 'D'
|
171 | print 'I'
|
172 | print 'M'
|
173 | print 'M'
|
174 | print 'E'
|
175 | print 'R'
|
176 |
|
177 |
|
178 |
|
179 |
|
180 | locate 2,20
|
181 | print 'T'
|
182 | print 'A'
|
183 | print 'S'
|
184 | print 'T'
|
185 | print 'E'
|
186 | print 'N'
|
187 | print ' '
|
188 | print 'N'
|
189 | print 'r'
|
190 | print '.'
|
191 | print '*'
|
192 | print '*'
|
193 | print 'M'
|
194 | print 'O'
|
195 | print 'D'
|
196 | print 'E'
|
197 | print '*'
|
198 | print '*'
|
199 | print '*'
|
200 | print '*'
|
201 |
|
202 |
|
203 | locate 3,20
|
204 | print 'T'
|
205 | print 'A'
|
206 | print 'S'
|
207 | print 'T'
|
208 | print 'E'
|
209 | print '*'
|
210 | print '*'
|
211 | print '*'
|
212 | print '*'
|
213 | print '*'
|
214 | print '*'
|
215 | print '*'
|
216 | print '*'
|
217 | print '*'
|
218 | print '*'
|
219 | print '*'
|
220 | print '*'
|
221 | print '*'
|
222 | print '*'
|
223 | print '*'
|
224 |
|
225 | sei
|
226 |
|
227 |
|
228 |
|
229 |
|
230 | Haupt: ;Hauptschleife, Auswertung der Tastenflags
|
231 | ;und Jobflags die in der ISR gesetzt wurden und verändern
|
232 | ;der PWM-Werte der 8 Kanäle.
|
233 | sleep ;Schlafmodus, Wecken erfolgt durch Timer-Int.
|
234 |
|
235 |
|
236 |
|
237 | sbrc flags,aktuLCD ;muss LCD aktualisiert werden? - nein...
|
238 |
|
239 | rcall gibaus ;ja, Job aufrufen...
|
240 |
|
241 |
|
242 | tst tfl ;Ein Bit im Tastenflag gesetzt?
|
243 | breq haupt ;nein, keine Taste gedrückt gewesen... (schlafen gehen...)
|
244 | ;ldi ri,step ;ja, erstmal aufwärts zählen
|
245 | ;sbis ship,shib ;Shift-Taste gedrückt? (nein...)
|
246 | ;rjmp minus ;ja, zum Abwärtszählen...
|
247 |
|
248 |
|
249 | taste0:
|
250 | sbrs tfl,0 ;Taste 0?
|
251 | rjmp taste1 ;nein...
|
252 | rcall MEN_98
|
253 | ; add soll0,ri ;ja, ändern
|
254 | ; rcall t1
|
255 | ; cp soll0,max ;Maxwert überschritten?
|
256 | ; brlo taste1 ;nein...
|
257 | ; mov soll0,max ;ja, auf Maxwert begrenzen
|
258 | taste1:
|
259 | sbrs tfl,1 ;Taste 1?
|
260 | rjmp taste2 ;nein...
|
261 | ;rcall MEN_97 ;
|
262 |
|
263 | ;add soll1,ri ;ja, ändern
|
264 | ;rcall t2
|
265 | ; cp soll1,max ;Maxwert überschritten?
|
266 | ; brlo taste2 ;nein...
|
267 | ; mov soll1,max ;ja, auf Maxwert begrenzen
|
268 | taste2:
|
269 |
|
270 | ;rcall MEN_96 ;
|
271 |
|
272 | sbrs tfl,2 ;Taste 2?
|
273 | rjmp taste3 ;nein...
|
274 | ;add soll2,ri ;ja, ändern
|
275 | ;rcall t3
|
276 | ;cp soll2,max ;Maxwert überschritten?
|
277 | ;brlo taste3 ;nein...
|
278 | ;mov soll2,max ;ja, auf Maxwert begrenzen
|
279 | taste3:
|
280 | sbrs tfl,3 ;Taste 3?
|
281 | rjmp taste4 ;nein...
|
282 | ;rcall MEN_95
|
283 | ;add soll3,ri ;ja, ändern
|
284 | ;rcall t4
|
285 | ; cp soll3,max ;Maxwert überschritten?
|
286 | ; brlo taste4 ;nein...
|
287 | ; mov soll3,max ;ja, auf Maxwert begrenzen
|
288 | taste4:
|
289 | sbrs tfl,4 ;Taste 4?
|
290 | rjmp taste5 ;nein...
|
291 | rcall MEN_start ;up to start
|
292 |
|
293 | ; add soll4,ri ;ja, ändern
|
294 | ;rcall t5
|
295 | ; cp soll4,max ;Maxwert überschritten?
|
296 | ; brlo taste5 ;nein...
|
297 | ; mov soll4,max ;ja, auf Maxwert begrenzen
|
298 | taste5:
|
299 | sbrs tfl,5 ;Taste 5?
|
300 | rjmp taste6 ;nein...
|
301 | ;rcall MEN_23 ;
|
302 | ;add soll5,ri ;ja, ändern,
|
303 | ;rcall t6
|
304 | ;cp soll5,max ;Maxwert überschritten?
|
305 | ;brlo taste6 ;nein...
|
306 | ;mov soll5,max ;ja, auf Maxwert begrenzen
|
307 | taste6:
|
308 | ;
|
309 | sbrs tfl,6 ;Taste 6?
|
310 | rjmp taste7 ;nein...
|
311 | ;rcall MEN_22
|
312 | ; add soll6,ri ;ja, ändern;
|
313 | ;rcall t7
|
314 | ; cp soll6,max ;Maxwert überschritten?
|
315 | ; brlo taste7 ;nein...
|
316 | ; mov soll6,max ;ja, auf Maxwert begrenzen
|
317 | taste7:
|
318 | sbrs tfl,7 ;Taste 7?
|
319 | rjmp taste8 ;nein...
|
320 | ;rcall MEN_21
|
321 | ;add soll7,ri ;ja, ändern
|
322 | ;rcall t8
|
323 | ; cp soll7,max ;Maxwert überschritten?
|
324 | ; brlo taste8 ;nein...
|
325 | ; mov soll7,max ;ja, auf Maxwert begrenzen
|
326 | taste8:
|
327 | clr tfl ;alle Tastenflags löschen
|
328 | rjmp haupt ;fertig, schlafen gehen...
|
329 |
|
330 |
|
331 | ;minus:
|
332 | ; sbrs tfl,0 ;Taste 0?
|
333 | ; rjmp minus1 ;nein...
|
334 | ; sub soll0,ri ;ja, ändern
|
335 | ;rcall t1m
|
336 | ; brcc minus1 ;Unterlauf ? (nein...)
|
337 | ; clr soll0 ;ja, auf 0 setzen
|
338 | ;minus1:
|
339 | ; sbrs tfl,1 ;Taste 1?
|
340 | ; rjmp minus2 ;nein...
|
341 | ; sub soll1,ri ;ja, ändern
|
342 | ;rcall t2m
|
343 | ; brcc minus2 ;Unterlauf ? (nein...)
|
344 | ; clr soll1 ;ja, auf 0 setzen
|
345 | ;minus2:
|
346 | ; sbrs tfl,2 ;Taste 2?
|
347 | ; rjmp minus3 ;nein...
|
348 | ; sub soll2,ri ;ja, ändern
|
349 | ;rcall t3m
|
350 | ; brcc minus3 ;Unterlauf ? (nein...)
|
351 | ; clr soll2 ;ja, auf 0 setzen
|
352 | ;minus3:
|
353 | ; sbrs tfl,3 ;Taste 3?
|
354 | ; rjmp minus4 ;nein...
|
355 | ; sub soll3,ri ;ja, ändern
|
356 | ;rcall t4m
|
357 | ; brcc minus4 ;Unterlauf ? (nein...)
|
358 | ; clr soll3 ;ja, auf 0 setzen
|
359 | ;minus4:
|
360 | ; sbrs tfl,4 ;Taste 4?
|
361 | ; rjmp minus5 ;nein...
|
362 | ; sub soll4,ri ;ja, ändern
|
363 | ;rcall t5m
|
364 | ; brcc minus5 ;Unterlauf ? (nein...)
|
365 | ; clr soll4 ;ja, auf 0 setzen
|
366 | ;minus5:
|
367 | ; sbrs tfl,5 ;Taste 5?
|
368 | ; rjmp minus6 ;nein...
|
369 | ; sub soll5,ri ;ja, ändern;
|
370 | ;rcall t6m
|
371 | ; brcc minus6 ;Unterlauf ? (nein...)
|
372 | ; clr soll5 ;ja, auf 0 setzen
|
373 | ;minus6:
|
374 | ; sbrs tfl,6 ;Taste 6?
|
375 | ; rjmp minus7 ;nein...
|
376 | ; sub soll6,ri ;ja, ändern
|
377 | ; rcall t7m
|
378 | ; brcc minus7 ;Unterlauf ? (nein...)
|
379 | ; clr soll6 ;ja, auf 0 setzen
|
380 | ;minus7:
|
381 | ; sbrs tfl,7 ;Taste 7?
|
382 | ;rjmp minus8 ;nein...
|
383 | ; sub soll7,ri ;ja, ändern
|
384 | ;rcall t8m
|
385 | ; brcc minus8 ;Unterlauf ? (nein...)
|
386 | ; clr soll7 ;ja, auf 0 setzen
|
387 | ;minus8:
|
388 | ; clr tfl ;alle Tastenflags löschen
|
389 | ; rjmp haupt ;Hauptprogramm Endlosschleife
|
390 |
|
391 |
|
392 | gibaus: ;Unterprogramm zum Ausgeben der Werte
|
393 | cbr flags,1<<aktuLCD ;Jobflag löschen, wird ja jetzt erledigt
|
394 |
|
395 |
|
396 |
|
397 | locate 0,0 ;Erste Position der zweiten Zeile
|
398 |
|
399 | print 'K' ;K
|
400 | print 'A' ;A
|
401 | print 'N' ;N
|
402 | print '1' ;1
|
403 | print ' ' ;Leerzeichen
|
404 | print8 r0 ;1. Wert
|
405 | print '%' ;Prozent-Zeichen
|
406 | print ' ' ;Leerzeichen
|
407 | ;print ' ' ;Leerzeichen
|
408 |
|
409 | locate 1,0
|
410 |
|
411 | print 'K' ;K
|
412 | print 'A' ;A
|
413 | print 'N' ;N
|
414 | print '2' ;2
|
415 | print ' ' ;Leerzeichen
|
416 | print8 r1 ;2. Wert
|
417 | print '%' ;Prozent-Zeichen
|
418 | print ' ' ;Leerzeichen
|
419 | ;print ' ' ;Leerzeichen
|
420 |
|
421 | locate 2,0
|
422 | print 'K' ;K
|
423 | print 'A' ;A
|
424 | print 'N' ;N
|
425 | print '3' ;3
|
426 | print ' ' ;Leerzeichen
|
427 | print8 r2 ;3. Wert
|
428 | print '%' ;Prozent-Zeichen
|
429 | print ' ' ;Leerzeichen
|
430 | ;print ' ' ;Leerzeichen
|
431 |
|
432 | locate 3,0
|
433 | print 'K' ;K
|
434 | print 'A' ;A
|
435 | print 'N' ;N
|
436 | print '4' ;4
|
437 | print ' ' ;Leerzeichen
|
438 | print8 r3 ;4. Wert
|
439 | print '%' ;Prozent-Zeichen
|
440 | print ' ' ;Leerzeichen
|
441 | ;print ' ' ;Leerzeichen
|
442 |
|
443 | locate 0,10 ;erste Position der dritten Zeile
|
444 |
|
445 | print 'K' ;K
|
446 | print 'A' ;A
|
447 | print 'N' ;N
|
448 | print '5' ;5
|
449 | print ' ' ;Leerzeichen
|
450 | print8 r4 ;5 Wert
|
451 | print '%' ;Prozent-Zeichen
|
452 | print ' ' ;Leerzeichen
|
453 | ;print ' ' ;Leerzeichen
|
454 |
|
455 | locate 1,10
|
456 | print 'K' ;K
|
457 | print 'A' ;A
|
458 | print 'N' ;N
|
459 | print '6' ;6
|
460 | print ' ' ;Leerzeichen
|
461 | print8 r5 ;6 Wert
|
462 | print '%' ;Prozent-Zeichen
|
463 | print ' ' ;Leerzeichen
|
464 | ;print ' ' ;Leerzeichen
|
465 |
|
466 | locate 2,10
|
467 | print 'K' ;K
|
468 | print 'A' ;A
|
469 | print 'N' ;N
|
470 | print '7' ;7
|
471 | print ' ' ;Leerzeichen
|
472 | print8 r6 ;7. Wert
|
473 | print '%' ;Prozent-Zeichen
|
474 | print ' ' ;Leerzeichen
|
475 | ;print ' ' ;Leerzeichen
|
476 |
|
477 | locate 3,10
|
478 | print 'K' ;K
|
479 | print 'A' ;A
|
480 | print 'N' ;N
|
481 | print '8' ;8
|
482 | print ' ' ;Leerzeichen
|
483 | print8 r7 ;8. Wert
|
484 | print '%' ;Prozent-Zeichen
|
485 | print ' ' ;Leerzeichen
|
486 |
|
487 |
|
488 | ret
|
489 |
|
490 |
|
491 |
|
492 |
|
493 |
|
494 |
|
495 | Tim0_OVF: ;ISR Timer0-Überlauf
|
496 | in sregtemp, sreg ;Sreg sichern
|
497 | out tcnt0,tsw ;Timer auf Startwert setzen
|
498 | inc pwz ;PWM-Treppenzähler erhöhen
|
499 | cpi pwz, pwu ;PWM-Zählumfang erreicht?
|
500 | brne Time0_a ;nein... (die 3 Punkte bedeuten bei mir Sprung)
|
501 | clr pwz ;von vorn beginnen mit zählen
|
502 | Time0_a: ;Vergleich der einzelnen PWM-Werte mit dem PWM-Treppenzähler
|
503 | ;(Idee geklaut bei Peter Dannegger)
|
504 | cp pwz, soll7 ;Sollwert erreicht? (Ergebnis im Carry)
|
505 | rol temp ;Carry-Bits "einsammeln", dieses wird bis Bit7 durchgeschoben
|
506 | cp pwz, soll6
|
507 | rol temp ;Bit 6
|
508 | cp pwz, soll5
|
509 | rol temp ;Bit 5
|
510 | cp pwz, soll4
|
511 | rol temp ;Bit 4
|
512 | cp pwz, soll3
|
513 | rol temp ;Bit 3
|
514 | cp pwz, soll2
|
515 | rol temp ;Bit 2
|
516 | cp pwz, soll1
|
517 | rol temp ;Bit 1
|
518 | cp pwz, soll0
|
519 | rol temp ;Bit 0
|
520 | ;com temp ;invertieren da low-aktive LED im STK500
|
521 | out portB, temp ;Ausgabe
|
522 | inc task ;Taskscheibe erhöhen (Tastenabfrage erfolgt nur bei Task Nr. 0)
|
523 | ;andere Aufgaben können bei anderen Zählerständen aufgerufen werden
|
524 | ;dabei ist darauf zu achten, dass kein Durchlauf der ISR mehr als
|
525 | ;70 Takte dauert, da die ISR alle 100 Takte aufgerufen wird und
|
526 | ;der Aufruf (mit Reti) schon 10 Takte braucht.
|
527 | brne timertasks ;nur bei 0 Tasten abfragen...
|
528 | Tastenabfrage: ;Entprellroutine (geklaut bei Peter Dannegger...)
|
529 | in scan,tap ;Tastenport einlesen (gedrückt=L)
|
530 | com scan ;invertieren (gedrückt=H)
|
531 | eor scan,tas ;nur Änderungen werden H
|
532 | and tz0,scan ;Prellzähler unveränderter Tasten löschen (Bit0)
|
533 | and tz1,scan ;Prellzähler unveränderter Tasten löschen (Bit1)
|
534 | com tz0 ;L-Bit zählen 0,2,->1, 1,3,->0
|
535 | eor tz1,tz0 ;H-Bit zählen 0,2,->tz1 toggeln
|
536 | and scan,tz0 ;Änderungen nur dann erhalten, wenn im Prellzähler
|
537 | and scan,tz1 ;beide Bits gesetzt sind (Zählerstand 3)
|
538 | eor tas,scan ;erhaltene Änderungen toggeln alten (gültigen) Tastenstatus
|
539 | and scan,tas ;nur (neu) gedrückte Tastenbits bleiben erhalten
|
540 | or tfl,scan ;und zugehörige Bits setzen (gelöscht wird nach Abarbeitung)
|
541 | ;in "tas" steht jetzt der gültige Tastenzustand,
|
542 | ;in "tfl" die Flags der neu gedrückten, noch nicht abgearbeiteten Tasten...
|
543 | timertasks:
|
544 | cpi task,2 ;Beispiel für Verzweigung nach Taskscheibe
|
545 | brne timerfertig ;bei falscher Tasknummer Überspringen...
|
546 | dec avt ;Anzeige-Vorteiler runter
|
547 | brne timerfertig ;unten? nein, weg hier...
|
548 | ldi avt,avt0 ;ja, Startwert laden
|
549 | sbr flags,1<<aktuLCD ;Flag setzen, um LCD zu aktualisieren
|
550 |
|
551 | timerfertig:
|
552 | out sreg, sregtemp ;Sreg wiederherstellen
|
553 | reti ;ISR fertig
|
554 |
|
555 |
|
556 |
|
557 | Text1:
|
558 |
|
559 |
|
560 | ret
|
561 |
|
562 |
|
563 |
|
564 |
|
565 | t1:
|
566 | locate 3,27
|
567 | print '1'
|
568 | print ' ' ;6 Leerzeichen
|
569 | print ' '
|
570 | print ' '
|
571 | print ' '
|
572 | print ' '
|
573 | print 'U'
|
574 | print 'P'
|
575 | print ' '
|
576 | ret
|
577 |
|
578 |
|
579 |
|
580 | t2:
|
581 | locate 3,27
|
582 | print '2'
|
583 | print ' ' ;6 Leerzeichen
|
584 | print ' '
|
585 | print ' '
|
586 | print ' '
|
587 | print ' '
|
588 | print 'U'
|
589 | print 'P'
|
590 | print ' '
|
591 | ret
|
592 |
|
593 | t3:
|
594 | locate 3,27
|
595 | print '3'
|
596 | print ' ' ;6 Leerzeichen
|
597 | print ' '
|
598 | print ' '
|
599 | print ' '
|
600 | print ' '
|
601 | print 'U'
|
602 | print 'P'
|
603 | print ' '
|
604 | ret
|
605 |
|
606 | t4:
|
607 | locate 3,27
|
608 | print '4'
|
609 | print ' ' ;6 Leerzeichen
|
610 | print ' '
|
611 | print ' '
|
612 | print ' '
|
613 | print ' '
|
614 | print 'U'
|
615 | print 'P'
|
616 | print ' '
|
617 | ret
|
618 |
|
619 | t5:
|
620 | locate 3,27
|
621 | print '5'
|
622 | print ' ' ;6 Leerzeichen
|
623 | print ' '
|
624 | print ' '
|
625 | print ' '
|
626 | print ' '
|
627 | print 'U'
|
628 | print 'P'
|
629 | print ' '
|
630 | ret
|
631 |
|
632 | t6:
|
633 | locate 3,27
|
634 | print '6'
|
635 | print ' ' ;6 Leerzeichen
|
636 | print ' '
|
637 | print ' '
|
638 | print ' '
|
639 | print ' '
|
640 | print 'U'
|
641 | print 'P'
|
642 | print ' '
|
643 | ret
|
644 |
|
645 | t7:
|
646 | locate 3,27
|
647 | print '7'
|
648 | print ' ' ;6 Leerzeichen
|
649 | print ' '
|
650 | print ' '
|
651 | print ' '
|
652 | print ' '
|
653 | print 'U'
|
654 | print 'P'
|
655 | print ' '
|
656 | ret
|
657 |
|
658 | t8:
|
659 | locate 3,27
|
660 | print '8'
|
661 | print ' ' ;6 Leerzeichen
|
662 | print ' '
|
663 | print ' '
|
664 | print ' '
|
665 | print ' '
|
666 | print 'U'
|
667 | print 'P'
|
668 | print ' '
|
669 | ret
|
670 |
|
671 |
|
672 | t1m:
|
673 | locate 3,27
|
674 | print '1'
|
675 | print ' ' ;6 Leerzeichen
|
676 | print ' '
|
677 | print ' '
|
678 | print ' '
|
679 | print 'D'
|
680 | print 'O'
|
681 | print 'W'
|
682 | print 'N'
|
683 | ret
|
684 |
|
685 | t2m:
|
686 | locate 3,27
|
687 | print '2'
|
688 | print ' ' ;6 Leerzeichen
|
689 | print ' '
|
690 | print ' '
|
691 | print ' '
|
692 | print 'D'
|
693 | print 'O'
|
694 | print 'W'
|
695 | print 'N'
|
696 | ret
|
697 |
|
698 | t3m:
|
699 | locate 3,27
|
700 | print '3'
|
701 | print ' ' ;6 Leerzeichen
|
702 | print ' '
|
703 | print ' '
|
704 | print ' '
|
705 | print 'D'
|
706 | print 'O'
|
707 | print 'W'
|
708 | print 'N'
|
709 | ret
|
710 |
|
711 | t4m:
|
712 | locate 3,27
|
713 | print '4'
|
714 | print ' ' ;6 Leerzeichen
|
715 | print ' '
|
716 | print ' '
|
717 | print ' '
|
718 | print 'D'
|
719 | print 'O'
|
720 | print 'W'
|
721 | print 'N'
|
722 | ret
|
723 |
|
724 | t5m:
|
725 | locate 3,27
|
726 | print '5'
|
727 | print ' ' ;6 Leerzeichen
|
728 | print ' '
|
729 | print ' '
|
730 | print ' '
|
731 | print 'D'
|
732 | print 'O'
|
733 | print 'W'
|
734 | print 'N'
|
735 | ret
|
736 |
|
737 | t6m:
|
738 | locate 3,27
|
739 | print '6'
|
740 | print ' ' ;6 Leerzeichen
|
741 | print ' '
|
742 | print ' '
|
743 | print ' '
|
744 | print 'D'
|
745 | print 'O'
|
746 | print 'W'
|
747 | print 'N'
|
748 | ret
|
749 |
|
750 | t7m:
|
751 | locate 3,27
|
752 | print '7'
|
753 | print ' ' ;6 Leerzeichen
|
754 | print ' '
|
755 | print ' '
|
756 | print ' '
|
757 | print 'D'
|
758 | print 'O'
|
759 | print 'W'
|
760 | print 'N'
|
761 | ret
|
762 |
|
763 | t8m:
|
764 | locate 3,27
|
765 | print '8'
|
766 | print ' ' ;6 Leerzeichen
|
767 | print ' '
|
768 | print ' '
|
769 | print ' '
|
770 | print 'D'
|
771 | print 'O'
|
772 | print 'W'
|
773 | print 'N'
|
774 | ret
|
775 |
|
776 |
|
777 | MEN_start:
|
778 | locate 2,19
|
779 | printf eins
|
780 | RET
|
781 | ;
|
782 |
|
783 | MEN_98:
|
784 | locate 3,19
|
785 | printf ZWEI
|
786 | ret
|
787 | eins: .db "MENUE",0
|
788 | zwei: .db "MENUE <1> ",0
|
789 | drei: .db "KANAL WÄHLEN",0
|