找一个单片机汇编语言编写的延时1ms的子程序

找一个单片机汇编语言编写的延时1ms的子程序,第1张

多简单的小程序呀:

TIME1MS:

MOV R6, #2

TIME1:

;延时498uS

MOV R7, #248

DJNZ R7, $ ;R7的为0时,程序向下运行,否则继续减

;

DJNZ R6, TIME1 ;加上此命令后,每个小周期时间为500uS

;运行两周为1MS,再加上最前面的MOV R6那条指令,就是1002MS

RET

此程序实现的是1002MS的定时,当然这当中不算主程序调用此延时程序时现场保护的时间,即压栈和出栈的时间

编码程序的一种变式。

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

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

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

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

单片机的延时程序通过执行指令来达到延时效果,这个时间等于执行的指令需要的时间,而一个指令需要的时间叫做指令周期,这个时间等于若干个机器周期。

扩展资料:

1丶指令周期,是每种运算需要的时间,如加法、逻辑等,是每一步进行这种指令运算需要的时间,是机器周期的整数倍,这种周期不定。

2丶51单片机12M晶振,晶振周期1/12微妙,一个机器周期包含12个晶振周期,所以12M晶振时机器周期=12x(1/12)微妙=1微妙。

3丶1个毫秒延时子程序如下:

void delay1ms(uint ms)

{

uint  i,j;

for(i=0;i<ms;i++)

{

for(j=0;j<110;j++);

}

}

用STC-ISP V6吧,很方便

DELAY50MS:;@12000MHz

PUSH 30H

PUSH 31H

MOV 30H,#98

MOV 31H,#62

NEXT:

DJNZ 31H,NEXT

DJNZ 30H,NEXT

POP 31H

POP 30H

RET

DELAY:MOV R7,#50

DEL1 :MOV R6,#8

DEL2 :DJNZ R6,DEL2

DJNZ R7,DEL1

RET

END

改成这样

以上就是关于找一个单片机汇编语言编写的延时1ms的子程序全部的内容,包括:找一个单片机汇编语言编写的延时1ms的子程序、汇编语言延时程序怎么解释、单片机延时程序的延时时间怎么算的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9789702.html

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

发表评论

登录后才能评论

评论列表(0条)

保存