方式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 时无此要求。
|