打印

[已结贴]中断程序不知道错在哪里了。。。

[复制链接]
1566|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
poplaji|  楼主 | 2013-4-27 15:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 poplaji 于 2013-4-27 20:38 编辑

#define KEY1 (1<<1)
#define KEY2 (1<<4)
#define KEY3 (1<<2)
#define KEY4 (1<<0)
#define LED1 (1<<5)
#define LED2 (1<<6)
#define LED3 (1<<7)
#define LED4 (1<<8)
#define EINT0 (1<<0)
#define EINT1 (1<<1)
#define EINT2 (1<<2)
#define EINT4_7 (1<<4)
void init_port(void);
void EINT_init(void);
/*******************************************************
函数原型:void _irq IRQ_KEY(void)
功能描述:输入引脚设置成外部中断输入功能.
********************************************************/
void __irq IRQ_KEY(void)
{
//清除中断标志位
rSRCPND |=EINT0|EINT1|EINT2|EINT4_7;
rINTPND|=EINT0|EINT1|EINT2|EINT4_7;
rEINTPEND=0xffffff;   
//设置中断引脚输入状态
rGPFCON&=(~((3<<0)|(3<<2)|(3<<4)|(3<<8)));                 
//判断按键响应
if(rGPFDAT&KEY1)
  rGPBDAT|=LED1;
else
  rGPBDAT&=~LED1;
if(rGPFDAT&KEY2)
  rGPBDAT|=LED2;
else
  rGPBDAT&=~LED2;
if(rGPFDAT&KEY3)
  rGPBDAT|=LED3;
else
  rGPBDAT&=~LED3;
if(rGPFDAT&KEY4)
  rGPBDAT|=LED4;
else
  rGPBDAT&=~LED4;

//设置中断引脚输入状态
rGPFCON|=((2<<0)|(2<<2)|(2<<4)|(2<<8));     //不是输入状态,是中断状态。。。。。。。。。。

}
void Main(void)
{
init_port();
EINT_init();
while(1);
}
/*****************************************************
函数原型:void EINT_init(void)
功能描述:中断寄存器设置,外部中断,IRQ
   模式.
*****************************************************/
void EINT_init(void)
{
//init_port();
//下降沿儿触发中断
rEXTINT0=rEXTINT0&(~((7<<0)|(7<<4)|(7<<8)|(7<<16)))|((4<<0)|(4<<4)|(4<<8)|(4<<16));  //这个EXTINT寄存器手册上给的真的好坑人。。。这里一定是双边沿触发!!
//中断函数地址设置
pISR_EINT0=(unsigned int)IRQ_KEY;
pISR_EINT1=(unsigned int)IRQ_KEY;
pISR_EINT2=(unsigned int)IRQ_KEY;
pISR_EINT4_7=(unsigned int)IRQ_KEY;//设置中断优先级固定不变
rPRIORITY=0;
//清除中断标志位
rSRCPND|=EINT0|EINT1|EINT2|EINT4_7;
rINTPND|=EINT0|EINT1|EINT2|EINT4_7;
rEINTPEND=0xffffff;   
//设置中断类型IRQ
rINTMOD=0;
//中断使能
rINTMSK&=(~(EINT0|EINT1|EINT2|EINT4_7));
rEINTMASK&=(~(EINT0|EINT1|EINT2|EINT4_7));
}
/*******************************************************
函数原型:void init_port(void)
功能描述:输入引脚设置成外部中断输入功能.
********************************************************/
void init_port(void)
{
rGPBCON=0x00015400;       //LED引脚设置为输出模式
rGPBDAT=0xffffffff;       //LED设置成全灭
rGPFCON&=(~((3<<0)|(3<<2)|(3<<4)|(3<<8)));    //不是输入状态,是中断状态。。。。。。。。。。
rGPFCON|=((2<<0)|(2<<2)|(2<<4)|(2<<8));  
}

不知道出了什么问题  按键中断这个程序不好使。。。   我不用中断来做按键实验是可以的。我的中断引脚是EINT0,EINT1,EINT2,EINT4。

相关帖子

沙发
poplaji|  楼主 | 2013-4-27 16:31 | 只看该作者
检查了下中断寄存器的设置,还是没查出什么。。。。
没有调试工具。:'(

使用特权

评论回复
板凳
poplaji|  楼主 | 2013-4-27 19:56 | 只看该作者
改了一些地方,还是不行。。。。把代码重新编辑了一下。

使用特权

评论回复
地板
poplaji|  楼主 | 2013-4-27 20:18 | 只看该作者
终于搞定了。。。。1.我把中断引脚设置成了输入状态   2.EXTINT寄存器设置错误,没仔细看手册。。。
不过总算没白忙活。:lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

62

帖子

0

粉丝