我的微控制器C8051F120的数据表清楚地说明了读取16位值PCA0L和PCA0H:
“读取PCA0L自动将PCA0H的值锁存到”快照“寄存器中;以下PCA0H读取访问该”快照“寄存器。首先读取PCA0L寄存器可确保准确读取整个16位PCA0计数器。“
但是,我没有找到关于TMRnL和TMRnH寄存器的类似声明。我记得在Atmega128CAN90上,我使用了以下
unsigned char chL,chH;
#asm("cli")
chL=TCNT3L;
chH=TCNT3H;
#asm("sei")
有人知道上述引用是否适用于C8051F120的TMRnL和TMRnH寄存器?或者,获得一致阅读的安全方法是什么?是否需要禁用中断? 谢谢你的帮助!
答案 0 :(得分:2)
datasheet的第116页说:
TCNTn,OCRnx和ICRn是16位寄存器,可由AVR CPU通过8位数据总线访问。必须使用两次读或写操作对16位寄存器进行字节访问。每个16位定时器都有一个8位寄存器,用于临时存储16位访问的高字节。每个16位定时器内的所有16位寄存器之间共享相同的临时寄存器。访问低字节会触发16位读或写操作。当CPU写入16位寄存器的低字节时,存储在临时寄存器中的高字节和写入的低字节都会在同一时钟周期内复制到16位寄存器中。当CPU读取16位寄存器的低字节时,16位寄存器的高字节将在与读取低字节相同的时钟周期内复制到临时寄存器中。
所以看起来确实发生了类似的事情。