.include "tn13def.inc" .equ tap = pinb ;Eingang Tastenport .equ t1 = pb3 ;Taster 1 an PB3 als t1 benennen .equ t2 = pb4 ;Taster 2 an PB4 als t2 benennen .def srsk = r2 ;Kopie SREG während ISR .def tsw = r3 ;Startwert Timer0 .def tz0 = r4 ;Tasten-Prellzähler Bit 0 .def tz1 = r5 ;Tasten-Prellzähler Bit 1 .def tas = r6 ;Tasten-Status (entprellt) .def A = r16 .def tfl = r23 ;Tastenflags (neu gedrückte Tasten) .def wl = r24 ;Working low (temp) .def wh = r25 rjmp Anfang .org 0x0003 rjmp TIM0_OVF ;Timer0 Overflow Anfang: ldi A, (1<1, 1,3,->0 eor tz1,tz0 ;H-Bit zählen 0,2,->tz1 toggeln and xl,tz0 ;Änderungen nur dann erhalten, wenn im Prellzähler and xl,tz1 ;beide Bits gesetzt sind (Zählerstand 3) eor tas,xl ;erhaltene Änderungen toggeln alten (gültigen) Tastenstatus and xl,tas ;nur (neu) gedrückte Tastenbits bleiben erhalten or tfl,xl ;und zugehörige Bits setzen (gelöscht wird nach Abarbeitung) ;in "tas" steht jetzt der gültige Tastenzustand, ;in "tfl" die Flags der neu gedrückten, noch nicht abgearbeiteten Tasten... ;xl ist jetzt wieder frei für weitere temporäre Zwecke in der ISR sbis portb,1 rjmp led_an cbi portb,1 rjmp ende led_an: sbi portb,1 rjmp ende Ende: out sreg,srsk ;Statusregister wiederherstellen reti