论坛风格切换切换到宽版
  • 2056阅读
  • 3回复

请问这个变量为什么不能运行到0? [复制链接]

上一主题 下一主题
离线BG4ABM
 
发帖
1139
只看楼主 倒序阅读 0楼 发表于: 2006-11-03
这段c程序可以通过编译,说明语法上没问题,但是在用keil做单步运行并观察有关变量时,发现:当程序进入mdelay函数后,每当delay到了936后(大约要运行十几分钟,我是用一样东西压在f11键上的),就会跳出mdelay函数,而且跳出后也不是跳到for下面的一句语句,而是跳出for循环体,跳到了程序的开始处,即unsigned char counter=0这一句,而且还发现这个现象:只要把中断屏蔽掉,delay就能一直减到0。请问这是为什么?
#include "reg51.h"
void timer0() interrupt 1
{ unsigned      char tmp;
            tmp++;
}
void mdelay(unsigned int delay)      //延时程序
{      unsigned int i;
     for(;delay>0;delay--)
     {      for(i=0;i<124;i++)
           {;}
     }
}
void main()
{      unsigned char counter=0;
     tmod=0x01;
     th0=(65536-3000)/256;
     tl0=(65536-3000)%256;      //定时时间为3000个周期
     tr0=1;                                    
     ea=1;                                    
     et0=1;                                    
     for(;;)
     {      counter++;                        
           mdelay(1000);
     }
}
离线BG4ABM
发帖
1139
只看该作者 1楼 发表于: 2006-11-03
上面有表情符号的那个地方应该是for后面的括号中有2个分号

请高手帮我看一看吧,我是百思不的其解啊!非常苦闷!
离线by6dx
发帖
534
只看该作者 2楼 发表于: 2006-11-03
在我的keil里你的代码运行正常。换个新版本的吧
离线BG4ABM
发帖
1139
只看该作者 3楼 发表于: 2006-11-03
我找到原因了,是设置时 cpu选错了