版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
定时器在我们写代码是经常使用的,它不仅能够实现精确的定时,加上中断使用后,还可以提高MCU运行速度。
目的
主要使用CC2530的T1的模计数功能,5s定时并产生中断,LED 5S 间隔闪烁。
时间计算公式
先看代码
#include <iocc2530.h>
unsigned char temp,temp1;
#define LED1 P0_4
void T1_init()
{
T1CTL |= 0x0E;//128分频 11 模计数模式10
T1CCTL0 |=0X04; //使用模计数时,必须使能 T1CCTL0.MODE =1
// C353为十进制50000
T1CC0H =0X0C3;
T1CC0L =0X53;
IEN0 |=0X80;//EA总中断 7位为1
IEN1 |=0X02;//T0中断使能 1位为1
T1IF=0; //清标志位
}
void Oclk_init()
{
CLKCONCMD &= ~0x40; // 设置系统时钟源为 32MHZ晶振
while(!(SLEEPSTA & 0x40)); // 等待晶振稳定
CLKCONCMD &= ~0x3f; // 定时器tick输出设置 设置系统主时钟频率为 32MHZ
SLEEPCMD |=0X04;
}
//每中断一次时间为4us*50000=200ms
#pragma vector=T1_VECTOR
__interrupt void TI_VEC()
{
T1IF=0;//中断标志位 T1IF
if(++temp ==25) //200ms*25=5s
{
LED1 =~LED1;//led亮度取反
temp1=1;
temp=0;
}
}
void main()
{
temp=0;
temp1=0;
T1_init();
Oclk_init();
P0SEL &=0x10;//LED引脚为通用口
P0DIR |= 0x10; //输出模式
LED1 =1;
while(1);
}