| 
 
| | /**************************************************************************** * 文 件 名: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 啊,不明白,请大侠指教?
 
 | 
 | 
 |