家园
个人
文集
http://
www
.
5x54
.
com
51单片机12M和11.0592M晶振定时器初值TL0和TH0的3CB0计算
作者:
网上收集
点击:
读取中...
次
at89s52
(%$$784#^67)心情家园www.bbsdiy.net
,晶振频率12m
(%$$784#^67)心情家园www.bbsdiy.net
其程序如下:
(%$$784#^67)心情家园www.bbsdiy.net
引用代码:
#include<stdio.h>
(%$$784#^67)心情家园www.bbsdiy.net
#include<reg51.h>
(%$$784#^67)心情家园www.bbsdiy.net
(%$$784#^67)心情家园www.bbsdiy.net
void timer0_init()
(%$$784#^67)心情家园www.bbsdiy.net
{
(%$$784#^67)心情家园www.bbsdiy.net
TMOD=0x01;//方式1
(%$$784#^67)心情家园www.bbsdiy.net
TL0=0xb0;
(%$$784#^67)心情家园www.bbsdiy.net
TH0=0x3c;
(%$$784#^67)心情家园www.bbsdiy.net
TR0=1;
(%$$784#^67)心情家园www.bbsdiy.net
ET0=1;
(%$$784#^67)心情家园www.bbsdiy.net
}
(%$$784#^67)心情家园www.bbsdiy.net
(%$$784#^67)心情家园www.bbsdiy.net
void timer0_ISR(void) interrupt 1
(%$$784#^67)心情家园www.bbsdiy.net
{
(%$$784#^67)心情家园www.bbsdiy.net
TL0=0xb0;
(%$$784#^67)心情家园www.bbsdiy.net
TH0=0x3c;//50ms中断一次
(%$$784#^67)心情家园www.bbsdiy.net
single++;
(%$$784#^67)心情家园www.bbsdiy.net
if(single==20)
(%$$784#^67)心情家园www.bbsdiy.net
{ kk++;
(%$$784#^67)心情家园www.bbsdiy.net
single=0;
(%$$784#^67)心情家园www.bbsdiy.net
}
(%$$784#^67)心情家园www.bbsdiy.net
}
(%$$784#^67)心情家园www.bbsdiy.net
void main()
(%$$784#^67)心情家园www.bbsdiy.net
{
(%$$784#^67)心情家园www.bbsdiy.net
int kk=0;//计数器
(%$$784#^67)心情家园www.bbsdiy.net
int single=0;
(%$$784#^67)心情家园www.bbsdiy.net
timer0_init();
(%$$784#^67)心情家园www.bbsdiy.net
(%$$784#^67)心情家园www.bbsdiy.net
}
(%$$784#^67)心情家园www.bbsdiy.net
(%$$784#^67)心情家园www.bbsdiy.net
TL0=0xb0;
(%$$784#^67)心情家园www.bbsdiy.net
TH0=0x3c;
(%$$784#^67)心情家园www.bbsdiy.net
这两个是怎么算出来得
(%$$784#^67)心情家园www.bbsdiy.net
如果晶振不是12Mhz
(%$$784#^67)心情家园www.bbsdiy.net
是11.0592 MHz
(%$$784#^67)心情家园www.bbsdiy.net
怎么算
(%$$784#^67)心情家园www.bbsdiy.net
(%$$784#^67)心情家园www.bbsdiy.net
12M的晶振每秒可产生1M个机器周期
(%$$784#^67)心情家园www.bbsdiy.net
,50ms就需要50000个机器周期
(%$$784#^67)心情家园www.bbsdiy.net
,定时器在方式1工作
(%$$784#^67)心情家园www.bbsdiy.net
,是16位计数器
(%$$784#^67)心情家园www.bbsdiy.net
,最大值为65536
(%$$784#^67)心情家园www.bbsdiy.net
,所以需设置初值15536
(%$$784#^67)心情家园www.bbsdiy.net
,即3CB0H(10进制15536转换成16进制数3CB0)
(%$$784#^67)心情家园www.bbsdiy.net
,所以TH0=0x3c
(%$$784#^67)心情家园www.bbsdiy.net
,TL0=0xb0。
(%$$784#^67)心情家园www.bbsdiy.net
(65536-50000周期=初值15536)
(%$$784#^67)心情家园www.bbsdiy.net
高位就是TH0的值
(%$$784#^67)心情家园www.bbsdiy.net
,低位为TL0的值
(%$$784#^67)心情家园www.bbsdiy.net
11.0592M的晶振每秒可产生0.9216M个机器周期
(%$$784#^67)心情家园www.bbsdiy.net
,50ms就需要46080个机器周期
(%$$784#^67)心情家园www.bbsdiy.net
,定时器在方式1工作
(%$$784#^67)心情家园www.bbsdiy.net
,是16位计数器
(%$$784#^67)心情家园www.bbsdiy.net
,最大值为65536
(%$$784#^67)心情家园www.bbsdiy.net
,所以需设置初值19456
(%$$784#^67)心情家园www.bbsdiy.net
,即4C00H
(%$$784#^67)心情家园www.bbsdiy.net
,所以TH0=0x4c
(%$$784#^67)心情家园www.bbsdiy.net
,TL0=0x00。
(%$$784#^67)心情家园www.bbsdiy.net
(%$$784#^67)心情家园www.bbsdiy.net
其实很简单
(%$$784#^67)心情家园www.bbsdiy.net
,不管你使用多大的晶振
(%$$784#^67)心情家园www.bbsdiy.net
,使用51单片机
(%$$784#^67)心情家园www.bbsdiy.net
,一般都是12分频出来
(%$$784#^67)心情家园www.bbsdiy.net
,也就可以得出一个机器周期
(%$$784#^67)心情家园www.bbsdiy.net
机器周期=12/n(n指晶振频率)
(%$$784#^67)心情家园www.bbsdiy.net
,假设你要定时的时间为M
(%$$784#^67)心情家园www.bbsdiy.net
那么定时的初值为:
(%$$784#^67)心情家园www.bbsdiy.net
M/机器周期=初值;
(%$$784#^67)心情家园www.bbsdiy.net
TH0=(65536-初值)%256;
(%$$784#^67)心情家园www.bbsdiy.net
TL0=(65536-初值)/256;
(%$$784#^67)心情家园www.bbsdiy.net
将(65536-初值)所得的值化成16进制
(%$$784#^67)心情家园www.bbsdiy.net
,其高位就是TH0的值
(%$$784#^67)心情家园www.bbsdiy.net
,低位为TL0的值
(%$$784#^67)心情家园www.bbsdiy.net
例如用12M晶振做1ms定时计算如下:
(%$$784#^67)心情家园www.bbsdiy.net
机器周期=12/12*10^6=1us(微秒)
(%$$784#^67)心情家园www.bbsdiy.net
定时初值=(1*10^-3)/(1*10^-6)=1000;
(%$$784#^67)心情家园www.bbsdiy.net
所以:TH0=(65536-1000)%256;
(%$$784#^67)心情家园www.bbsdiy.net
TL0=(65536-1000)/256;
(%$$784#^67)心情家园www.bbsdiy.net
将65536-1000=64536化为16进制为:0xFC18
(%$$784#^67)心情家园www.bbsdiy.net
TH0=0xFC;
(%$$784#^67)心情家园www.bbsdiy.net
TL0=0X18;
收藏此文章
打印
更新
编辑此文章
『关闭窗口』