日志档案

发表于 2007-2-1 11:20:33

14

标签: SP9608  PIC  

PIC18FXXXX系列单片机的TMR0寄存器的读写编程技巧

       TMR0 工作原理

Timer0 既可用作定时器亦可用作计数器;具体的模式由TOCS 位(T0CON<5>)选择。在定时器模式下(T0CS = 0),除非选择了不同的预分频值,否则,默认情况下在每个时钟周期该模块的计时都会递增。如果写入TMR0 寄存器,那么在随后的两个指令周期内,计时将不再递增。用户可通过将校正后的值写入TMR0 寄存器来解决上述问题。通过将T0CS 位置1 选择计数器模式。在计数器模式下, Timer0 可在RA4/T0CKI 引脚信号的每个上升沿或下降沿递增。触发递增的边沿由Timer0 时钟源边沿选择位T0SE T0CON<4>)决定。清零此位选择上升沿递增。

       TMR016 位读写过程

TMR0H 并不是16 位模式下Timer0 的高字节,而是Timer0 高字节的缓冲寄存器,且不可以被直接读写。在读TMR0L 时使用Timer0 高字节的内容更新TMR0H。这样可以一次读取Timer0 的全部16 位,而无需验证读到的高字节和低字节的有效性(在高、低字节分两次连续读取的情况下,由于可能存在进位,因此需要验证读到字节的有效性)。同样,写入Timer0 的高字节也是通过TMR0H 缓冲寄存器来操作的。在写入TMR0L 的同时,使用TMR0H的内容更新Timer0 的高字节。这样一次就可以完成Timer0 全部16 位的更新。

       TMR016位读写编程技巧

         下面的程序段是在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

 

系统分类: 单片机   |   用户分类: PIC单片机   |   来源: 原创   |   【推荐给朋友】

    阅读(1057)    回复(2)  

投一票您将和博主都有获奖机会!

  • 过客

    2007-4-9 15:57:04

         刚开始接触PIC18F单片机,对 它的几种编程方式不太理解,望指教。高电压编程和低电压编程各应用在什么情况下?通常我们用烧写器烧程序用高电压(需要高达12V供电)方式,这样是不是比普通的单片机的编程方式 还要复杂一些?

  • supermcu

    2007-4-25 11:33:46

    需要单独设计一个12V的高压发生器