汇编语言延时程序怎么解释?

汇编语言延时程序怎么解释?,第1张

编码程序的一种变式。

CPU在执行语句的时候也是需要耗时的,只是CPU运行速度太快,我们没办法看清楚,所以如果CPU执行语句越多,所需要的时间就越多,根据这个原理,就可以通过让CPU随便执行语句,起到延时的效果,这被称为“软件延时”,CPU执行一条指令耗时近似1us,就可以通过这种办法加上循环就可以实现延时效果。

程序在不同主频下延时不一样,但这里面一定是个比例关系。打个比方,你的代码是在主频为1GHz下的延时,这个参数你延时是5S。但换到2GHZ下,程序不改动的话,延时是2.5秒。

在汇编代码中获取到当前的主频,那么就可以做成自适应的效果,自动按比例改变延时程序内部的计数量。

若是高级语言,比如VS,就能用GetTickCount()来精确延时5s了。其实只要能读出当前时间的精确值,比如直接读BIOS时间,那么就能实现比较精确的5s延时了。不同的CPU在读精确时间的函数上是一样的。

用定时器T0来完成

那么我令T0的溢出时间为200us

那么T0的初值为56

1(s)=200*250*2(us)

下面是程序

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP CTC0

ORG 100H

MIAN:

MOV SP,#5FH

MOV R7,#250软件计数第一级

MOV R6,#2软件计数第二级

MOV TL0,#56送初值

MOV TH0,#56

ANL TOMD,#0F0HTOMD高4位不变,T1工作方式不

ORL TMOD,#02H定义T0工作方式

SETB ET0

SETB TR0

SJMP $

CTC0:

PUSH PSW保护PSW

DJNZ R7, EXIT软件计数

MOV R7,#250 重装初值,下同

DJNZ R6,EXIT

MOV R6,#2

EXIT:

POP PSW

RETI

延时1s计算方法是将所有指令执行时间相加得出的。比如:

dly1s:

mov

r2,#10

1

dly1:

mov

r3,#200

1*10

dly2:

mov

r4,#248

1*200*10

djnz

r4,$

2*248*200*10

djnz

r3,dly2

2*200*10

djnz

r2,dly1

2*10

ret

2

total=1+10+2000+992000+4000+20+2=998033

如果使用12m晶振,那么延时时间为0.998秒。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存