求助单片机软件延时10ms的程序和计算方法(急)

求助单片机软件延时10ms的程序和计算方法(急),第1张

程序如弯如下.

ORG 0000H

SJMP START

ORG 0030H

START:

MOV TMOD, #01H T0定时方式1

MOV TH0, #0D8H 10ms@12MHz

MOV TL0, #0F0H 65536-10000=D8F0H

SETB TR0 启动.

WAIT: 下面使用查询方式.

JNB TF0, WAIT 没有溢出就循环等待.

MOV TH0, #0D8H 到了10ms,重新写入初始值.

MOV TL0, #0F0H 65536-10000=D8F0H

CLR TF0

-----------------------------------------------

在败罩这里编写 每到10ms 应该执行的埋枯启指令.

CPL P1.0可以使外接的LED闪光.

-----------------------------------------------

SJMP WAIT继续查询.

END

软件延时段启程序就是利用执行每一条指令时所用的时间来进行延时的。

一般采用循环结构,达到多次反复执行某一段指令的目的,来增加延时的时间,可以通过对循环次数的控制,来达到控制延时时间长短的目的。

为了延长延时时间握启如,一般要采用多重循环,即由外循环内部又含有内循环。

延时时间=(内循环时间)×外循环次数。

例如:设计一个延时1ms的延时子程序ys1ms,设单片机8051的时钟频率为12MHZ。

则单片旁敏机8051一个机器周期=12T=12/f=12/12MHZ=1微秒

程序和延时时间计算如下:

ys1ms:MOV R7,#4 单周期1uS ( 晶振为12MHz)

DEL1: MOV R6,#123 单周期1uS

DEL2: DJNZ R6,DEL2 双周期2uS*123=246uS

DJNZ R7,DEL1 双周期(2us+246+1)*4=996uS

NOP 单周期1uS

RET 双周期2uS

延时时间t=1uS +(1us+246uS+2uS)×4+1uS+2uS=1000uS=1ms

其中(1us+246uS+2uS)=249uS 为内循环时间 4为外循环次数

第一个1uS 是第一条指令的执行时间

1uS+2uS 是 最后二条指令 NOP RET指令的执行时间。

哈哈 给俺加分吧

优点:简单,很容易就能写出软件延时搏辩尘程序

缺点:延时时间不容易计算,C语言写的延时程序不能直接计算出延时时间,要看了反灶亏汇编代码才能计算出延时时间

因此,精密的延时最好是用定时器;或者用混合编译,C语言调用汇编延时函数;还可参考下面这个程序,基禅我用C语言写的,精度也很高


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存