单片机延时时间怎样计算

单片机延时时间怎样计算,第1张

如果用循环语句实现的循环,没法计算,但是可以通过软件仿真看到具体时间,但是一般精精确延时是没法用循环语句实现的。

如果想精确延时,一般需要用到定时器,延时时间与晶振有关系,单片机系统一般常选用11.059

2

mhz、12

mhz或6

mhz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1

μs和2

μs,便于精确延时。本程序中假设使用频率为12

mhz的晶振。最长的延时时间可达216=65

536

μs。若定时器工作在方式2,则可实现极短时间的精确延时如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。

C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机 为例,晶振为12MHz即一个机器周期为1us。一. 500ms延时子程序程序: void delay500ms(void){unsigned char i,j,kfor(i=15i>0i--)for(j=202j>0j--)for(k=81k>0k--)}计算分析:程序共有三层循环一层循环n:R5*2 = 81*2 = 162us DJNZ 2us二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5二. 200ms延时子程序程序:void delay200ms(void){unsigned char i,j,kfor(i=5i>0i--)for(j=132j>0j--)for(k=150k>0k--)}三. 10ms延时子程序程序:void delay10ms(void){unsigned char i,j,kfor(i=5i>0i--)for(j=4j>0j--)for(k=248k>0k--)}四. 1s延时子程序程序:void delay1s(void){unsigned char h,i,j,kfor(h=5h>0h--)

(网文)

单片机延时计算方法

用延时函数就可以实现;

首先,设置定时器工作方式,也就是TMOD,在设置TH0/1,TL0/1的初值,也就是定时时间的设置,然后设置中断允许,并开中断就可以;

参考例子如下:

#include<reg51.h>

void main()

{

TMOD=0X01

TH0=0X3C

TL0=0XB0

EA=1

ET0=1

TR0=1

while(1)

}

void timer0() interrupt 1

{

TH0=0X3F

TL0=0XB0

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存