4996|15

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请问一下 [复制链接]

我的程序 无法进入中断程序 可能是什么原因?
我是用的下降沿有效啊

最新回复

中断里少用while,以防预料之外的事情发生.  详情 回复 发表于 2010-3-27 16:06
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
还有
我的P1口  为什么从刚开始调试起  就一直是高电平啊?
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
编译器初始化的时候就是高电平的,,,建议楼主检查一下硬件电路
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 cy330206 的回复:
编译器初始化的时候就是高电平的,,,建议楼主检查一下硬件电路


硬件应该没问题的啊。。。
请问下还有什么可能的情况没?
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

5
 
软件:你可能总中断没开启或相应中断没开启。P1口是正常现象。
硬件:查看供电电源电压,晶振是否起振。
有新情况进一步交流,祝顺利~
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 
再补充一点,注意看门狗是否关闭,或者其他高优先级中断反复打断该中断,或者主程序尾部未做死。暂时就这么多吧。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

7
 
一是要开相应中断
二是要开总中断
三是中断向量没错
四是程序没有死在其他中断里

至于P1口,先写0XFF进去看看
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

8
 
我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();
}
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

9
 
main()
{
EA=1; /*CPU开中断*/
EX0=1; /*允许外部中断0中断*/
IT0=1; /*脉冲触发方式(负跳变有效)*/
delay(100);
display();
while(1);
}
你没把程序尾部做成死循环。你试试看~
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

10
 
一般是程序问题.
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 

  1. main()
  2. {
  3. EA=1; /*CPU开中断*/
  4. EX0=1; /*允许外部中断0中断*/
  5. IT0=1; /*脉冲触发方式(负跳变有效)*/
  6. while(1)
  7. {
  8.   delay(100);
  9.   display();
  10. }
  11. }
复制代码

另外,测试按键后,中断点的电平变化是否正常,排除硬件错误!
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
谢谢LS各位的回答

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

#include
#include
#include
#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);
}
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

13
 
解决了进入中断的问题了

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

菜鸟求助。。。
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

14
 
中断程序执行完就会跳出来。

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

回复

62

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 13 楼 skynet000 的回复:
中断程序执行完就会跳出来。

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


我的中断程序里就是一个很简单的4乘3的键盘扫描程序啊   如11L是那个啊   请求帮忙。。。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

16
 
中断里少用while,以防预料之外的事情发生.
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表