- /****************************************************************************
- * 文 件 名:main.c
- * 功 能:使用定时器0实现1秒定时,控制蜂鸣器蜂鸣。(查询方式)
- * 说 明:JP22跳线短接,JP20跳线断开。
- ****************************************************************************/
- #include "config.h"
- #define BEEPCON 1<<7 // P0.7引脚控制B1,低电平蜂鸣
- /****************************************************************************
- * 名 称:Time0Init()
- * 功 能:初始化定时器0,定时时间为 1S
- * 入口参数:无
- * 出口参数:无
- ****************************************************************************/
- void Time0Init()
- { /* 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*1-1; // 比较值( 1s定时值)
- T0TCR = 0x03; // 启动并复位T0TC
- T0TCR = 0x01;
- }
- /****************************************************************************
- * 名 称:Time1Init()
- * 功 能:初始化定时器1,定时时间为1S。
- * 入口参数:无
- * 出口参数:无
- ****************************************************************************/
- void Time1Init(void)
- { /* Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz
- Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz
- */
- T1PR = 99; // 设置定时器1分频为100分频,得110592Hz
- T1MCR = 0x03; // 匹配通道1匹配中断并复位T1TC
- T1MR0 = 110592-1; // 比较值(1S定时值)
- //T1TCR = 0x03; // 启动并复位T1TC
- //T1TCR = 0x01;
- }
- /****************************************************************************
- * 名 称:main()
- * 功 能:初始化I/O及定时器,然后不断的查询定时器中断标志。当定时时间到达时,取反BEEPCON
- * 控制口。
- ****************************************************************************/
- int main(void)
- {
- PINSEL0 = 0x00000000; // 设置管脚连接GPIO
- IO0DIR = BEEPCON; // 设置I/O为输出
- IO0SET = BEEPCON; // led off (initial state)
- Time0Init(); // 初始化定时器0
- Time1Init();
- while(T0TC != (uint32)T0MR0/2) { //此处要感谢吴yx同学提供的实现思路,O(∩_∩)O~
- IO0CLR = BEEPCON; //led on (keep 0.5s)
- }
- T1TCR = 0x03; // 启动并复位T1TC
- T1TCR = 0x01;
- IO0SET = BEEPCON; //led off (keep 0.5s)
- while(1)
- {
- while( (T0IR&0x01) == 0 ); // 等待定时时间到
- T0IR = 0x01; // 清除中断标志
- IO0CLR = BEEPCON; // led on
- while( (T1IR&0x01) == 0 ); // 等待定时时间到
- T1IR = 0x01;
- IO0SET = BEEPCON; // led off
- }
- return(0);
- }
- //该片段来自于http://www.codesnippet.cn/detail/100620149743.html
来源: http://www.codesnippet.cn/detail/100620149743.html