打印
[通用8051核FLASH系列]

芯圣单片机定时器/计数器工作方式0讲解

[复制链接]
523|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 AdaMaYun 于 2023-9-21 13:20 编辑

1 定时器/计数器特性
➢ 定时器/计数器 T0&T1 是不完全兼容标准 8051,差异主要是在方式 0 的功能定义不同
➢ 定时器/计数器 T0&T1 支持 16 位自动重载
2 定时器/计数器 Tx(x = 0,1)
2.1 定时器/计数器 Tx(x = 0,1)的工作方式
每个定时器的两个数据寄存器(THx & TLx (x = 0,1))可作为一个 16 位寄存器来访问,它们由寄
存器 TCON 和 TMOD 控制。IE0 寄存器的 ET0 和 ET1 位置 1 能允许定时器 0 和定时器 1 中断。(详见
中断章节)。
通过计数器/定时器方式寄存器(TMOD)的方式选择位 Mx[1:0],选择定时器工作方式。

使用特权

评论回复
沙发
AdaMaYun|  楼主 | 2023-9-21 13:19 | 只看该作者
方式0: 16位自动重载定时器/计数器

方式 0 与标准 8051 功能不兼容,在此方式下为 16 位自动重载定时器/计数器,当 THx 和 TLx(x =
0,1)被写时,用作定时器重载寄存器,当被读时,被用作计数寄存器。TRx(x = 0,1)为 0 时,按顺序写
THx 和 TLx(x = 0,1)两个寄存器,写的值同时被写进重载寄存器和计数寄存器,TRx(x = 0,1)置 1,计
数寄存器开始从写的值递增计数,在计数到 0xFFFF 后,再来一个计数时钟,计数器就会发生溢出,
此时 TFx(x = 0,1)被置为 1,同时重载寄存器的 16 位数据被自动重载入计数寄存器中,计数器又开始
从这个重载的数值递增计数。
在 TRx(x = 0,1)为 1 时,对 THx & TLx(x = 0,1)的写操作,不会影响计数器的值,只能改变重载寄

存器的值,这个改变后的值在下一次溢出时重载进计数寄存器中。只有 TRx(x = 0,1)为 0 时,对 THx
和 TLx(x = 0,1)的写操作,同时会改变计数寄存器和重载寄存器的值。
由于对TLx(x = 0,1)和THx(x = 0,1)的写操作需要2条指令才能完成,为保证精确计数,对THx(x = 0,1)
和TLx(x = 0,1)寄存器的写操作都以对TLx(x = 0,1)寄存器的写操作作为基准。当写入重载寄存器时,写
THx(x = 0,1)寄存器不会立即生效,而是暂存在一个缓冲寄存器中,只有对TLx(x = 0,1)寄存器的写操作
才会使THx(x = 0,1)和TLx(x = 0,1)寄存器同时生效。
因此,THx(x = 0,1)和TLx(x = 0,1)读写操作遵循以下顺序:
写操作:先高位后低位
读操作:先高位后低位
需要注意的是写操作时,当 TRx(x = 0,1)为 0,先写高位再写低位,重载数据将直接重载到计数寄
存器中,当 TRx(x = 0,1)为 1,先写高位再写低位,重载数据只会在下一次溢出时才会被重载到计数寄
存器中。若先写低位再写高位,高位数据将无效(无效:表示发生重载时对应数据不能被更新),直到
下一次操作写入低位数据,前一次写高位的数据才会有效(有效表示发生重载时对应数据可以被更新)。
若只写低位时,低位数据也将有效,例如对 T0 依次做如下操作时:
(1) TH0 = 0x05;
(2) TL0 = 0x08; //此时若发生重载,重载到计数器中的数据为 0x0508
(3) TH0 = 0x06; //此时若发生重载,重载到计数器中的数据仍为 0x0508
(4) TL0 = 0x08; //此时若发生重载,重载到计数器中的数据为 0x0608
(5) TL0 = 0x09; //此时若发生重载,重载到计数器中的数据为 0x0609
显然只要修改重载数据,低位都必须再写入一次,建议每次修改同时修改。
注:方式 1、2、3 时无此要求。


使用特权

评论回复
板凳
johnny66620| | 2023-9-21 15:47 | 只看该作者
感谢楼主耐心细致的讲解

使用特权

评论回复
地板
lajfda001| | 2023-9-21 15:51 | 只看该作者
johnny66620 发表于 2023-9-21 15:47
感谢楼主耐心细致的讲解

是的

使用特权

评论回复
5
lajfda001| | 2023-9-21 16:02 | 只看该作者
AdaMaYun 发表于 2023-9-21 13:19
方式0: 16位自动重载定时器/计数器

方式 0 与标准 8051 功能不兼容,在此方式下为 16 位自动重载定时器/计 ...

这个是很好的定时器,不错的。

使用特权

评论回复
6
udaidfa002| | 2023-9-21 16:26 | 只看该作者
这个不错的,不错的。

使用特权

评论回复
7
johnny66620| | 2023-9-26 18:09 | 只看该作者
udaidfa002 发表于 2023-9-21 16:26
这个不错的,不错的。

是的

使用特权

评论回复
8
tpgf| | 2023-10-12 16:30 | 只看该作者
就是说计数到最大值的时候就会重新装载而不存在溢出的情况是吗

使用特权

评论回复
9
paotangsan| | 2023-10-12 16:46 | 只看该作者
基本上所有类型的定时器都具有这个功能

使用特权

评论回复
10
wakayi| | 2023-10-12 17:03 | 只看该作者
8位和16位自动重载的区别体现在哪里呢

使用特权

评论回复
11
xiaoqizi| | 2023-10-12 18:33 | 只看该作者
可以在定时器运行的过程中更改其计数方式吗

使用特权

评论回复
12
wowu| | 2023-10-12 19:07 | 只看该作者
如果方便的话 请附一下配套的初始化代码

使用特权

评论回复
13
renzheshengui| | 2023-10-12 19:41 | 只看该作者
在这种方式下 允许用户手动加载计数值吗

使用特权

评论回复
14
kjkujkj21| | 2023-10-19 15:27 | 只看该作者
感谢楼主细致的讲解。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

177

主题

1274

帖子

3

粉丝