怎样用单片机的汇编语言编写一个50ms的延时程序。(晶振频率为12MHz)ps51单片机

书上给出的是DEL:MOVR7,#200DEL1:MOVR6,#125DEL2:DJNZR6,DEL2DJNZR7,DEL1RET总延时为1μs+(1+250+2)μs*... 书上给出的是
DEL: MOV R7,#200
DEL1: MOV R6,#125
DEL2: DJNZ R6,DEL2
DJNZ R7,DEL1
RET
总延时为1μs+(1+250+2)μs*200+2μs=50.603ms
求大神给出一个精确的编程,使之得到一个准确的50ms的延时。
展开
 我来答
ghost4063
2013-10-27 · TA获得超过6528个赞
知道大有可为答主
回答量:2940
采纳率:75%
帮助的人:2834万
展开全部
DEL: MOV R7,#210
DEL1: MOV R6,#117
DEL2: DJNZ R6,DEL2
NOP
DJNZ R7,DEL1
NOP ;此处17个NOP
NOP
....
NOP

RET
1μs+(1+234+1+2)μs*210+2μs+17=50000μs
其实考虑到LCALL调用这个函数的时间,末尾应该再减少2个NOP。
另外,实际使用中需要精确延时的话应该使用定时器中断,一方面是精确,另一方面延时函数执行时,如果有中断发生,那么延时就不正确了。
追问
神,请告诉我用计数器怎么编吧。
百度网友283d78e
2013-10-27 · 知道合伙人IT服务行家
百度网友283d78e
知道合伙人IT服务行家
采纳数:1491 获赞数:2984

向TA提问 私信TA
展开全部
DELAY50MS:
MOV R6,#0ADH
DL0:
MOV R5,#8FH
DJNZ R5,$
DJNZ R6,DL0
RET
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ywhjp
2013-10-27 · TA获得超过1299个赞
知道小有建树答主
回答量:1002
采纳率:60%
帮助的人:448万
展开全部
DELAY50MS: ;@12.000MHz
PUSH 30H
PUSH 31H
MOV 30H,#98
MOV 31H,#62
NEXT:
DJNZ 31H,NEXT
DJNZ 30H,NEXT
POP 31H
POP 30H
RET
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式