打印

一个关于外部中断的问题!!大大们,帮一下咯!!!

[复制链接]
1886|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
草原狼10|  楼主 | 2013-4-22 16:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大神,帮小弟看看这份程序咯!中断处理的,无论怎么按键盘,都是没有反应的,只执行程序的while(a==0)那一部分,无法执行while(a==1)的部分!!!而且无论换到哪个按键都没有效果!!!谢谢咯!!!

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp,i,a;
sbit key=P3^0;
void delay(uint z)
{
        uint x,y;       
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void init()
{
        EA=1;
        EX0=1;
        IT0=1;
}
void main()
{
        temp=0xfe;
        P1=temp;
        init();
        while(1)
        {
                if(a==0)
                        {
                                for(i=0;i<8;i++)
                                {
                                        delay(1000);
                                        temp=_crol_(temp,1);
                                        P1=temp;       
                                }
                        }       
                if(a==1)
                        {
                        for(i=0;i<8;i++)
                                {
                                        delay(1000);
                                        temp=_cror_(temp,1);
                                        P1=temp;
                                }
                        }       
        }       
}
void exter0() interrupt 0
{
        if(key==0)
        {
                delay(5);
                if(key==0)
                {
                        while(!key);
                        a++;
                }
                if(a==2)
                        a=0;
        }       
}

相关帖子

沙发
草原狼10|  楼主 | 2013-4-22 16:14 | 只看该作者
是只能执行if(a==0)那一部分!!!

使用特权

评论回复
板凳
781436490| | 2013-4-22 16:31 | 只看该作者
你的中断是外部中断啊。
要有外部中断产生。才会去处理中断里面的函数,
没触发外部中断,你的a值就一直不变啊,。a初值为0,所以只能执行a==0的那部分了

使用特权

评论回复
地板
草原狼10|  楼主 | 2013-4-22 21:21 | 只看该作者
781436490 发表于 2013-4-22 16:31
你的中断是外部中断啊。
要有外部中断产生。才会去处理中断里面的函数,
没触发外部中断,你的a值就一直不 ...

我的key那个是个按键!一个独立按键!按下之后不就是给了一个中断吗?按道理来说应该是会加一的呀!是不?

使用特权

评论回复
5
草原狼10|  楼主 | 2013-4-27 18:49 | 只看该作者
781436490 发表于 2013-4-22 16:31
你的中断是外部中断啊。
要有外部中断产生。才会去处理中断里面的函数,
没触发外部中断,你的a值就一直不 ...

我知道原因啦!是因为我按下键之后,那个循环还是没有退出!所以只会在a==0里面,要等到他循环8次以后才会出来!!!程序已经改好啦!!不过还是谢谢你啊!!!

使用特权

评论回复
6
linbao01| | 2013-4-28 00:45 | 只看该作者
还没学会

使用特权

评论回复
7
yangbo19881118| | 2013-4-29 01:32 | 只看该作者
这样应该也能实现你想要的结果吧!以来中断就反向显示,感觉变量a没必要,多余的吧!
程序我木有编译,不知道有错误没..
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp,i;
sbit key=P3^0;   
void delay(uint z)
{
        uint x,y;        
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void init()
{
        EA=1;
        EX0=1;
        IT0=1;
}
void main()
{
        temp=0xfe;
        P1=temp;
        init();
        while(1)
        {
            for(i=0;i<8;i++)
            {
                 delay(1000);
                 temp=_crol_(temp,1);  
                 P1=temp;                  
            }
                                                                       
        }        
}
void exter0() interrupt 0
{
        if(key==0)
        {
                delay(5);
                if(key==0)
                {
                        while(!key);
                        for(i=0;i<8;i++)
                        {
                              delay(1000);
                              temp=_cror_(temp,1);
                              P1=temp;
                        }
                                                
                }
               
        }        
}

使用特权

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

本版积分规则

3

主题

54

帖子

0

粉丝