标签:
定时器1状态寄存器
定时器1在自由运行模式,查询方式下的初始化子函数
1 1 /*************************************************** 2 2 *函 数 名:InitT1 3 3 *功 能:定时器1初始化,系统不配置时钟默认2分频,即16M 4 4 *入口参数:无 5 5 *出口参数:无 6 6 ***************************************************/ 7 7 void InitT1(void) 8 8 { 9 9 T1CTL = 0x0d; //定时器1设置为128分频,自由运行模式 10 10 T1STAT = 0X21; //这一句在裸机程序中可有可无,在协议栈中有用 11 11 //通道0,中断有效 12 12 }
主程序:查询方式,判断定时器1中断标志位
1 1 /****************************************************************************** 2 2 *程序入口函数 3 3 ******************************************************************************/ 4 4 int main(void) 5 5 { 6 6 InitClock(); 7 7 InitLED(1); //LED初始化,熄灭LED1 8 8 InitT1(); //定时器1初始化 9 9 10 10 while(1) 11 11 { 12 12 if(IRCON & (1<<1)) //检测定时器1是否溢出 13 13 { 14 14 IRCON &= ~(1<<1); //清溢出标志 15 15 LED1 = !LED1; //LED闪烁 16 16 } 17 17 } 18 18 }
查询方式下,我们判断IRCON.T1IF(定时器1中断标志)是否为1来确定定时器是否计数溢出,刚才说过T1STAT.OVFIF(定时器1计数器溢出中断标志)在定时器计数溢出时也会置1,那么能不能改为查询T1STAT.OVFIF呢?经过试验,答案是肯定的,程序可以改为:
1 1 /****************************************************************************** 2 2 *程序入口函数 3 3 ******************************************************************************/ 4 4 int main(void) 5 5 { 6 6 InitClock(); 7 7 InitLED(1); //LED初始化,熄灭LED1 8 8 InitT1(); //定时器1初始化 9 9 10 10 while(1) 11 11 { 12 12 if(T1STAT & (1<<5)) //检测定时器1是否溢出 13 13 { 14 14 T1STAT &= ~(1<<5); //清溢出标志 15 15 LED1 = !LED1; //LED闪烁 16 16 } 17 17 } 18 18 }
定时器1自由运行模式中断程序,初始化程序
中断初始化程序:
1 /****************************************************************************** 2 *函 数 名:InitT1 3 *功 能:定时器1初始化,系统不配置时钟默认2分频,即16M 4 *入口参数:无 5 *出口参数:无 6 ******************************************************************************/ 7 void InitT1(void) 8 { 9 T1CTL = 0x0d; //定时器1设置为128分频,自由运行模式 10 T1STAT = 0X21; //通道0,中断有效。这一句在裸机程序中可有可无 11 TIMIF |= (1<<6); //定时器1溢出中断使能 12 IEN1 |= (1<<1); //定时器1中断使能 13 EA = 1; //开总中断 14 }
中断服务程序中要清除定时器1中断标志和定时器1溢出标志:
1 /****************************************************************************** 2 *函 数 名:Timer1_ISR 3 *功 能:定时器1中断服务程序 4 *入口参数:无 5 *出口参数:无 6 ******************************************************************************/ 7 #pragma vector = T1_VECTOR 8 __interrupt void Timer1_ISR(void) 9 { 10 LED1 = !LED1; 11 IRCON &= ~0x02; 12 T1STAT &= ~0x20; 13 }
标签:
原文地址:http://www.cnblogs.com/chenzhao207/p/4497856.html