定时器的使用

来源:互联网 发布:阿里云cdn签名 编辑:程序博客网 时间:2024/06/16 20:53

定时器的使用

定时器/计数器用来计数外设时钟(PCLK)或外部时钟的周期,可以选择在规定的时间处产生中断或执行其他操作,由4个匹配寄存器的值决定。它也包含4个捕获输入,用来在输入信号变化时捕捉定时器的瞬时值,也可以选择产生中断。


void Timer0Init(void)
{
  T0TC  = 0;                                                      // 定时器设置为0
    T0PR  = 0;                           // 时钟不分频
        T0MCR = 0x03;                                                  // 设置T0MR0匹配后复位T0TC,并产生中断标志
        T0MR0 = (Fpclk / OS_TICKS_PER_SEC);                                              
T0TCR = 0x01;                                                   // 启动定时器
 }

切记:要在使用时复位中断,即T1IR = 1;

延时函数:

void delayMs(DWORD delayinUs)

{

T1TCR = 0x02;/* reset timer */
        T1PR  = 0x00; /* set prescaler to zero */
        T1MR0 = delayInUs * (Fpclk / 1000000);
        T1IR  = 0xff; /* reset all interrrupts */
        T1MCR = 0x04; /* stop timer on match */
        T1TCR = 0x01; /* start timer */

        /* wait until delay time has elapsed
,when on match,the register T1TCR  will be zero*/
        while (T1TCR & 0x01)
        {
            //OSTimeDly(10);
        }
    return;
}