cc2530之定时器1(*模式,中断模式)
程序员文章站
2022-06-09 19:28:44
...
1、查看中断图
2、配置定时器1
T1CTL = 0x0d; //设置为128分频,选择*运行模式
TIMIF = 0x40; //设置了 TIMIF.OVFIM,让定时器1产生中断
IRCON = 0x00; //清理中断标志位
EA = 1; //打开总中断
T1IE = 1; //打开定时器T1中断
3、总体代码
#include<ioCC2530.h>
#define D3LED P1_0
#define D4LED P1_1
#define LedOpen 1
#define LedClose 0
int times = 0; //产生中断的次数
void delay(int ms) //延时函数
{
int i,j;
for(i=0; i<ms; i++)
for(j=0; j<120; j++);
}
void initT1()
{
T1CTL = 0x0d; //设置为128分频,选择*运行模式
TIMIF = 0x40; //设置了 TIMIF.OVFIM,让定时器1产生中断
EA = 1; //打开总中断
T1IE = 1; //打开定时器T1中断
IRCON = 0x00; //清理中断标志位
}
void initLED()
{
P1SEL |= 0x00; //设置为通用io模式
P1DIR |= 0x03; //设置成输出状态
D3LED = LedClose; //灯的初始状态是关闭的
D4LED = LedClose;
}
void main()
{
initLED(); //初始化led灯
initT1(); //初始化定时器1
while(1)
{
switch (times)
{
case 1:
D3LED = !D3LED; //灯3亮
D4LED = !D3LED; //灯4灭
break;
case 2:
D3LED = LedOpen; //亮
D4LED = LedOpen; //亮
break;
case 3:
D3LED = LedClose; //灭
D4LED = LedClose; //灭
break;
}
}
}
#pragma vector = T1_VECTOR //Timer1中断向量
__interrupt void T1(void)
{
IRCON = 0x00; //清理中断标志位
times++;
if(times == 4)
times = 1;
}