设单片机的晶振频率为6MHZ编写一段延时程序约延时100ms的子程序

设单片机的晶振频率为6MHZ编写一段延时程序约延时100ms的子程序,第1张

机器周期=12/6MHz=2μs

定时100ms的计数值 =100ms/2μs =50000

设T1工作于方式1(16位计数器)

计数初值 =2^16 -50000=65536=15536=3CB0H

MOV TMOD,#10H T1工作方式1、定时模式

MOV TH1,#3CH 写入计数初值高8位

MOV TL1,#B0H 写入计数初春和值低8位行森模

SETB TR1 启动T1,开档缓始计时

SETB ET1 允许T中断

SETB EACPU开中断

SJMP $等待T1计时溢出中断

DELAY:

MOV R3,#100 2

DLY0:

MOV R2,#249 2*100

DLY1:

DJNZ R2,DLY1 249*2*100

MOV R2,#248 2*100

DLY2:

DJNZ R2,DLY2 248*2*100

DJNZ R3,DLY0 2*100

RET2

以上假设12M晶振,陵嫌滚延时者举共2+(249*2+2+248*2)*100+2=100004微尺余妙=100.004毫秒

设主频12MHz的51单片机,编一个100ms二重循环的延时程序如下,供参考。其它汇编可以类似编程。

SSSS:MOV R0,#99本指令是单罩举周期指令,用时1us

KKKK0:DJNZ R0,KKKKK2us

MOV R1,#1251us

LLLL0:DJNZ R1,LLLLL2us

NOP1us

NOP1us

NOP1us

NOP1us

LLLLL:SJMP LLLL02us

NOP1us

NOP1us

NOP1us

NOP1us

NOP1us

KKKKK:SJMP KKKK02us

NOP1us

NOP1us

NOP1us

NOP1us

NOP1us

RET2us

这段程序延时时间是

1+99*[2+1+125*(2+1+1+1+1+2)+1+1+1+1+1+2]+1+1+1+1+2=100000us=100ms

可以适当调整循环常数99、125以求减小NOP(空 *** 作指令),使程序更加精练。

dshxxf程序坦闷世不错,但延时时间是50301us,计算如让肢下1+100*(1+2*250+3)


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

原文地址:https://54852.com/yw/12492284.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-25
下一篇2025-08-25

发表评论

登录后才能评论

评论列表(0条)

    保存