.include "Label.inc" ; clr tfl ;TasterFlaggen nicht gesetzt clr tas ;TAsterStatus Grundzustand => High = losgelassen ldi tmp,$FF ;Wegen immediate Zugriff muss es ein Register >r15 sein mov tz0,tmp ;Bereits vor dem Einschalten bzw. RESET, gedrückte Taste.. mov tz1,tz0 ;.. nicht unentprellt durchgehen lassen. ldi tmp,alltast ;Maske der benoetigten Taster.. out KEY_PORT,tmp ;.. nutzen, um Pull-Up Widerstaende einzuschalten. Tastenabfrage: ;Entprell-Algorithmus geklaut bei Peter Dannegger... ;die Tasten liegen auf den untern 4 Bits ;cbr flags,1<1, 1,3,->0 eor tz1,tz0 ;H-Bit zählen 0,2,->tz1 toggeln and tmp,tz0 ;Änderungen nur dann erhalten, wenn im Prellzähler and tmp,tz1 ;beide Bits gesetzt sind (Zählerstand 3) ; Loslasserkennung push tmp ;Kopie and tmp,tas ;nur die Tasten erhalten, die jetzt losgelassen wurden ;entweder: swap tmp ;ins andere Nibble (das ist ja frei) or tfl,tmp ;Bits im anderen Nibble setzen (alternativ) ;oder: ; or tlf,tmp ;Bits im anderen Register setzen (alternativ) ;--- pop tmp ;alten Wert wiederherstellen eor tas,tmp ;erhaltene Änderungen toggeln alten (gültigen) Tastenstatus and tmp,tas ;nur (neu) gedrückte Tastenbits bleiben erhalten or tfl,tmp ;und zugehörige Bits setzen (gelöscht wird nach Abarbeitung) rjmp tastenabfrage ;Fuer Programmtesten ;in "tas" steht jetzt der gültige Tastenzustand, ;in "tfl" die Flags der neu gedrückten, noch nicht abgearbeiteten Tasten. ;wobei im unteren Nibble die Tastendrücke liegen und im oberen Nibble ;die Loslass-Ereignisse. ;und hier passt noch die Repeat-Erweiterung rein, die allerdings zusammen ;mit der Loslasserkennung nicht sonderlich sinnvoll ist. ret ;fertig...