单片机delay函数怎么写

1.51单片机C语言中delay函数是怎么定义和使用的定义一个延时xms毫秒的延时函数
void delay(unsigned int xms) // xms代表需要延时的毫秒数
{
unsigned int x,y;
for(x=xms;x》0;x--)
for(y=110;y》0;y--);
}
使用:
void Delay10us(uchar Ms)
{
uchar data i;
for(;Ms》0;Ms--)
for(i=26;i》0;i--);
}
i=[(延时值-1.75)*12/Ms-15]/4
扩展资料
1、在C51中进行精确的延时子程序设计时,尽量不要或少在延时子程序中定义局部变量,所有的延时子程序中变量通过有参函数传递 。
2、在延时子程序设计时,采用do…while,结构做循环体要比for结构做循环体好 。
3、在延时子程序设计时,要进行循环体嵌套时,采用先内循环,再减减比先减减,再内循环要好 。
2.单片机中用写delay函数做延时和用定时器做延时有什么区别利用循环处理的方式实现的延时,并不精确 。
1、当中断发生时,CPU被打断先执行中断服务 。导致执行时间变长 。
2、使用高级语言时,编译的结果受优化等级等多方面因素干扰,难以计算 。
3、在有MMU和Cache的MCU中,指令的执行速度还会受到缓存的影响 。
利用定时器延时:
1、因为定时器累加与CPU无关,即使中断,仍然会保持计数 。不受上述问题影响
2、缺点需要占用定时器资源 。
3、功耗也会高一些
3.51单片机C语言中delay函数是怎么定义和使用的这是一个延时函数()里的unsigned int a是一个形参,为int型变量最 大值为32767;{}里的unsigned int i和()里的一样 只是变量的名称不同,为i;while就是循环语句 如果他后面的()里的量不为零就执行他{}里的内容,一旦为零就跳出该语句 。
for(i=0;i<600;i++);就是把i定为零,如果i在for里小于600就跳到第三步i++(也就是i自增1);然后i=1但他还是小于600,接着就到第三步 。
599次之后i=600,600就不小于600,这时就跳出for 。while后的()如果为零就跳出while 。
4.单片机c语言中delay()函数的头文件是什么delay函数是一个自己定义的延时函数,C语言定义延时函数主要通过无意义指令的执行来达到延时的目,并没有一个软件自带头文件专门有delay这个函数的 。
单片机c语言中delay()的使用:
voidDelay10us(ucharMs)
{
uchardatai;
for(;Ms》0;Ms--)
for(i=26;i》0;i--);
}
i=[(延时值-1.75)*12/Ms-15]/4
扩展资料
把delay(10000)改为100000
voidmain()
{
inti;
charstr[]="?";
intlen=sizeof(str)/sizeof(char);
for(i=0;i<len;i++)
{
if(str[i]!=''&&str[i]!='\0')
{
delay(100000);
}
delay(100000);
printf("%c",str[i]);
}
getch();
}
5.怎么写段单片机延时函数
1、首先分析您的程序,
void delay()
{
int i;
if(1 == TF0)//if(TF0==1),查询定时器溢出标志位
{
TF0=0;
i=10000;//定时溢出时给i赋值1000
TH0=0xDC;TL0=0x00;
i--;//i=999,如果还没有减到0时定时器又溢出,则i永远不会减到0!!!!所以您的这段程序不应该行不通!!
}
while(1)
{
if(i==0)
break ;
}
}
2、建议做法
(1)定义一个全局变量用于作定时计数如unsigned char n;
(2)定时器采用以某一时间基准(10ms)中断方式,每中断一次中断处理程序里n++;
(3)在延时函数中对n进行操作,如延时1s即1000ms则:
void delay_1s()
【单片机delay函数怎么写】{
while(n<100);//如果n<100,即还没有到1s就等待
n=0;如果1s时间到则清零n,退出子程序