C51单片机延时程序,需要不精确延时2小时,请问大神怎么写延时代码,谢谢!

C51单片机延时程序,需要不精确延时2小时,请问大神怎么写延时代码,谢谢!,第1张

可以有很多办法,一是调整参数,使其延时5分钟或6分钟,循环24次或20次。二是将延时函数的形参改为长整型(32位)延时时间扩大65536倍。三是使用定时器,每次定时50mS,累计144000次,便是2小时,使用定时器(中断)的好处是在延时期间还可以干许多事情,例如显示剩余时间,检测设备工作状态或者调整延时时间等,而你的纯软件延时期间想干其它事情比较困难。

我以2ms为例说明一下:

单片机的晶振周期为12hz,则执行一条代码为一个机器周期,为1微妙(ua),所以2ms=10*200(ua),

对r2赋值200(4位二进制数最大值为256,所以只能取到200)即#c8h。再对r2循环20次就实现了2ms延时。至于100ms、

200ms、

1s等等方法类似,只是调整相应的初值。多设置几次循环就行。

程序代码如下:

delay:

mov

r1,#0ah

;赋值r1为10次

delay1:

mov

r2,#c8h

;赋值r2为200次

delay2:

djnz

r2,$

;r2自减到0,不到0继续等待

djnz

r1,delay1

;r2减到0后r1自减1,重新给r2赋初值后继续循环,直到r1到0为止,延时结束

ret

我来给你做个详细讲解啊:

void delay(unsigned int t){ while(--t)}

Int main(void)

{

While(1)

{

P0 = 0X00

Delay(100) //给带形参延时子函数t赋值100;

}

}

void delay(unsigned int t){ while(--t) // while判断t为真程序会一直停留在这里判断,t先减一在判断直到t=0为假程序跳出while判断,单片机在这段时间里在空循环,这样就造成单片机延时,这是一个很常用的单片机软件延时。}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7974997.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存