请问一下

kusheng176 2010-03-23 04:14:08
我的程序 无法进入中断程序 可能是什么原因?
我是用的下降沿有效啊
...全文
118 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋剑波 2010-03-27
  • 打赏
  • 举报
回复
中断里少用while,以防预料之外的事情发生.
kusheng176 2010-03-26
  • 打赏
  • 举报
回复
谢谢LS各位的回答

我现在的程序时这样的(这是一个4乘3的按键程序,我用的是伟福仿真器【89S51】,P1.0--P1.6作为输入口,P1.7接一个LED,想实现的功能就是:通过我做的键盘,当我按下相应的键时,能在我的仿真软件【KeilC】中显示出相应的数字,并且当我按下数字的时候,LED是亮的。但是一直得不到我想要的结果,不知道为什么。。。请问你能帮下忙吗?我现在都快急死了。。。)

#include <reg52.h>
#include <stdio.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
uchar num,temp,flag;
sbit P1_7=P1^7;
sbit P1_4=P1^4;
sbit P3_2=P3^2;

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void Int0() interrupt 0
{
if(flag)
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xbe:num=1;
break;
case 0xde:num=2;
break;
case 0xee:num=3;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}

P1=0xfd;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xbd:num=4;
break;
case 0xdd:num=5;
break;
case 0xed:num=6;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}

P1=0xfb;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xbb:num=7;
break;
case 0xdb:num=8;
break;
case 0xeb:num=9;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}

P1=0xf7;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xd7:num=0;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
flag=0; }
EX0=1;}
}

main()
{
flag=1;
EA=1; /*CPU开中断*/
IT0=1; /*脉冲触发方式(负跳变有效)*/
EX0=1; /*允许外部中断0中断*/
delay(100);
printf("%d",num);
while(1);
}
galle 2010-03-26
  • 打赏
  • 举报
回复

main()
{
EA=1; /*CPU开中断*/
EX0=1; /*允许外部中断0中断*/
IT0=1; /*脉冲触发方式(负跳变有效)*/
while(1)
{
delay(100);
display();
}
}

另外,测试按键后,中断点的电平变化是否正常,排除硬件错误!
kusheng176 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 skynet000 的回复:]
中断程序执行完就会跳出来。

检查一下是不是中断程序里面死循环了。
[/Quote]

我的中断程序里就是一个很简单的4乘3的键盘扫描程序啊 如11L是那个啊 请求帮忙。。。
skynet000 2010-03-26
  • 打赏
  • 举报
回复
中断程序执行完就会跳出来。

检查一下是不是中断程序里面死循环了。
kusheng176 2010-03-26
  • 打赏
  • 举报
回复
解决了进入中断的问题了

现在又来新问题了。。。。:
请问一下,如果不设置定时器,中断会跳出来么?
怎么我的中断进去后,出不来了啊???

菜鸟求助。。。
kusheng176 2010-03-25
  • 打赏
  • 举报
回复
我89S51的P3.2口连接的P1.4、P1.5、P1.6组合的一个与门
P1.0--P1.6接的是一个4乘3的键盘。
按理说我按下一个键 外中断0应该就打开了吧?(主程序如下)

main()
{
EA=1; /*CPU开中断*/
EX0=1; /*允许外部中断0中断*/
IT0=1; /*脉冲触发方式(负跳变有效)*/
delay(100);
display();
}
tcdzyq 2010-03-25
  • 打赏
  • 举报
回复
一般是程序问题.
anchorite27 2010-03-25
  • 打赏
  • 举报
回复
main()
{
EA=1; /*CPU开中断*/
EX0=1; /*允许外部中断0中断*/
IT0=1; /*脉冲触发方式(负跳变有效)*/
delay(100);
display();
while(1);
}
你没把程序尾部做成死循环。你试试看~
dceacho 2010-03-23
  • 打赏
  • 举报
回复
一是要开相应中断
二是要开总中断
三是中断向量没错
四是程序没有死在其他中断里

至于P1口,先写0XFF进去看看
anchorite27 2010-03-23
  • 打赏
  • 举报
回复
再补充一点,注意看门狗是否关闭,或者其他高优先级中断反复打断该中断,或者主程序尾部未做死。暂时就这么多吧。
anchorite27 2010-03-23
  • 打赏
  • 举报
回复
软件:你可能总中断没开启或相应中断没开启。P1口是正常现象。
硬件:查看供电电源电压,晶振是否起振。
有新情况进一步交流,祝顺利~
kusheng176 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cy330206 的回复:]
编译器初始化的时候就是高电平的,,,建议楼主检查一下硬件电路
[/Quote]

硬件应该没问题的啊。。。
请问下还有什么可能的情况没?
cy330206 2010-03-23
  • 打赏
  • 举报
回复
编译器初始化的时候就是高电平的,,,建议楼主检查一下硬件电路
kusheng176 2010-03-23
  • 打赏
  • 举报
回复
还有
我的P1口 为什么从刚开始调试起 就一直是高电平啊?

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧