单片机中unsigned char 和unsigned int的区别,做流水灯实验,延时函数问题

做流水灯的实验
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint m) //延时函数,延时时间约为10ms*m
{
//uint i,j;
uchar i,j;
for(i=0;i<m;i++)
for(j=0;j<1827;j++)
;
}
用uchar的时候,delay(100)延时时间会变的很长很长,一直延时都不结束,这是为什么啊?

unsigned char,8位,最大值255,
unsigned int,16位,最大值65535,
j的最大值只有255,所以永远不会满足j<1827的条件,当然就一直循环不结束了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-13
因为uchar(unsigned char)是8位,最大是256,所以肯定小于1827,所以当你运行时肯定会一直循环
for(j=0;j<1827;j++);
懂了吗?
第2个回答  2012-09-13
因为for(j=0;j<1827;j++)里面j<1827条件永远成立,所以该循环永远不会退出来。所以起码j要用uint类型。
第3个回答  2012-09-13
uchar型的变量i、j的取值范围是0到255,而“for(j=0;j<1827;j++)”语句里你却用j和1827做比较来判断,这个条件一直为真,呵呵!如果你把for(j=0;j<1827;j++)换成for(j=1827;j>0;j--),那j的实际取值是1827对256求余的值,也就是j=35。
希望我的回答对你有帮助!
相似回答