我们老师今天遇到个问题也把我难住了,本身是一个非常简单的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分钟才恢复,但是用那个好使的延时就会马上恢复,我们试了很多方法,唯独就是在那个延时函数中的判断语句加上了一个变量才会好用,全局和局部变量都没关系,因为都试过了,就是当两个判断条件全是常量的时候就不好用,是变量就会好用,这到底是为什么 |