Timer 在8051(C8051F120)上读取定时器计数器值TMRnL和TMRnH

Timer 在8051(C8051F120)上读取定时器计数器值TMRnL和TMRnH,timer,microcontroller,16-bit,8051,Timer,Microcontroller,16 Bit,8051,在读取16位值PCA0L和PCA0H时,我的微控制器C8051F120的数据表是清晰的: 读取PCA0L会自动将PCA0H的值锁存到“快照”寄存器中;以下PCA0H读取会访问此“快照”寄存器。读取PCA0L寄存器首先保证准确读取整个16位PCA0计数器 但是,我没有发现关于TMRnL和TMRnH寄存器的类似声明。我记得在Atmega128CAN90上,我使用了以下命令 unsigned char chL,chH; #asm("cli") chL=TCNT3L; chH=TCNT3H; #asm(

在读取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寄存器?或者,获得一致读数的安全方法是什么?是否需要禁用中断? 谢谢你的帮助

报告第116页说:

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

因此,似乎也发生了类似的事情