标题:
单片机定时器时间计算
[打印本页]
作者:
1314love
时间:
2022-9-6 10:13
标题:
单片机定时器时间计算
TH0 = (65536-1600)>>8; //63936---
TL0 = (65536-1600);
每100us进入中断,请问这个1600是怎么计算的
作者:
lkc8210
时间:
2022-9-6 11:41
你用的是16Mhz晶振
16Mhz * 0.0001s = 1600
作者:
188610329
时间:
2022-9-6 12:46
16MHz 晶振 1us = 16, 16x100 = 1600
作者:
coody_sz
时间:
2022-9-6 13:23
估计楼主用的是STC的51,定时器0单周期计数,主频为16MHz,则100us就要1600个计数,于是就是65536-1600.我一般用这样的:
#define Fosc 24000000UL
TH0 = (u8)((65536-Fosc/10000)>>8); //定时10000Hz(100us)
TL0 = (u8)(65536-Fosc/10000);
作者:
一事无成
时间:
2022-9-6 13:41
定时器就是数输入时钟周期个数,比如你这个,输入时钟为16MHz,周期即1/16 000 000(s),数1600个时钟即1/10 000(s)=0.1(ms)=100(us)。(有的单片机还可以时钟分频,所以输入时钟不一定是晶振频率)
THx和TLx是定时器高八位和低八位,可看成是两个8位寄存器合成的16位寄存器,由于赋值默认从低位取,所以高八位赋值时要右移8位,把原来高八位移到低八位再赋值给THx,是常见的数据拆分方法。
很基础的东西了,多看看书!
作者:
yzwzfyz
时间:
2022-9-7 10:45
1600是定时器溢出前CLK的数量。
定时器是增量计时器,只会做+1。而它是16位的,即加到65536才溢出。
你要+1600次溢出,就要先给个底数,这个底数就是:65536-1600
1600是你需要的时间,就是1600个CLK需要的时间,沙发给出的是CLK使用系统晶振的时间。如果CLK取自其它时钟源,则要用其它时钟作为时基计算。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1