纠结死,到底是为什么啊
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code time[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
uchar timeb,datab,flag,a;
void delayms(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
void start()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
ET1=1;
SCON=0x50;
ES=1;
EA=1;
}
void main()
{
uchar i,b;
start();
b=1;
while(1)
{
for(i=0;i<10;i++)
{
SBUF=time;
while(!TI);
TI=0;
}
while(b); //!! 写入C51中后,程序为什么在这里停不下来啊,如果直接把b换成1就能停下来
delayms(100);
}
}
[qq]469774574[/qq] 本人比较笨 基础也不好 希望 大家能帮帮忙啊 ~~
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code time[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
uchar timeb,datab,flag,a;
void delayms(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
void start()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
ET1=1;
SCON=0x50;
ES=1;
EA=1;
}
void main()
{
uchar i,b;
start();
b=1;
while(1)
{
for(i=0;i<10;i++)
{
SBUF=time;
while(!TI);
TI=0;
}
while(b); //!! 写入C51中后,程序为什么在这里停不下来啊,如果直接把b换成1就能停下来
delayms(100);
}
}
[qq]469774574[/qq] 本人比较笨 基础也不好 希望 大家能帮帮忙啊 ~~
大家看一下啊
坐等大侠啊
语句 "while(b);" 怀疑是被编译器优化掉了。因为编译到这里发现出现“死循环”,被认为是不合理的。如果写成“while(1);”,则编译器认为这确实是编程者的意图 —— 纯猜测。
建议LZ改用设置断点的方法。
这跟编译器也是有关的,一般WHILE(表达式),里面是放表达式,如果你这样写while(b==1)也是可以的,一般直接写变量,可能会是有问题的,一般写表达式保险点
我也是小白,可能是因为while括号里的语句只能是表达式或者常量,不能是变量吧!
不过你可以测试一下!你吧while(b)改成while(--b)看看能不能停下来!如果停下来了,说明不能是常量作为语句的!
在你的程序里while(--b)应该是等效的,因为b每次都赋值为1了
我也是小白,可能是因为while括号里的语句只能是表达式或者常量,不能是变量吧!
不过你可以测试一下!你吧while(b)改成while(--b)看看能不能停下来!如果停下来了,说明不能是常量作为语句的!
在你的程序里while(--b)应该是等效的,因为b每次都赋值为1了
我也是小白,可能是因为while括号里的语句只能是表达式或者常量,不能是变量吧!
不过你可以测试一下!你吧while(b)改成while(--b)看看能不能停下来!如果停下来了,说明不能是常量作为语句的!
在你的程序里while(--b)应该是等效的,因为b每次都赋值为1了
就光一个b也可以认为是表达式