// Keyboard
#define KBD1 0x01 /* P3.0 */
#define KBD2 0x02 /* P3.1 */
#define KBD3 0x04 /* P3.2 */
#define KBD4 0x08 /* P3.3 */
#define KBDMSK 0x0f
unsigned char kbd_rq,kbd_dsb //переменные "запрос на обслуживание"
// и "запрет приема запроса до отпускания"
// Timer B0 interrupt service routine
// 50ms cycle time
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{
char isrval,tmp;
isrval=P3IN; tmp=isrval; isrval|=kbd_dsb;
kbd_dsb=~tmp; kbd_rq|=~isrval;
......
}