|  | 
 
| #include "2410addr.h" 
 #define LED1  (1<<5)                // rGPB[5] =1 ;
 #define LED2  (1<<6)                // rGPB[6] =1 ;
 #define LED3  (1<<7)                // rGPB[7] =1 ;
 #define LED4  (1<<8)                // rGPB[8] =1 ;
 
 #define KEY1  (1<<1)                // rGPF[1] =1 ;
 #define KEY2  (1<<4)                // rGPF[4] =1 ;
 #define KEY3  (1<<2)                // rGPF[2] =1 ;
 #define KEY4  (1<<0)                // rGPF[0] =1 ;
 
 /*******************************************************************************************
 函数原形:void __irq IRQ_KEY(void)
 功能描述:键盘中断处理程序,当产生键盘中断后将读取键值,重新刷新LED显示
 参    数:无
 *******************************************************************************************/
 void __irq IRQ_KEY(void)
 {
 ClearPending(BIT_EINT4_7);
 rEINTPEND = 0xffffff;
 
 rGPFUP = 0xf800;                                        //  KEY [7:0] => PU En
 rGPFCON=0xfcc0;                                    //KEY[7:0] => INPUT;
 
 if ( !(rGPFDAT & KEY1) )
 rGPBDAT=rGPBDAT & ~LED1;
 
 if ( !(rGPFDAT & KEY2) )
 rGPBDAT=rGPBDAT & ~LED2;
 
 if ( !(rGPFDAT & KEY3) )
 rGPBDAT=rGPBDAT & ~LED3;
 
 if ( !(rGPFDAT & KEY4) )
 rGPBDAT=rGPBDAT & ~LED4;
 
 rGPFCON=0xfcc0;
 }
 
 /*******************************************************************************************
 函数原形:void __irq IRQ_KEY(void)
 功能描述:键盘中断初始化,将按键输入管脚设置成外部中断输入功能,双边沿触发,IRQ中断模式
 参    数:无
 *******************************************************************************************/
 void EINT_Init(void)
 {
 //rGPFCON |= ((1 << 1) | (1 << 3) | (1 << 5) | (1 << 9));
 rGPFCON = rGPFCON & (~((3<<4)|(3<<0)|(3<<8)|(3<<2))) | ((2<<4)|(2<<0)|(2<<8)|(2<<2)) ;                //GPF4,2,1,0 set EINT
 //rGPFCON[9:8],[5:4],[3:2],[1:0]=10b,即GPF[4,2,1,0]为外部中断输入功能
 
 rEXTINT0 &= ~(7|(7<<4)|(7<<8)|(7<<16));
 rEXTINT0 |= (0|(0<<4)|(0<<8)|(0<<16));                //set eint0,1,2,4 falling edge int
 
 //pISR_EINT8_23 = (unsigned int)IRQ_KEY;
 rPRIORITY = 0x00000000;            // 使用默认的固定的优先级
 //ClearPending(BIT_EINT8_23); // 清除中断标志位
 rEINTPEND = 0xffffff;
 //rINTMOD = 0x00000000;            // 所有中断均为IRQ中断
 //rINTMSK &= (~BIT_EINT8_23); // 使能外部中断8_23
 //rEINTMASK &= (~((1 << 0) | (1 << 1) | (1 << 2) | (1 << 4)));//使用能EINT0,EINT1,EINT2,EINT4
 rEINTPEND |= (1<<4);                                                        //clear eint 4
 rEINTMASK &= ~(1<<4);                                                //enable eint 4
 ClearPending(BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT4_7);
 pISR_EINT0 = pISR_EINT1 = pISR_EINT2 = pISR_EINT4_7 = (unsigned int)IRQ_KEY;
 EnableIrq(BIT_EINT0|BIT_EINT1|BIT_EINT2|BIT_EINT4_7);
 }
 
 void Main(void){
 rGPBCON = 0x015550;
 rGPBUP  = 0x7ff;
 
 rGPBDAT = 0xfff;
 
 rGPFCON = 0x55aa;
 rGPFUP  = 0xff;
 
 rINTMOD=0x0;          // All=IRQ mode
 rINTMSK=BIT_ALLMSK;          // All interrupt is masked.
 
 EINT_Init();
 while (1);
 }
 | 
 |