TMR0 工作原理<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Timer0 既可用作定时器亦可用作计数器;具体的模式由TOCS 位(T0CON<5>)选择。在定时器模式下(T0CS = 0),除非选择了不同的预分频值,否则,默认情况下在每个时钟周期该模块的计时都会递增。如果写入TMR0 寄存器,那么在随后的两个指令周期内,计时将不再递增。用户可通过将校正后的值写入TMR0 寄存器来解决上述问题。通过将T0CS 位置1 选择计数器模式。在计数器模式下, Timer0 可在RA4/T0CKI 引脚信号的每个上升沿或下降沿递增。触发递增的边沿由Timer0 时钟源边沿选择位T0SE (T0CON<4>)决定。清零此位选择上升沿递增。
TMR0的16 位读写过程
TMR0H 并不是16 位模式下Timer0 的高字节,而是Timer0 高字节的缓冲寄存器,且不可以被直接读写。在读TMR<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />0L时使用Timer0 高字节的内容更新TMR0H。这样可以一次读取Timer0 的全部16 位,而无需验证读到的高字节和低字节的有效性(在高、低字节分两次连续读取的情况下,由于可能存在进位,因此需要验证读到字节的有效性)。同样,写入Timer0 的高字节也是通过TMR0H 缓冲寄存器来操作的。在写入TMR0L的同时,使用TMR0H的内容更新Timer0 的高字节。这样一次就可以完成Timer0 全部16 位的更新。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
TMR0的16位读写编程技巧
下面的程序段是在SP9608-PIC单片机增强型开发板验证的TMR0作为外部计数的程序段;
初始化TMR0寄存器中的内容程序段如下:
T0CON=0x3F; //将TMR0设置为16位的外部RA4/T0CKI计数功能
TMR0H=0; //初始化TMR0寄存器的时候,一定要先写入TMR0H,再写入TMR0L
TMR0L=0;
T0CONbits.TMR0ON=1;//启动TMR0工作
读取TMR0寄存器中的内容的,并将其内容合成到一个整型变量程序段如下:
Temp=TMR0L; //一定要先读取TMR0L的内容,其中Temp是一个整型变量
Temp=TMR0H; //此时再读取TMR0H的内容
Temp<<=8; //将读取TMR0H的内容移到Temp的高字节位
Temp|=TMR0L; //再读取TMR0L的内容到Temp的低字节位
我们的网站: www.supermcu.com
ash_riple_768180695 2007-11-26 17:58
受益!
用户60667 2007-4-25 11:33
用户62510 2007-4-9 15:57