标签:全局 基于 ovf fine while 比较 void 清除 需要
1 #include "ioCC2530.h" 2 3 #define D3 P1_0 4 #define D4 P1_1 5 #define D5 P1_3 6 #define D6 P1_4 7 8 unsigned char count = 0; //长定时累计变量 9 10 /*======================端口初始化函数========================*/ 11 void Init_Port() 12 { 13 //初始化LED灯的I/O端口 14 P1SEL &= ~0x1b; //P1_0、P1_1、P1_3和P1_4作为通用I/O端口 15 P1DIR |= 0x1b; //P1_0、P1_1、P1_3和P1_4端口输出 16 //关闭所有的LED灯 17 P1 &= ~0x1b; //0001 1011->1110 0100 关闭所有灯 18 } 19 20 /*=====================定时器1初始化函数======================*/ 21 void Init_Timer1() 22 { 23 T1CC0L = 0xd4; //16MHz时钟128分频定时100ms 24 T1CC0H = 0x30; //设先填低8位,再填高8位 最大定时周期 定时0.1s 25 T1CCTL0 |= 0x04; //开启通道0的输出比较模式 0000 0100 模模式,需要开启通道0的比较模式 26 T1IE = 1; //使能定时器1中断 27 T1OVFIM = 1; //使能定时器1溢出中断 28 EA = 1; //使能总中断 29 T1CTL = 0x0e; //分频系数是128,模模式 0000 1110 30 } 31 32 /*====================定时器1中断服务函数=====================*/ 33 #pragma vector = T1_VECTOR 34 __interrupt void Timer1_Sevice() 35 { 36 T1STAT &= ~0x01; //清除定时器1通道0中断标志 重要 37 count++; //累加定时周期 38 if(count%5 == 0) //定时0.5秒时间到 39 { 40 D3 = ~D3; 41 } 42 if(count%10 == 0) //定时1秒时间到 43 { 44 D4 = ~D4; 45 } 46 if(count == 50) //定时5秒时间到 47 { 48 D5 = ~D5; 49 count = 0; 50 } 51 } 52 53 /*==========================主函数============================*/ 54 void main() 55 { 56 Init_Port(); //端口初始化 57 Init_Timer1(); //初始化定时器1 58 while(1); 59 }
此程序的现象是:内部系统时钟16MHz的RC振荡器128分频作为定时器1的计数信号,在模模式中实现0.1秒定时。在定时中断服务函数中对全局变量count进行累加,实现0.5秒定时,LED3亮,而1秒后LED4亮,而5秒后LED5亮……如此往复。
标签:全局 基于 ovf fine while 比较 void 清除 需要
原文地址:https://www.cnblogs.com/yuling520/p/12687253.html