[51单片机] C51单片机定时器赋初值问题

[复制链接]
 楼主| shaorc 发表于 2019-3-4 09:34 | 显示全部楼层 |阅读模式
【不懂就问】
用89C52单片机,做一个LED灯闪烁的效果,亮一秒灭一秒
现在在给定时器的TH0和TL0赋初值上卡住了
看教程说,TL0初值为0,TH0初值为0xB8,
一个机器周期等于12个时钟周期,晶振为11.0592MHz
用20ms当做一个循环,循环50次,就是一秒
那么计算初值x*(12/11.0592MHz)=20ms,x=0xB8,
计算出x的值为什么要赋给TH0呢?

评论

如果不赋值,TH0,TL0 的初始值都是0  发表于 2019-3-4 23:04
ningling_21 发表于 2019-3-4 11:05 | 显示全部楼层
要理解初值的含义,单片机复位后的TH,TL初值都是0,只有通过程序赋值(初始化值)后定时器才按预定义功能进行定时
 楼主| shaorc 发表于 2019-3-4 22:30 来自手机 | 显示全部楼层
ningling_21 发表于 2019-3-4 11:05
要理解初值的含义,单片机复位后的TH,TL初值都是0,只有通过程序赋值(初始化值)后定时器才按预定义功能进 ...

你好,谢谢
还是没懂我问题的答案。能再说说吗?
ningling_21 发表于 2019-3-4 23:03 | 显示全部楼层
shaorc 发表于 2019-3-4 22:30
你好,谢谢
还是没懂我问题的答案。能再说说吗?

计算出x的值为什么要赋给TH0呢?

就像,设定了烧水壶的开水温度(100)之后,烧水壶才开始烧水直到把水烧开。

计算出的定时器的初始值是十六位最大为65535,再分成高低字节赋值给TH0和TL0
xuyaqi 发表于 2019-3-5 15:36 | 显示全部楼层
一个机器周期=1/11.0592/12=1.08507us
20毫秒需要周期数=20*1000/1.08507=18432
所以初值为65536-18432=47104D=B800H
rankey 发表于 2019-3-6 08:07 | 显示全部楼层
    朋友,请叫我雷锋

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| shaorc 发表于 2019-3-6 09:27 来自手机 | 显示全部楼层
xuyaqi 发表于 2019-3-5 15:36
一个机器周期=1/11.0592/12=1.08507us
20毫秒需要周期数=20*1000/1.08507=18432
所以初值为65536-18432=471 ...

谢谢,计算过程明白了,但是计算出来的值,为什么直接付给了TH0,而把TL0付给了0呢?我的TMOD=0x01
xuyaqi 发表于 2019-3-6 14:13 | 显示全部楼层
shaorc 发表于 2019-3-6 09:27
谢谢,计算过程明白了,但是计算出来的值,为什么直接付给了TH0,而把TL0付给了0呢?我的TMOD=0x01 ...

计算出的16位计数器初值是0xB800,但51单片机16位计数器是由2个8位计数器组成,分高位TH0,低位TL0,因此要把初值高8位0xB8赋给TH0,低位TL0上电就是0x00。
 楼主| shaorc 发表于 2019-3-6 22:52 来自手机 | 显示全部楼层
xuyaqi 发表于 2019-3-6 14:13
计算出的16位计数器初值是0xB800,但51单片机16位计数器是由2个8位计数器组成,分高位TH0,低位TL0,因此 ...

明白了,原来算出来的0xB800才是最终的数值,高八位,低八位这样分开来,明白了,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

200

主题

613

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部

200

主题

613

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部