- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
51 单片机精确延时程序大集合
以下程序说是精确延时,实际上都不对。调用一次差个几微秒、几百微秒,一
天下来差好几分钟。加我的 QQ群有精确版本哦,不同频率的晶振都适用。群:2008-04-24 12:10:26,
在论坛上看到不少不错的延时程序,整理如下共同分享:
精确延时计算公式:
延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+5
;延时 5秒左右
DELAY5S:PUSH 04H;2个机器周期
PUSH 05H;2个机器周期
PUSH 06H;2个机器周期
MOV R4,#50;1个机器周期
DELAY5S_0:MOV R5,#200;1个机器周期
DELAY5S_1:MOV R6,#245;1个机器周期
DJNZ R6,$;2×245=490个机器周期
DJNZ R5,DELAY5S_1;这条 2个机器周期,这层循环包含 R5×(490+1)
+2×R5=98600个机器周期
DJNZ R4,DELAY5S_0;这条 2个机器周期 ,这层循环包含 R4×(98600+1)
+2×R4=4930150个机器周期
POP 06H;2个机器周期
POP 05H;2个机器周期
POP 04H;2个机器周期 RET;2个机器周期
;(共 2+2+2+1+4930150+2+2+2+2=4930165个机器周期 )
;513微秒延时程序
DELAY: MOV R2,#0FEH;1个机器周期
JUZINAIYOU: DJNZ R2,JUZINAIYOU;2×R21即 2×245
RET;2个机器周期
;(实际上是 493个机器周期)
;10毫秒延时程序
DL10MS: MOV R3,#14H DL10MS1:LCALL DELAY
DJNZ R3,DL10MS1
RET
;(缺 DELAY)
;0.1s延时程序 12MHz
DELAY: MOV R6,#250 DL1: MOV R7,#200
DL2: DJNZ R6,DL2
DJNZ R7,DL1
RET
;延时 1046549微秒(12MHz)
;具体的计算公式是:
;((((r7*2+1)+2)*r6+1)+2)*r5+1+4 = ((r7*2+3)*r6+3)*r5+5
DEL : MOV R5,#08H
DEL1: MOV R6,#0FFH
DEL2: MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,DEL2
DJNZ R5,DEL1
RET
;1秒延时子程序是以 12MHz晶振
Delay1S:mov r1,#50
del0: mov r2,#91
del1: mov r3,#100 djnz r3,$ djnz r2,del1
djnz r1,del0
Ret
;1秒延时子程序是以 12MHz晶振为例算指令周期耗时
KK: MOV R5,#10 ;1指令周期×1
K1: MOV R6,#0FFH ;1指令周期×10
K2: MOV R7,#80H ;1指令周期 256×10=2560
K3: NOP ;1指令周期
;128*256*10=327680
DJNZ R7,K3 ;2指令周期
2*128*256*10=655360
DJNZ R6,K2 ;2指令周期
2*256*10=5120
DJNZ R5,K1 ;2指令周期 2*10=20
RET;2指令周期
;21+10+2560+327680+655360+5120+20+2=990753
;约等于 1秒=1000000微秒
;这个算下来也只有 0.998抄
T_0: MOV R7,#10;
D1: MOV R6,#200;
D2: MOV R5,#248;
DJNZ R5,$
DJNZ R6,D2;
DJNZ R7,D1;
RET
;这样算下来应该是 1.000011秒
T_0: MOV R7,#10; D1: MOV R6,#200;
D2: NOP
MOV R5,#248;
DJNZ R5,$ DJNZ R6,D2;
DJNZ R7,D1;
RET
DELAY_2S: ;10MS(11.0592mhz)
MOV R3,#200
JMP DELAY10MS
DELAY_100MS: ;100MS(11.0592mhz)
MOV R3,#10
JMP DELAY10MS
DELAY_10MS:
MOV R3,#1
DELAY10MS: ;去抖动 10MS
(11.0592mhz)
MOV R4,#20 DELAY10MSA:
MOV R5,#247
DJNZ R5,$
DJNZ R4,DELAY10MSA
DJNZ R3,DELAY10MS
RET
DELAY_500MS: ;500MS
MOV R2,#208
JMP DELAY_MS
DELAY_175MS
原创力文档


文档评论(0)