;************************************************************************* ;* * ;* Testing Read and debounce up to 8 keys * ;* * ;************************************************************************* .nolist .include "c:\avr\inc\1200def.inc" .list .def save_sreg = r0 .def iwr0 = r1 .def iwr1 = r2 .def key_old = r3 .def key_state = r4 .def key_press = r5 .def leds = r16 .def wr0 = r17 .equ key_port = pind .equ led_port = portb rjmp init .org OVF0addr ;timer interrupt 24ms in save_sreg, SREG get8key: ;/old state iwr1 iwr0 mov iwr0, key_old ;00110011 10101010 00110011 in key_old, key_port ;11110000 eor iwr0, key_old ; 11000011 com key_old ;00001111 mov iwr1, key_state ; 10101010 or key_state, iwr0 ; 11101011 and iwr0, key_old ; 00000011 eor key_state, iwr0 ; 11101000 and iwr1, iwr0 ; 00000010 or key_press, iwr1 ;store key press detect ; ; insert other timer functions here ; out SREG, save_sreg reti ;------------------------------------------------------------------------- init: ldi wr0, 0xFF out ddrb, wr0 ldi wr0, 1<