【单片机】定时器设初值的问题,谢谢!

已知单片机系统晶振频率为6MHz,若要求定时值为10ms时,定时器T0工作在方式1时,TH0=?TL0=?我记得公式是(65536-10*1000)/256(65536-... 已知单片机系统晶振频率为 6MHz,若要求定时值为10ms时,定时器T0工作在方式1时,TH0 = ? TL0 = ?

我记得公式是(65536 - 10 * 1000) / 256
(65536 - 10 * 1000) % 256
可这样算好像是12MHz的算法,6MHz的初值运算方法不同?
请问具体怎么算呢?
展开
 我来答
_杜_Yooo_
2013-06-23 · 超过19用户采纳过TA的回答
知道答主
回答量:85
采纳率:0%
帮助的人:54.5万
展开全部
已知单片机系统晶振频率为 6MHz,若要求定时值为10ms时,定时器T0工作在方式1时,TH0 = ? TL0 = ?

TH0 = 0x0EC;
TL0 = 0x78;

不要死记公式,记着定时器的溢出速率有关,晶振频率不同,定时器溢出速率也不同

假设t0工作于方式1(16位最大65535)那么定时时间=(65536-X)再乘以机器周期(12m晶振时为1us)
例如定时50000us(既50ms)(晶振12m,机器周期1us)
首先在主函数或初始化函数中写入(就是在运行定时中断函数之前运行)
TMOD=0X01;//T0工作于定时模式,方式1
TH0=(65536-50000)/256;//给定时器高8位赋值,其中50000就是定时机器周期
TL0=(65536-50000)%256;//给定时器高8位赋值
EA=ET0=TR0=1;//开总中断,开定时中断,启动定时器。
然后定时器开始工作。
定时中断函数
void timer0() interrupt 1
{
TH0=(65536-50000)/256;//重新赋值
TL0=(65536-50000)%256;
九千心放1D
2013-06-23 · 超过14用户采纳过TA的回答
知道答主
回答量:83
采纳率:0%
帮助的人:41.2万
展开全部
6m比12m一个周期时间长一倍 所以65535减去的数值也是原来的一半
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
千帆归尽_
2018-07-07 · TA获得超过103个赞
知道答主
回答量:19
采纳率:0%
帮助的人:4.4万
展开全部
首先根据6MHZ算出时钟周期,然后时钟周期*12就是机器周期,算出的机器周期为2us。然后根据要求的定时值为10ms,得出需要5000个机器周期才能满足条件。下面就好办了
TH0=(65536-5000)/256 ;
TL0= (65536-5000)%256 ;
65536-5000得到的数就是你的初值,意思是从初值开始计数,当记到65536时程序运行了5000个机器周期,也就是10ms。
算起来并不难,希望能帮到你,帮到每一个需要的人。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式