.nolist ;List der Include-Datei unterdrücken .include "m8515def.inc" ;vereinbarte Namen verwenden (lt. Datasheet) .list ;Programm listen .listmac ;Makros listen .equ clock = 8000000 ;Taktfrequenz 8Mhz .equ pwu = 100 ;PWM-Zählumfang (sollte 100 sein wegen %) .equ timerwert = -100 ;Timer-Startwert (Reload)-100 .equ step=1 ;Schrittweite für Änderung pro Tastendruck .equ lep=portb ;Port für LEDs .equ tap=pinD ;Tastenport .equ dimplus = 5 ;Taste Dimmen plus .equ dimminus = 4 ;Taste Dimmen minus .equ chanplus = 1 ;Taste Kanal hoch .equ chanminus = 0 ;Taste Kanal runter .equ dimtast=(1<1, 1,3,->0 eor tz1,tz0 ;H-Bit zählen 0,2,->tz1 toggeln and temp,tz0 ;Änderungen nur dann erhalten, wenn im Prellzähler and temp,tz1 ;beide Bits gesetzt sind (Zählerstand 3) eor tas,temp ;erhaltene Änderungen toggeln alten (gültigen) Tastenstatus and temp,tas ;nur (neu) gedrückte Tastenbits bleiben erhalten or tfl,temp ;und zugehörige Bits setzen (gelöscht wird nach Abarbeitung) ;tmp ist wieder frei, tas enthält den entprellten Tastenstatus, ;tfl die neu gerückten Tasten Tastendauer: mov temp,tas ;Tastenzustand kopieren andi temp,dimtast ;nur Dimm-Tasten mit Wiederholfunktion stehen lassen tst temp ;ist eine Taste betätigt? breq Tastendauer0 ;nein, Dauer auf Startwert... dec twz ;ja, Zähler runter brne Tastenabfrage_e ;Dauer abgelaufen? - nein... or tfl,temp ;ja, noch aktive Tasten übernehmen ldi twz,twz1 ;und Zähler auf Wiederholwert setzen Tastenabfrage_e: ;in "tfl" stehen jetzt wieder die Flags der länger betätigten Tasten ;sie werden nach Abarbeitung gelöscht Time0_a: ;Vergleich der einzelnen PWM-Werte mit dem PWM-Treppenzähler push yl ;Register sichern push yh ;Register sichern ldi yl,low(Sollwerte) ldi yh,high(Sollwerte) ld r20,y+;Soll0 cp pwz,r20 ;Sollwert0 erreicht? ror wl ;Ergebnis (Carry) sichern ld r20,y+;Soll1 cp pwz,r20 ;Sollwert1 erreicht? ror wl ;Ergebnis (Carry) sichern ld r20,y+;Soll2 cp pwz,r20 ;Sollwert2 erreicht? ror wl ;Ergebnis (Carry) sichern ld r20,y+;Soll3 cp pwz,r20 ;Sollwert3 erreicht? ror wl ;Ergebnis (Carry) sichern ld r20,y+;Soll4 cp pwz,r20 ;Sollwert4 erreicht? ror wl ;Ergebnis (Carry) sichern ld r20,y+;Soll5 cp pwz,r20 ;Sollwert5 erreicht? ror wl ;Ergebnis (Carry) sichern ld r20,y+;Soll6 cp pwz,r20 ;Sollwert6 erreicht? ror wl ;Ergebnis (Carry) sichern ld r20,y+;Soll7 cp pwz,r20 ;Sollwert7 erreicht? ror wl ;Ergebnis (Carry) sichern ;com wl ;invertieren wegen L-aktiven Ausgängen out lep, wl ;Ausgabe pop yh ;Register wiederherstellen pop yl ;Register wiederherstellen out sreg, sregtemp ;Sreg wiederherstellen reti ;ISR fertig... Tastendauer0: ;Reset Dauerzähler ldi twz,twz0 ;Tastendauerzähler auf Startwert rjmp Tastenabfrage_e ;fertig...