如果定义 i, j 都是带符号数,即有正负数,你这个循环条件才可以,你可以试一下就知道了。
还有,这是一数LED灯闪烁的程序吧,那主程序也不对的。见下面改后的程序。再有在调延时子程序时所带的实参数要大些,for循环的j变量数也要大些,才能看出来LED闪碧颤烁。
#include <reg51.h>
sbit D1=P0^0
delayms(unsigned int i)
{
unsigned char j
for(i>0i--)
for(j=200j>0j--)
}
void main()
{
while(1)
{
D1=0
delayms(100)
D1=1
delayms(100)
}
}
能用定时器最好用,但有时是没必要搏渗蠢用的,太浪费了,基陪可以考虑用软件延时本人认为单单用anynop是不行的,如果我要延喊烂时1mS那不是要重复写1000次吗?Keil C里面主要靠循环来实现软件延时,如for while,但Keil C很奇妙
写法不同所产生的汇编代码也不一样,所以造成编写的程序时时性差,但也不完全是这样的,要实现精确延时也是有可能的,用while(--i)如:
void delay(int i)
{
while(--i)
}
记住只有这一种写法[while(--i)]精度是两个时钟周期,其它如while(i--)for(i>0i--)精度都不行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)