您的位置 首页 资料

51单片机1s延时程序设计

51单片机1s延时程序设计-原理,利用h,i,j,k循环指令消耗掉一定时间来达到延时,为什么利用循环延时的做法,在12M晶振延时1秒中需要h,i,j,k四个变量,且各变量的值是上面代码中那样呢?这要从单片机的周期说起,单片机有指令周期,机器周期,状态周期,时钟周期;

#include

sbit P1_0 = P1^0;

void Delay(); // 下面引用时必定要和这儿的巨细写共同不然会有正告或过错

void Main()

{

while (1) // 开端一向循环

{

P1_0 = 0;

Delay(); // 没有参数也要加 () 不然会有Warning

P1_0 = 1;

Delay();

}

}

void Delay() // 12M晶振1s延时

{

unsigned char h, i, j, k;

for (h = 5; h 》 0; h–)

for (i = 4; i 》 0; i–)

for (j = 116; j 》 0; j–)

for (k = 214; k 》 0; k–); // 最终个要有 ; 号

}

//=======以下非代码==========//

原理,使用h,i,j,k循环指令耗费掉必定时刻来到达延时,为什么使用循环延时的做法,在12M晶振延时1秒中需求h,i,j,k四个变量,且各变量的值是上面代码中那样呢?这要从单片机的周期说起,单片机有指令周期,机器周期,状况周期,时钟周期;

时钟周期:也就晶振的振动周期,以12MHz为例,时钟周期为 1/ 12000000 = 1/12us;

机器周期:1个机器周期=6个状况周期=12个时钟周期=1us;

指令周期:单片机履行一条指令所需求的时刻称为指令周期,指令周期是以机器周期为单位的,不同的指令所需求的机器周期不必定相同(1-4个),单片机履行一条单周期指令需求1us,履行一条双周期指令需求2us,for循环需求8个指令周期;

详细履行for循环耗费的时刻,能够在Keil里经过代码丈量

#include

sbit P1_0 = P1^0;

void Delay();

void Main()

{

while (1)// 开端一向循环

{

P1_0 = 0;

Delay();

P1_0 = 1;

Delay();

}

}

void Delay()

{

unsigned char h;

for (h = 1000; h 》 0; h–); // 此处下断点

}

51单片机1s延时程序设计

循环1000次履行完后的时刻点

51单片机1s延时程序设计

1000次循环耗时 0.00042850s – 0.00019600s = 0.00023250s = 232.5us;1次循环耗时约 0.2us,

1s = 1000000us,1000000us / 0.2us = 500000次,而5 * 4 * 116 * 214 = 496480;由于无符号字符型unsigned char 巨细为1 byte,规模为0~255,所以只能经过循环嵌套,近似的得到一个1s延时。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/345928.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部