单片机50ms延时程序

若晶振频率为12MHZ,程序段如下:DEL:MOVR7,#200DEL1:MOVR6,#123NOPDEL2:DJNZR6,DEL2DJNZR7,DEL1RET计算得延迟... 若晶振频率为12MHZ,程序段如下:
DEL: MOV R7,#200
DEL1:MOV R6,#123
NOP
DEL2:DJNZ R6,DEL2
DJNZ R7,DEL1
RET

计算得延迟时间为50.001ms
问:是否可以通过优化使延时恰好为50ms(可能要叠加几个2us),添加的语句越少越好。
展开
 我来答
匿名用户
推荐于2017-10-02
展开全部

用STC-ISP V6吧,很方便

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

北京康思
2018-09-20 广告
晶振是12M,对于MC-51系统的单片机来说,一个机器周期是1us。 … MOV R0,#10 LOP1: MOV R1,#10 LOP2: MOV R2,#48 DJNZ R2,$ NOP DJNZ R1,LOP2 DJNZ R0,LOP... 点击进入详情页
本回答由北京康思提供
lycdl
高粉答主

2013-04-23 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4957万
展开全部
如果要求计时很准确,最好还是用定时器。你这个程序虽然计算得比较准确了,可是有两点还没有考虑进来,一点是执行CALL指令调子程序的时间,一点是执行RET指令返回的时间,这两条指令各需要8个机器周期,所以,需要从上面的程序是减去16个机器周期的。所以,这种利用循环指令延时的时间是不太准确的,不过,用这种程序延时也是不要求十分精确的,没有必要,要准确就用定时器好了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhxiufan
2013-04-23 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38387
国家科技进步奖

向TA提问 私信TA
展开全部
DEL: MOV R7,#200 ;1
DEL1:MOV R6,#123 ;1*200
NOP ;1*200*123
DEL2:DJNZ R6,DEL2 ;2*200*123
DJNZ R7,DEL1 ;2*200
RET ;2
Total=1+200+200*123+400*123+400+2=74403
所以如果是普通51的话,总延时为74.4ms
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GUEL86
2013-04-23 · TA获得超过5856个赞
知道大有可为答主
回答量:5538
采纳率:86%
帮助的人:2740万
展开全部
用延时程序 是不可能 很精确,只有用定时器中断才能达到最佳的效果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yugaofeng1
2013-04-23
知道答主
回答量:31
采纳率:0%
帮助的人:11.6万
展开全部
还是考虑用定时器吧,程序简单而且精度高。
我现在写程序都必用定时器。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式