找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 969|回复: 9
打印 上一主题 下一主题
收起左侧

单片机定时器程序 TL1=TH1初值等于重载值 语句理解

[复制链接]
跳转到指定楼层
楼主
ID:1079270 发表于 2023-6-12 10:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void ConfigUART(unsigned int baud)
{
SCON = 0x50; //配置串口为模式 1
TMOD &= 0x0F; //清零 T1 的控制位
TMOD |= 0x20; //配置 T1 为模式 2
TH1 = 256 - (11059200/12/32)/baud; //计算 T1 重载值
TL1 = TH1; //初值等于重载值
ET1 = 0; //禁止 T1 中断
ES = 1; //使能串口中断
TR1 = 1; //启动 T1
}

TL1 = TH1; //初值等于重载值?有谁知道这个怎么理解吗

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

来自 2#
ID:1034262 发表于 2023-6-12 10:49 | 只看该作者
这是8位自动的初始化,TH1放的就是重装值,每次自动重装都是自动从TH1拷贝到TL1,所以初始化时拷贝一次,其实你写TL1=0也没关系,就是第一次溢出时间长一点而已。
回复

使用道具 举报

来自 3#
ID:235200 发表于 2023-6-12 13:23 | 只看该作者
定时计数器方式2为8位自动重装模式,即当TL1计数满后产生溢出中断,然后把TH1中的值自动赋值给TL1,所以只需一次给TH1和TL1一个初始值就行,上述程序是先把TH1计算出来,在启动定时计数器计数前要先给TL1一个初始值(此时未实现自动重装),于是就有了TL1=TH1
回复

使用道具 举报

来自 4#
ID:116103 发表于 2023-6-12 22:32 | 只看该作者
51定时器就是对机器周期定时,有方式1,2之分,如果定时器初值是0,每来个机器周期定时器加1,直到FF,方式是是16位的,TH0(1),TL0(1),如果想计一个数,就是设置定时器初值是65535,而定时器溢出后又从0计,所以要赋初值65535,而方式2不用,是8位的TL0计数,溢出后把TH0数装入TL0,不用程序里再设置初值
回复

使用道具 举报

5#
ID:155507 发表于 2023-6-12 11:26 | 只看该作者
因为你配置定时器 T1 为模式 2,这个是8位定时器。
        TL1                         //设置定时初始值
        TH1                         //设置定时重载值

回复

使用道具 举报

6#
ID:180919 发表于 2023-6-12 12:05 | 只看该作者
TH1 = 256 - (11059200/12/32)/baud; //计算 T1 重载值
TL1 = TH1; //初值等于重载值
TL1和TH1值一样,同等于
TL1 = 256 - (11059200/12/32)/baud;
回复

使用道具 举报

7#
ID:1083552 发表于 2023-6-12 13:25 | 只看该作者
应该不是,TL表示数的低位,TH表示数的高位。所以说数是分两端存储的。
回复

使用道具 举报

8#
ID:149799 发表于 2023-6-12 21:05 | 只看该作者
看手册也是一头雾水,哪位师傅能详细的讲解一下定时/计数器,万分感谢。
回复

使用道具 举报

9#
ID:1083771 发表于 2023-6-13 12:05 | 只看该作者
定时计数器方式2为8位自动重装模式,就是当TL1计数满后产生溢出中断,将TH1中的值自动赋值给TL1,所以只需一次给TH1和TL1一个初始值就行,上述程序是先把TH1计算出来,在启动定时计数器计数前要先给TL1一个初始值(此时未实现自动重装),于是就有了TL1=TH1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表