为什么按下P3^2按键 不会进入中断

[复制链接]
4051|19
 楼主| meimiao88 发表于 2013-11-28 22:22 | 显示全部楼层 |阅读模式
#include<reg52.h>
unsigned  char   a;
sbit  s2=P3^4;
void  delay()
{unsigned   int  j=500000;
while(j--);




}
void  main()
{
   s2=0;
   EA=1;
   EX0=1;
   IT0=0;
   a=0xf0;
  while(1)
   {
     P1=a;


   }





}

void  ext0() interrupt 0
{

//if(s2==0)
{
a=0xfe;


//delay();
//a=0xff;
//delay();

}
//EX0=0;


}
迷途小羔羊 发表于 2013-11-28 22:48 | 显示全部楼层
中断里 那个a变量赋值应该用指针吧, 函数间 的变量用 指针来传递 。
大前门 发表于 2013-11-28 22:50 | 显示全部楼层
多年没碰过51了,请问现在51的int不是16-bit了吗?
W_Controller 发表于 2013-11-29 08:59 | 显示全部楼层
编译器优化了。楼主把unsigned  char   a改成volatile unsigned char a试试。
另外提醒楼主,局部变量超出范围了。。。
qmh524 发表于 2013-11-29 08:59 | 显示全部楼层
电路是怎么样的,另外你这个设置的是低电平触发,看看低电平保持的时间够不够
zoudejile 发表于 2013-11-29 09:02 | 显示全部楼层
楼主,你这个程序可以进入中断了,只是你的P1端口,经过一次中断后,a一直0xfe不会再变化
gx_huang 发表于 2013-11-29 09:22 | 显示全部楼层
看见:
unsigned   int  j=500000;
就笑了,uint 16bit会这么大吗?
leesff 发表于 2013-11-29 16:36 | 显示全部楼层
这也能有问题?无非开中断,进入中断,退出中断而已嘛。用汇编还会想个中断保护的。关于变量范围,这种小错误就别犯了!
 楼主| meimiao88 发表于 2013-11-29 19:14 | 显示全部楼层
大前门 发表于 2013-11-28 22:50
多年没碰过51了,请问现在51的int不是16-bit了吗?

是的
 楼主| meimiao88 发表于 2013-11-29 19:15 | 显示全部楼层
leesff 发表于 2013-11-29 16:36
这也能有问题?无非开中断,进入中断,退出中断而已嘛。用汇编还会想个中断保护的。关于变量范围,这种小错 ...

刚接触  没办法  以后一定改进
 楼主| meimiao88 发表于 2013-11-29 19:23 | 显示全部楼层
W_Controller 发表于 2013-11-29 08:59
编译器优化了。楼主把unsigned  char   a改成volatile unsigned char a试试。
另外提醒楼主,局部变量超出 ...

我改了   没有按下按键  就跳到了中断程序   
 楼主| meimiao88 发表于 2013-11-29 19:24 | 显示全部楼层
德意志精神 发表于 2013-11-29 10:35
unsigned   int  最大6500左右吧

那个  在我调试的时候 随意改动的   而且不是被我屏蔽了吗
 楼主| meimiao88 发表于 2013-11-29 19:27 | 显示全部楼层
zoudejile 发表于 2013-11-29 09:02
楼主,你这个程序可以进入中断了,只是你的P1端口,经过一次中断后,a一直0xfe不会再变化 ...

是的    我就是这种情况  我想得到的是按下按键进入中断   松开的时候就跳出了
这需要如何改进呢??
W_Controller 发表于 2013-11-29 19:48 | 显示全部楼层
meimiao88 发表于 2013-11-29 19:23
我改了   没有按下按键  就跳到了中断程序

这个应该是硬件问题,仔细检查你的电路。同时也建议楼主把中断触发方式设置为边沿触发(IT0  = 1;)
 楼主| meimiao88 发表于 2013-11-29 20:17 | 显示全部楼层
W_Controller 发表于 2013-11-29 19:48
这个应该是硬件问题,仔细检查你的电路。同时也建议楼主把中断触发方式设置为边沿触发(IT0  = 1;) ...

这个我之前也有试过   刚刚再改了   情况还是相同的
lidreamer 发表于 2013-11-30 12:42 | 显示全部楼层
你的帖子我本来不想发表任何言论的,一眼看上去问题一大堆!!!
unsigned   int  j=500000;你的c语言这是什么水平啊。
另外进入中断你赋一次值然后再while(1)中执行,之后值就一直没发生改变。

提个建议,c51方面的书多看一些,另外在中断里面设置一个标志位,然后再while中延时,并清除标志位,延时是为了发生的现象肉眼可以看到
zoudejile 发表于 2013-12-1 11:17 | 显示全部楼层
meimiao88 发表于 2013-11-29 19:27
是的    我就是这种情况  我想得到的是按下按键进入中断   松开的时候就跳出了
这需要如何改进呢?? ...

void  ext0() interrupt 0
{

//if(s2==0)
{
a=0xfe;


//delay();
//a=0xff;
//delay();

}
IT0=0;
}
zoudejile 发表于 2013-12-1 11:17 | 显示全部楼层
本帖最后由 zoudejile 于 2013-12-1 11:23 编辑
meimiao88 发表于 2013-11-29 19:27
是的    我就是这种情况  我想得到的是按下按键进入中断   松开的时候就跳出了
这需要如何改进呢?? ...

void  ext0() interrupt 0
{
  IT0=0;
  if(a==0xFE)a=0x01;
  else a=0xFE;
}
这样就是按下一次灯就会闪动
 楼主| meimiao88 发表于 2013-12-1 20:50 | 显示全部楼层
zoudejile 发表于 2013-12-1 11:17
void  ext0() interrupt 0
{
  IT0=0;

这样是可以实现   但还是跳不出中断   还是要谢谢你  算了  结贴吧
zoudejile 发表于 2013-12-1 22:19 | 显示全部楼层
meimiao88 发表于 2013-12-1 20:50
这样是可以实现   但还是跳不出中断   还是要谢谢你  算了  结贴吧

跳不出中断?你详细描述是什么现象啊?或者你把程序发我,你要什么效果我帮你调试下zoudejile@126.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

19

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部