CC2430/CC2431 包括四个定时器:一个一般的 16 位(Timer 1) 和两个8 位(Timer3,4)定时器,支持典型的定时/ 计数功能,例如测量时间间隔,对外部事件计数,产生周期性中断请求,输入捕捉、比较输出和PWM 功能。一个 16 位MAC定时器(Timer 2),用以为IEEE802.15.4 的CSMA-CA 算法提供定时以及为IEEE802.15.4 的MAC层提供定时。
本实验使用的是T1定时器,对外部事件计数。要设置这个:
T1CTL = 0x05; //清中断,8分频;自动重装模式(0x0000->0xffff);
如果只有一个定时器T1,那么通过查看IRCON是否大于0就可知道定时器是否被触发。
1 #include <ioCC2430.h> 2 3 #define uint unsigned int 4 #define uchar unsigned char 5 6 #define RLED P1_0 7 #define YLED P1_1 8 9 uint counter=0; //统计溢出次数 10 uint TempFlag; //用来标志是否要闪烁 11 12 void Initial(void); 13 void Delay(uint); 14 15 /**************************** 16 //普通延时程序 17 ***************************/ 18 void Delay(uint n) 19 { 20 uint i; 21 for(i=0;i<n;i++); 22 for(i=0;i<n;i++); 23 for(i=0;i<n;i++); 24 for(i=0;i<n;i++); 25 for(i=0;i<n;i++); 26 } 27 28 /**************************** 29 //初始化程序 30 ***************************/ 31 void Initial(void) 32 { 33 //初始化P1 34 P1DIR = 0x03; //P10 P11为输出 35 RLED = 1; 36 YLED = 1; //灭LED 37 38 //用T1来做实验 39 T1CTL = 0x05; //清中断,8分频;自动重装模式(0x0000->0xffff); 40 } 41 42 /*************************** 43 //主函数 44 ***************************/ 45 void main() 46 { 47 Initial(); //调用初始化函数 48 RLED = 0; //点亮红色LED 49 while(1) //查询溢出 50 { 51 if(IRCON > 0) 52 { 53 IRCON = 0; //清溢出标志 54 TempFlag = !TempFlag; 55 } 56 if(TempFlag) 57 { 58 YLED = RLED; 59 RLED = !RLED; 60 Delay(6000); 61 } 62 } 63 }