1

在读取 16 位值 PCA0L 和 PCA0H 时,我的微控制器 C8051F120 的数据表很清楚:

“读取 PCA0L 会自动将 PCA0H 的值锁存到“快照”寄存器中;接下来的 PCA0H 读取访问此“快照”寄存器。首先读取 PCA0L 寄存器可确保准确读取整个 16 位 PCA0 计数器。”

但是,我没有找到关于 TMRnL 和 TMRnH 寄存器的类似声明。我记得在 Atmega128CAN90 上,我使用过以下

unsigned char chL,chH;
#asm("cli")
chL=TCNT3L;
chH=TCNT3H;
#asm("sei")

有人知道上述报价是否也适用于 C8051F120 的 TMRnL 和 TMRnH 寄存器吗?或者,什么是获得一致读数的安全方法?是否需要禁用中断?谢谢你的帮助!

4

1 回答 1

2

数据表第 116 页说:

TCNTn、OCRnx 和 ICRn 是 16 位寄存器,可由 AVR CPU 通过 8 位数据总线访问。必须使用两次读取或写入操作对 16 位寄存器进行字节访问。每个 16 位定时器都有一个 8 位寄存器,用于临时存储 16 位访问的高字节。每个 16 位定时器内的所有 16 位寄存器都共享同一个临时寄存器。访问低字节会触发 16 位读取或写入操作。当 CPU 写入 16 位寄存器的低字节时,存储在临时寄存器中的高字节和写入的低字节都在同一个时钟周期内复制到 16 位寄存器中。当 CPU 读取 16 位寄存器的低字节时,16 位寄存器的高字节在与读取低字节相同的时钟周期内被复制到临时寄存器中。

所以看起来类似的事情正在发生。

于 2012-08-31T09:58:31.990 回答