设单片机8051的时钟频率为MHZ,试编写Ms的软件延时程序。

设单片机8051的时钟频率为MHZ,试编写Ms的软件延时程序。,第1张

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

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

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

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

例如:设计一个延时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指令的执行时间。

哈哈 给俺加分吧

Delay: MOVR7,#100 12 MHz 1 uS

L1:MOVR6,#250

DJNZ R6,$ 2 uS * 250 = 500 uS 2 uS

DJNZ R7,L1(500 + 2 + 1) * 100 = 50300 uS

RET 延时为 50.3 mS

很简单的,假设晶振频率为12M Hz ,则每一个机器周期为1us,T0工作于方式1,非门控,16位定时器。汇编程序为如下:

MOV TMOD,00000001B 即MOV TMOD,01H工作于方式11

MOV TH0,3CH

MOV TL0,0B0H 初始值

STEB TR0 T0开始工作

初始值计算: (65536-X)*1us=50ms=50000us

则X=15536 即3CB0H

1个机器周期=6个时钟周期=12个振荡周期

而单片机是以机器周期为时间单位的,所以要为

1*12/12M=1us


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存