关于单片机中断程序的定时器0和定时器1

我一直很困惑单片机中断程序的定时器0和定时器1。对于定时器赋值有两种方法,一种是直接给高八位和低八位赋值,另一种是用类似于:TH0=(65536-50000)/256;进... 我一直很困惑单片机中断程序的定时器0和定时器1。
对于定时器赋值有两种方法,一种是直接给高八位和低八位赋值,另一种是用类似于:TH0=(65536-50000)/256;进行赋值。
我想问:1,这两种方法到底有什么区别。
2,如果用直接赋值的方法,(也就是第一种直接给高八位低八位)要设定一个50毫秒,30毫秒,或20毫秒的中断服务应该怎么赋值。
展开
 我来答
冷风口知识库
2015-10-31 · TA获得超过706个赞
知道小有建树答主
回答量:887
采纳率:88%
帮助的人:203万
展开全部

首先,你所说的两种赋值方法,实际上是一种,就是就是寄存器的高8为位个低8位赋值。你说的第二种(TH0=(65536-50000)/256)所赋的值是经过计算(=(65536-50000)/256)得到的,你知道定时计数器的工作原理就清楚了。

其次,赋值大小要根据你的晶振以及单片机工作模式确定机器周期,然后才能确定需要赋多大的值,11.0592MHz的晶振能产生与时钟周期更吻合的波形,12MHz的更利于计算,如果需要更精确的时钟,建议使用时钟芯片。TH0=(65536-50000)/256、TL0=(65536-50000)%256的中断时间为50毫秒(单片机全速运行,晶振12MHz),这只是一种估计的赋值,时间误差很大。

如果觉得手工计算很麻烦,可以使用工具帮忙,只要选择你的参数就能出结果,见附件。

最后,如果你不想计算,给你枚举一些:

  1. 晶振:11.0592MHz,单片机模式:12T

    20毫秒:TH0 = 0xB8;TL0 = 0x00;

    30毫秒:TH0 = 0x94; TL0 = 0x00;

    50毫秒:TH0 = 0x4C; TL0 = 0x00;

  2. 晶振:12MHz,单片机模式:12T

    20毫秒:TH0 = 0xB1;TL0 = 0xE0;

    30毫秒:TH0 = 0x8A;TL0 = 0xD0;

    50毫秒:TH0 = 0x3C; TL0 = 0xB0;

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式