2、在延时子程序设计时,采用do…while,结构做循环体要比for结构做循环体好。
3、在延时子程序设计时,要进行循环体嵌套时,采用先内循环,再减减比先减减,再内循环要好。
unsigned char delay(unsigned char i,unsigned char j,unsigned char k)
{
 unsigned char b,c;
 b="j";
 c="k";
 do{
    do{
       do{k--};
       while(k);
       k="c";
       j--;
      };
    while(j);
    j=b;
    i--;
   };
 while(i);
}
这精确延时子程序就被C51编译为有下面的指令组合完成
delay延时子程序如下:
            MOV    R6,05H
            MOV    R4,03H
C0012:        DJNZ    R3, C0012
            MOV    R3,04H
            DJNZ    R5, C0012
            MOV    R5,06H
            DJNZ    R7, C0012
            RET
假设参数变量i的初值为m,参数变量j的初值为n,参数变量k的初值为l,则总延时时间为:l×(n×(m×T+2T)+2T)+3T,其中T为DJNZ 和MOV指令执行的时间。当m=n=l时,精确延时为9T,最短;当m=n=l=256时,精确延时到16908803T,最长。

arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()