I wasn't clear there, this debouncer takes care of N keys. A foreground task compares current key state to stored key state, and re-loads the timer if it detects a change. If the timer goes to 0, then I save the state of the switches as debounced, and set a bit flag that tells tasks that there are new switches. Key_scan: ;assuming 8 keys on a port, but could be any number ;could be multiple ports. in temp,pina ;get current key state lds temp2,old_keys ;State the last time I looked cp temp,temp2 ;Same? breq key_scan_check ;Just let them run ldi temp,Key_debounce_time ;Restart the debounce timer sts Thing_counter,temp ;named so this meshes with the isr sts old_keys,temp2 ;save state for next scan ret ; Key_Scan_Check: lds temp,thing_counter ;keys stable? and temp,temp ;is it 0? brne keys_done if not, then just wait sts debounced_keys,temp2 ; sbr sysflags,1<