Hi all, I am reading a keypad that is connected to other board. I am using PIC24FJ2= 56GB110 with CCS PICC compiler. I am using CNI interrupt "port on change" and conne= tced to all 4 rows. any time any row goes low it create interrupt but also when it goes high cr= eates interrupt too. the problem I am having is that I am getting duplicated key "debounce issue= ". Normally=A0 I used a counter to deal with debouning or adding a delay. Since CNI interr= upt is not looping is like one time shot unless there is a port change using a counter is not = working. I also have option=A0 using columns but this will create interrupt every 1.5 ms none stop. using = rows will create interupt only when keys are pushed. any idea? or suggestions will appreciate=A0 here is the code. // Keypad layout:=A0 char const KEYS[4][4] =3D=A0 {{'1','2','3','A'},=A0 =A0{'4','5','6','B'},=A0 =A0{'7','8','9','C'},=A0 =A0{'*','0','#','D'}};=A0 // check all rows and return 1 when pushed else return 0 int1 ALL_ROWS(void)=A0 {=A0 if((input(row0)) & (input(row1)) & (input(row2)) & (input(row3))) =A0// if = any of them pushed return 1 =A0 {=A0 =A0 return (0); =A0 } =A0 else =A0 {=A0 =A0 return (1); =A0 }=A0 }=A0 // read keypad but from other board. keypad is connected to other PCB=A0 #int_cni =A0//level=3D7 void keypad_interrupt() { //int32 prg_counter=3D0,data_prg=3D0,read_index_counter[3]; =A0 =A0 =A0 // = all this is for other routine that is removed for now =A0 =A0 restart_wdt(); =A0 =A0 =A0 =A0 delay_ms(5); =A0 // for debounce purpose=A0 =A0 =A0 =A0 =A0 if((ALL_ROWS())&&(system_keypad_send_once =3D=3D 1)) // any= of 4 inputs are pressed? row0 & row1 & row2 & row3=A0 =A0 =A0 =A0 =A0 =A0 =A0 {=A0 =A0 =A0 =A0 redled_on; =A0 =A0=A0 =A0 =A0 =A0 =A0 =A0 // col0 1,4,7,* =A0 =A0 =A0 =A0 =A0 if((!input(row0))&&(!input(col0)))=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0{=A0 =A0 =A0 =A0 =A0 =A0 =A0 row=3D0; col=3D0; =A0 =A0 =A0 =A0 =A0 =A0 kbd_down =3D true;=A0 =A0 =A0 =A0 =A0 =A0 =A0 key_pressed =3DKEYS[row][col]; =A0 =A0 =A0 =A0 =A0 =A0 system_keypad_send_once =3D 0; =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} =A0 =A0 =A0 =A0 =A0 =A0 =A0if((!input(row1))&&(!input(col0))) =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=A0 =A0 =A0 =A0 =A0 =A0 =A0 row=3D1; col=3D0; =A0 =A0 =A0 =A0 =A0 =A0 kbd_down =3D true;=A0 =A0 =A0 =A0 =A0 =A0 =A0 key_pressed =3DKEYS[row][col]; =A0 =A0 =A0 =A0 =A0 =A0 system_keypad_send_once =3D 0; =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=A0 =A0 =A0 =A0 =A0 =A0 =A0if((!input(row2))&&(!input(col0))) =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=A0 =A0 =A0 =A0 =A0 =A0 =A0 row=3D2; col=3D0; =A0 =A0 =A0 =A0 =A0 =A0 kbd_down =3D true;=A0 =A0 =A0 =A0 =A0 =A0 =A0 key_pressed =3DKEYS[row][col]; =A0 =A0 =A0 =A0 =A0 =A0 system_keypad_send_once =3D 0; =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=A0 =A0 =A0 =A0 =A0 =A0 =A0if((!input(row3))&&(!input(col0))) =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=A0 =A0 =A0 =A0 =A0 =A0 =A0 row=3D3; col=3D0; =A0 =A0 =A0 =A0 =A0 =A0 kbd_down =3D true;=A0 =A0 =A0 =A0 =A0 =A0 =A0 key_pressed =3DKEYS[row][col]; =A0 =A0 =A0 =A0 =A0 =A0 system_keypad_send_once =3D 0; =A0 =A0 =A0 =A0 =A0 =A0 =A0 } =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0// col1 =A02,5,8,0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if((!input(row0))&&(!input(col1))) =A0 =A0 =A0 =A0 =A0 =A0 =A0{=A0 =A0 =A0 =A0 =A0 =A0 =A0 row=3D0; col=3D1; =A0 =A0 =A0 =A0 =A0 =A0 kbd_down =3D true;=A0 =A0 =A0 =A0 =A0 =A0 =A0 key_pressed =3DKEYS[row][col]; =A0 =A0 =A0 =A0 =A0 =A0 system_keypad_send_once =3D 0; =A0 =A0 =A0 =A0 =A0 =A0 =A0 } =A0 =A0 =A0 =A0 =A0 =A0 =A0if((!input(row1))&&(!input(col1))) =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=A0 =A0 =A0 =A0 =A0 =A0 =A0 row=3D1; col=3D1; =A0 =A0 =A0 =A0 =A0 =A0 kbd_down =3D true;=A0 =A0 =A0 =A0 =A0 =A0 =A0 key_pressed =3DKEYS[row][col]; =A0 =A0 =A0 =A0 =A0 =A0 system_keypad_send_once =3D 0; =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0if((!input(row2))&&(!input(col1))) =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=A0 =A0 =A0 =A0 =A0 =A0 =A0 row=3D2; col=3D1; =A0 =A0 =A0 =A0 =A0 =A0 kbd_down =3D true;=A0 =A0 =A0 =A0 =A0 =A0 =A0 key_pressed =3DKEYS[row][col]; =A0 =A0 =A0 =A0 =A0 =A0 system_keypad_send_once =3D 0; =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if((!input(row3))&&(!input(col1))) =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=A0 =A0 =A0 =A0 =A0 =A0 =A0 row=3D3; col=3D1; =A0 =A0 =A0 =A0 =A0 =A0 kbd_down =3D true;=A0 =A0 =A0 =A0 =A0 =A0 =A0 key_pressed =3DKEYS[row][col]; =A0 =A0 =A0 =A0 =A0 =A0 system_keypad_send_once =3D 0; =A0 =A0 =A0 =A0 =A0 =A0 =A0 } =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 // col2 =A03,6,9,# =A0 =A0 =A0 =A0 =A0 if((!input(row0))&&(!input(col2))) =A0 =A0 =A0 =A0 =A0 =A0 =A0{=A0 =A0 =A0 =A0 =A0 =A0 =A0 row=3D0; col=3D2; =A0 =A0 =A0 =A0 =A0 =A0 kbd_down =3D true;=A0 =A0 =A0 =A0 =A0 =A0 =A0 key_pressed =3DKEYS[row][col]; =A0 =A0 =A0 =A0 =A0 =A0 system_keypad_send_once =3D 0; =A0 =A0 =A0 =A0 =A0 =A0 =A0 } =A0 =A0 =A0 =A0 =A0 =A0 =A0if((!input(row1))&&(!input(col2))) =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=A0 =A0 =A0 =A0 =A0 =A0 =A0 row=3D1; col=3D2; =A0 =A0 =A0 =A0 =A0 =A0 kbd_down =3D true;=A0 =A0 =A0 =A0 =A0 =A0 =A0 key_pressed =3DKEYS[row][col]; =A0 =A0 =A0 =A0 =A0 =A0 system_keypad_send_once =3D 0; =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=A0 =A0 =A0 =A0 =A0 =A0 =A0if((!input(row2))&&(!input(col2))) =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=A0 =A0 =A0 =A0 =A0 =A0 =A0 row=3D2; col=3D2; =A0 =A0 =A0 =A0 =A0 =A0 kbd_down =3D true;=A0 =A0 =A0 =A0 =A0 =A0 =A0 key_pressed =3DKEYS[row][col]; =A0 =A0 =A0 =A0 =A0 =A0 system_keypad_send_once =3D 0; =A0 =A0 =A0 =A0 =A0 =A0 =A0 }=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if((!input(row3))&&(!input(col2))) =A0 =A0 =A0 =A0 =A0 =A0 =A0 {=A0 =A0 =A0 =A0 =A0 =A0 =A0 row=3D3; col=3D2; =A0 =A0 =A0 =A0 =A0 =A0 kbd_down =3D true;=A0 =A0 =A0 =A0 =A0 =A0 =A0 key_pressed =3DKEYS[row][col]; =A0 =A0 =A0 =A0 =A0 =A0 system_keypad_send_once =3D 0; =A0 =A0 =A0 =A0 =A0 =A0 =A0 } =A0 =A0 =A0 =A0 =A0 =A0 =A0fprintf(ZBEE,"%c", key_pressed); =A0 =A0 =A0// print for= test normally not used =A0 =A0 =A0 =A0 =A0} =A0 =A0 =A0 =A0 =A0else =A0 =A0 =A0 =A0 =A0{ =A0 =A0 =A0 redled_off; =A0 =A0 =A0 =A0 =A0 =A0 =A0kbd_down =3D false; =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 //=A0 =A0 =A0 =A0 =A0 =A0system_keypad_send_once =3D 1;=A0 =A0 =A0 =A0 =A0 =A0} thanks Andre=A0 --=20 http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist .