1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 89c52单片机c语言延时程序计算 脉冲 89C52单片机定时器延时时间的计算与程序解析 -

89c52单片机c语言延时程序计算 脉冲 89C52单片机定时器延时时间的计算与程序解析 -

时间:2022-01-03 23:16:18

相关推荐

89c52单片机c语言延时程序计算 脉冲 89C52单片机定时器延时时间的计算与程序解析 -

STC单片机STC89C52RC定时器延时时间的计算

延时时间要根据晶振频率计算,不同板子可能有所不同。

时钟周期:

1/时钟源,在我现在这块板子上,晶振频率是11.0592M,也就是时钟周期是 1/11059200秒

机器周期:

一般51单片机是12个时钟周期,我的板子也就是 12/11059200秒

单次定时最长时间:

如果是16位的计数器,16位最大值是65535,共可计数65536次。基本的常数一定要记住,还要记住8位最大值是255,共可计数256次,还要记住8位上每位代表的数值。

12 * 65536/11059200 = 0.0711 s,也就是,71 ms内的定时可以单次定时就完成。如果定时时间超过71 ms,就要循环了。

一次定时需要几次机器周期:

计算公式:定时秒数/机器周期

比 如我要定时1秒, 1/(12/11059200)= 921600次,16位计数器最大可计数65536次,921600次早就益出了。我们可以每次定时10 ms,循环100次就可以定时1秒了,1 s缩小100百倍就是10 ms, 也就是每次需要计数9216次。

确实计数器初始值:

定时10 ms时,如果计数器从0开始计数,我们就不知道什么时候到了9216次。所以应该计数了9216次,16位计数器最多计数95536次,然后就溢出,一溢出TCON的TF位就会置1,我们只要经常检测TF位就可以知道什么时候完成10ms的定时了。

计算公式:计数器初始值=最大计数次数 - 需要计数次数

如果定时10 ms,计数器的初始值就是 65536 - 9216

计算计数器的高位和低位:

16位的计数器,也就是两个8位组成,8位的最大计数次数是256。所以:

计数器高位 = 初始值/256

计数器低位 = 初始值%256

STC89C52RC单片机定时器示例代码:

#include 《reg52.h》

//如果你的单片机没用74hc138扩展IO口,下面代码可略

sbit enableG1 = P1^3;

sbit enableG2 = P1^4;

sbit selectC = P1^2;

sbit selectB = P1^1;

sbit selectA = P1^0;

void hc138()

{

enableG1 = 1;

enableG2 = 0;

selectC = 1;

selectB = 1;

selectA = 0;

}

typedef unsigned char uint8;

typedef unsigned int uint16;

/**

1ms需要的机器周期 = 0.001/(12/11059200) = 921.6

要让led灯以7.83hz闪动, 周期是 1000 / 7.83 = 127.713 ms, 也就是每64 ms改变亮灭状态

**/

void main(void)

{

uint16 counter;

hc138();

TMOD = 0X01;

TH0 = (65536 - 922) / 256;

TL0 = (65536 - 922) % 256;

TR0 =1;

while(1)

{

if(TF0 == 1)

{

TF0 = 0;

TH0 = (65536 - 922) / 256;

TL0 = (65536 - 922) % 256;

counter++;

}

if(counter == 64)

{

counter = 0;

P0 = ~P0;

}

}

}

89c52单片机c语言延时程序计算 脉冲 89C52单片机定时器延时时间的计算与程序解析 - STC89C52单片机定时器/计数器详解(含程序和定时器2)...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。