延时1us程序12mhz晶振c语言,51单片机 Keil C 延时程序的简单(晶振12MHz,一个机器周期1us.)...

一. 500ms延时子程序

0818b9ca8b590ca3270a3433284dd417.png

void delay500ms(void)

{

unsignedchari,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(k=81;k>0;k--);

}

0818b9ca8b590ca3270a3433284dd417.png

产生的汇编:

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

二. 200ms延时子程序

0818b9ca8b590ca3270a3433284dd417.png

void delay200ms(void)

{

unsignedchari,j,k;for(i

你可能感兴趣的:(延时1us程序12mhz晶振c语言,51单片机 Keil C 延时程序的简单(晶振12MHz,一个机器周期1us.)...)