中易网

单片机精确延时子程序

答案:1  悬赏:10  
解决时间 2021-10-19 06:11
  • 提问者网友:那叫心脏的地方装的都是你
  • 2021-10-18 20:22
单片机精确延时子程序
最佳答案
  • 二级知识专家网友:胯下狙击手
  • 2021-10-18 21:28
500ms延时子程序(参考)
程序:
void delay500ms(void)

{

unsigned char i,j,k;

for(i=15;i>0;i--)

for(j=202;j>0;j--)

for(k=81;k>0;k--);

}

产生的汇编:

C:0x0800 7F0F MOV R7,#0x0F

C:0x0802 7ECA MOV R6,#0xCA

C:0x0804 7D51 MOV R5,#0x51

C:0x0806 DDFE DJNZ R5,C:0806

C:0x0808 DEFA DJNZ R6,C:0804

C:0x080A DFF6 DJNZ R7,C:0802

C:0x080C 22 RET

计算分析:

程序共有三层循环

一层循环n:R5*2 = 81*2 =162us DJNZ 2us

二层循环m:R6*(n+3) = 202*165 =33330us DJNZ 2us + R5赋值 1us = 3us

三层循环: R7*(m+3) = 15*33333 =499995us DJNZ 2us + R6赋值 1us = 3us

循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us

延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms

计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5

资料来源:吴鉴鹰吧
贡献文档:百度文库《吴鉴鹰单片机项目实战精讲》
单片机开发板选择参考:吴鉴鹰单片机开发板(教程详细,技术支持到位)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息