单片机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),添加的语句越少越好。 展开
DEL: MOV R7,#200
DEL1:MOV R6,#123
NOP
DEL2:DJNZ R6,DEL2
DJNZ R7,DEL1
RET
计算得延迟时间为50.001ms
问:是否可以通过优化使延时恰好为50ms(可能要叠加几个2us),添加的语句越少越好。 展开
5个回答
北京康思
2018-09-20 广告
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...
点击进入详情页
本回答由北京康思提供
展开全部
如果要求计时很准确,最好还是用定时器。你这个程序虽然计算得比较准确了,可是有两点还没有考虑进来,一点是执行CALL指令调子程序的时间,一点是执行RET指令返回的时间,这两条指令各需要8个机器周期,所以,需要从上面的程序是减去16个机器周期的。所以,这种利用循环指令延时的时间是不太准确的,不过,用这种程序延时也是不要求十分精确的,没有必要,要准确就用定时器好了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用延时程序 是不可能 很精确,只有用定时器中断才能达到最佳的效果。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
还是考虑用定时器吧,程序简单而且精度高。
我现在写程序都必用定时器。
我现在写程序都必用定时器。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询