关于单片机定时器赋初值的问题

TH0=(65536-50000)/256;//定时器T0的高八位赋初值TL0=(65536-50000)%256;//定时器T0的低八位赋初值(注:计时50毫秒)为什么... TH0=(65536-50000)/256; //定时器T0的高八位赋初值
TL0=(65536-50000)%256;//定时器T0的低八位赋初值
(注:计时50毫秒)
为什么如此赋初值,具体是什么意思,求大神详解!
展开
 我来答
上海长英
推荐于2017-11-25 · 上海长英,自动化电气设计,软件编程。
上海长英
采纳数:1072 获赞数:22874

向TA提问 私信TA
展开全部
  1. 要理解这个问题需要 看单片机原理 的 定时器 章节

  2. 首先 这个问题是 选择的 16位定时模式

    定时初值=65536-50000=15536

    因为MCS51单片机对定时器赋值 一次只能访问8位(即 TH0 和 TL0分开赋值)

    也就是将 15536 拆成高八位和低八位 

    (65536-50000)/ 256 就是求高八位 数值

       (65536-5000)% 256 就是求低八位 数值

    如果还有不理解之处,请继续提问!

说怼呗N
2013-06-03
知道答主
回答量:36
采纳率:0%
帮助的人:25.5万
展开全部
1 在此之前你要知道51系列单片机的定时器有4种工作方式,你问的这种赋值是针对定时器0的工作方式1,也就是16位定时器来说的,所以有TH0是时器T0的高八位,TL0定时器T0的低八位
2 当TH0=(65536-50000)/256;TL0=(65536-50000)%256时计数为50毫秒,因为定时器启动后便从原来数值开始进行加1计数,假如我们没有对TH0与TL0赋值,则默认为0,假设时钟频率为12M,12个时钟周期为一个机器周期,则机器周期为1us,计满TH0,TL0需要2的16次方-1次,再来一个脉冲则溢出,因此溢出一次时间为65536us,当我们给TH0,TL0赋上初值即TH0=(65536-50000)/256;TL0=(65536-50000)%256时,则每过50ms溢出一次,便起到了50ms计数的作用。
希望能够帮到你!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
429433607
2013-06-03 · TA获得超过821个赞
知道小有建树答主
回答量:1402
采纳率:100%
帮助的人:739万
展开全部
首先你这个单片机使用的晶振是12MHz,经过12分频后给CPU,所以CPU的频率就是1MHz。定时器寄存器增加一个值所用的时间就是1us,这样的话想要定时50ms,那就是定时器计数50000次。51中的定时器是从你设定的初值开始增加计时,当增加大最大值后即65535就会再次从初始值开始。
你给出的语句就是给定时器的高低八位赋值,从这个值开始计时。
65536-50000=15536,也就是说从15536开始计数,最后到65535正好是50000次,也就达到了定时时间。
(65536-50000)/256
除以256表示取出15536的高八位的数值。
(65536-50000)%256

取余表示取出15536的第八位数值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhxiufan
2013-06-03 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38387
国家科技进步奖

向TA提问 私信TA
展开全部
定时器定时是溢出申请中断的,也即是说从初值开始计时,直到溢出。而溢出值是65536,所以计时初值就是65536-定时值。而定时器由TH和TL两个8位寄存器组成,一个高八位,一个低八位,256是八位的溢出值,除以它当然就是高八位,对其求模就是低八位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式