打印

一个非常有意思的问题

[复制链接]
766|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a1043503402|  楼主 | 2016-10-10 17:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我们老师今天遇到个问题也把我难住了,本身是一个非常简单的51程序,就是一个关于外部中断的问题,但是就是在我们写delay函数的时候会遇到一个问题就是当我们进中断的时候最后一次调用这个delay函数的时候中断运行结束竟然没有回到主函数而是过了一分钟才回到主函数,但是我们用变量当做delay函数的判断条件的时候就会好使,现在不知道怎么回事了,请大神来解答。。
#include <reg52.h>
int x,y,i;
char shumaguan[] = {...};//就是数码管那些数
char xiaodeng[] = {...};、、小灯那些十六进制
void delay(void) //这个是不好使的延时
{
      for(x = 0;x > 500;x++)
        for(y = 0;y > 120;y++);
}
void delay1(int z) //这个是好使的延时
{
    for(x = 0;x < z;x++)
     for(y = 0;y < 120;y++);
}
void main()
{
     EA = 1;
    EX0 = 1;

    while(1)
   {
        for(i = 0;i < 10;i++)
        {
             P1 = xiaodeng[i];
             delay();
        }
   }

}

void exti(void) interrupt 0
{
      char j;
      for(j = 0;i < 10;j++)
      {
            P2 = shumaguan[j];
            delay();
      }
}
这样就是用那个不好使的函数就是中断服务程序数码管实现从0-9显示之后应该是流水灯继续流水亮,但是它却并没有,却是等了将近1分钟才恢复,但是用那个好使的延时就会马上恢复,我们试了很多方法,唯独就是在那个延时函数中的判断语句加上了一个变量才会好用,全局和局部变量都没关系,因为都试过了,就是当两个判断条件全是常量的时候就不好用,是变量就会好用,这到底是为什么

相关帖子

沙发
a1043503402|  楼主 | 2016-10-10 18:33 | 只看该作者
对了delay写错了,for中的不是大于500 120 应该是小于

使用特权

评论回复
板凳
xyz549040622| | 2016-10-10 20:01 | 只看该作者
中断中,本来就不应该加延时的。

使用特权

评论回复
地板
baba1| | 2016-10-11 14:31 | 只看该作者
666666666666666

使用特权

评论回复
5
JerryWu75| | 2016-10-13 10:44 | 只看该作者
   for(x = 0;x > 500;x++)
        for(y = 0;y > 120;y++);

这两for循环能正常运行吗?

使用特权

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

本版积分规则

13

主题

42

帖子

0

粉丝