单片机 定时器初值计算

小弟用8051F040单片机,晶振22.1184M,想用定时器,但是时间一直搞不对,计算定时1ms,这是初始化程序,求高手赐教……voidTimer0Init(void)... 小弟用8051F040单片机,晶振22.1184M,想用定时器,但是时间一直搞不对,计算定时1ms,这是初始化程序,求高手赐教……
void Timer0Init( void )
{
char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = TIMER01_PAGE;
TH0=(65536-20000)/256;
TL0=(65536-20000)%256;
TMOD = 0x01;//16 bit mode
ET0 = 1;
TR0=1;
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}
展开
 我来答
hjf111000
2014-01-18
知道答主
回答量:16
采纳率:0%
帮助的人:9.8万
展开全部
单片机的程序运行都是以系统时钟周期为基础,而系统时钟周期又和单片机晶振相关联,一般51单片机的系统时钟周期均为晶振的12分频。
单片机的定时器每计时一次为一个系统时钟周期(如果晶振频率为12MHz,一个系统时钟周期为12/(12M)=1/1000000秒)
单片机定时器定时是顺计时,计数到65536的时候才会产生中断,要定时2ms就得计时2000次,因此就用65536-2000
其实你上面写的两句程序就是取整,高八位给TH0,取余,低八位给TL0
这个没有办法编程的时候直接变,因为如果单片机的晶振频率一变定时器定的时间就会发生变化,而且定时器有八位的和十六位的计算方式都不同,不过你可以去下载51单片机定时器自动计算的小软件,很好用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
smokeghost
2012-11-27 · TA获得超过544个赞
知道小有建树答主
回答量:354
采纳率:100%
帮助的人:343万
展开全部
16位模式1 初值63692,从网上下载一个51定时计算器,太方便了
TH0=(65536-(65536-63692))/256;
TL0=(65536-(65536-63692))%256;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
徐志尚eo
2012-11-29 · TA获得超过376个赞
知道小有建树答主
回答量:615
采纳率:0%
帮助的人:242万
展开全部
X=65536-(1000*10^3/22.1184)
TH0=(65536-(1000*10^3/22.1184))/256
TL0=(65536-(1000*10^3/22.1184))%256
追问
老师你好,这样TH0与TL0里面的数据就变成负数了。对定时时间有影响么?
追答
怎么可能是负值呢?明明是正值呀
X=65536-(1000*000/22.1184)
TH0=(65536-(1000*000/22.1184))/256
TL0=(65536-(1000*000/22.1184))%256
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a451993547
2012-12-11 · TA获得超过1593个赞
知道小有建树答主
回答量:595
采纳率:100%
帮助的人:708万
展开全部
TH0 = 0x0F8;
TL0 = 0x0CD;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式