新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 关于51精确延时及keil仿真延时时间

关于51精确延时及keil仿真延时时间

作者:时间:2013-08-02来源:网络收藏

只要在程序设计循环语句时注意以上几个问题。

下面给出有关在C中延时子程序设计时要注意的问题

1、在C中进行精确的延时子程序设计时,尽量不要或少在延时子程序中定义局部变量,所有的延时子程序中变量通过有参函数传递。

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);

}

子程序就被C编译为有下面的指令组合完成

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,最长。

以上参考http://wenku.baidu.com/view/e79d80c40c22590102029da1.html

三、下面介绍一下如何用

测试函数:

void TempDelay (unsigned char idata us)

{

while(us--);

}

测试用例:

TempDelay(80); //530uS

TempDelay(14); //100uS

NOP; //1.085uS

操作:

1、打开调试

1.jpg

2、起始时间为0.00059136s

2.jpg

3、执行了TempDelay(80)后时间为0.00112413s,用时0.00053277s=532.77uS

3.jpg



评论


相关推荐

技术专区

关闭