单片机的延时,延时时间长度是怎么算的最好有一个例子,来说明!

单片机的延时,延时时间长度是怎么算的最好有一个例子,来说明!,第1张

如果单片机晶振为6M,机器周期即为2us=12/fosc

汇编语句对时间的把握精确于C语言,所以参考不同指令的长度,

就可以算出你的延迟时间。

单片机的延时程序:

MOV

R7,#200

LOOP1:MOV

R6,#125

LOOP2:DJNZ

R6,LOOP2

DJNZ

R7,LOOP1

RET

第一句为单周期指令,耗时2us

第二句执行了200次,耗时2200us

第三句为双周期指令,执行了125200次,耗时22125200us

第四句同第三句,耗时22200us

第五句双指令周期

总够耗时2+2200+22125200+22200+22

约为100ms

本程序的耗时计算如下:

1

+

[1

+

(1

+

1

+

2)

249

+

2]

5

+

2

4998

T

如果再算上主程序中的调用指令的2T,总共延时5000T。

如果时钟频率是6MHz,那么正好延时10ms。

原来12mhz的,机器周期是1us,

但是在循环程序,没运行一次空语句需要花2us,

因此原来程序中为

20202482=198400,大约是200000us,即02s

如果变为1mhz后,机器周期是1/12us,没运行一次空语句需要花1/6us,

然后把r3r4r51/6=200000,把r3、r4、r5取整数值就可以

精确计算如下:

DELAY:

MOV R5,#20 ---1T

D1: MOV R6,#20--1T

D2: MOV R7,#248 -1T

DJNZ R7,$ ----2T,(2) 248 = 496

DJNZ R6,D2----2T,(1 + 496 + 2) 20 = 9980

DJNZ R5,D1----2T,(1 + 9980 + 2) 20 = 199660

RET-------2T, 1 + 199660 + 2 = 1996603

总共,耗用199660 T。

时间,关键是要取决于晶振频率。

当晶振频率=12MHz,则有 T = 1us。

计算延时时间应注意以下几点:1、晶振跑多少的,象这里的6M的话,那么它执行的机器周期就是2us,2、看指令执行要多少个机器周期,向DJNZ、RET都要两个机器周期,3、那么,这里总共时间是26(1A)255(0FF)255(0FF)2(机器周期)2us(1个机器周期的时间)=6762600us 若要精确计算的话要加上上面赋值的时间和子程序返回的时间。不过一般只要计算到上面就行了,因为赋值和返回指令的时间很短(相对于整个延时程序来说)希望对你有所帮助

你好:

如果你想直接知道答案,那么我告诉你,12MHz晶振:

void delayms(unsigned int t)

{

unsigned int i,j;

for(i=t;i>0;i--)

for(j=123;j>0;j--);

}

能精确到1ms。

如果是110592MHz晶振,只需把上面的“j=123”改为“j=114”,都是调试过的,没问题。

然后你要想知道是怎么调试的,很简单,打开uv2编程软件,在最上边的工具栏里边有个“Debug”,点击后出现下拉菜单,选择第一个“start/stop Debug Session”,然后在最右边有一个Watch栏,有两个项目,一个是“Register”,一个是“value”,然后在“Register”栏下边的“Sys”里边有个“sec”,你只要单击“Step over”运行程序并观察“sec”的值就能调试出你程序的执行时间了。

注意,一定要先选择晶振频率,不然会默认24MHz。

希望我的回答能帮助到你。

以上就是关于单片机的延时,延时时间长度是怎么算的最好有一个例子,来说明!全部的内容,包括:单片机的延时,延时时间长度是怎么算的最好有一个例子,来说明!、单片机延时程序的计算、求单片机延时0.2S计算方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9331981.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存