打印

求助定时器问题

[复制链接]
1457|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
whgsasr|  楼主 | 2012-3-28 23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/****************************************************************************
* 文 件 名:main.c
* 功    能:使用定时器0实现1秒定时,控制蜂鸣器蜂鸣。(查询方式)
* 说    明:****************************************************************************/
#include  "config.h"
#define          BEEPCON  1<<7                                                        // P0.7引脚控制B1,低电平蜂鸣

/****************************************************************************
* 名    称:Time0Init()
* 功    能:初始化定时器0,定时时间为1S。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  Time0Init(void)
{   /* Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz
           Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz
        */
    T0PR = 99;                                                                    // 设置定时器0分频为100分频,得110592Hz
        T0MCR = 0x03;                                                                   // 匹配通道0匹配中断并复位T0TC
        T0MR0 = 110592;                                                            // 比较值(1S定时值)
        T0TCR = 0x03;                                                                   // 启动并复位T0TC
        T0TCR = 0x01;
}

/****************************************************************************
* 名    称:main()
* 功    能:初始化I/O及定时器,然后不断的查询定时器中断标志。当定时时间到达时,取反BEEPCON
*           控制口。
****************************************************************************/
int  main(void)
{  
    PINSEL0 = 0x00000000;                                                // 设置管脚连接GPIO   
    IO0DIR = BEEPCON;                                                         // 设置I/O为输出
    Time0Init();                                                                // 初始化定时器0        
                  
    while(1)        
    {  
        while( (T0IR&0x01) == 0 );                            // 等待定时时间到
        T0IR = 0x01;                                                        // 清除中断标志
        if( (IO0SET&BEEPCON) == 0 )
        {
            IO0SET = BEEPCON;        
        }
        else  
        {
            IO0CLR = BEEPCON;        
        }                                
   }
   return(0);
}


这里的T0MR0 = 110592    // 比较值(1S定时值)
是咋算出来的,110592Hz也不等于1s 啊,不明白,请大侠指教?

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

8

帖子

1

粉丝