cc2530定时器1模模式中断1ms代码
时间: 2023-07-10 19:18:19 浏览: 196
以下是基于CC2530的定时器1模式中断1ms的代码示例,你可以根据自己的需求进行修改:
```c
#include "ioCC2530.h"
#define TIMER_TICKS_1MS 32678 // 定时器计数器为16位,时钟频率为32.768kHz,计数1ms需要的时钟周期数为:32768/1000=32.768
void Timer1_Init(void)
{
T1CTL |= 0x0C; // 选择模式3,即模式1+模式2
T1CCTL0 |= 0x44; // 选择模式1,设置为定时器模式,并启用中断
T1CC0L = TIMER_TICKS_1MS & 0xFF; // 设置计数器初始值低8位
T1CC0H = TIMER_TICKS_1MS >> 8; // 设置计数器初始值高8位
T1IE = 1; // 使能定时器1中断
T1CNTL = 0; // 将计数器清零
T1CNTH = 0;
T1CTL |= 0x02; // 启动定时器1
}
#pragma vector = T1_VECTOR
__interrupt void Timer1_ISR(void)
{
T1IF = 0; // 清除定时器1中断标志
// 在此处添加需要执行的代码,每1ms执行一次
}
int main(void)
{
Timer1_Init(); // 初始化定时器1
EA = 1; // 全局使能中断
while(1)
{
// 在此处添加需要执行的代码,不需要关心定时器1
}
}
```
在以上示例代码中,定时器1使用了模式3,即同时使用模式1和模式2。模式1是定时器模式,使用定时器计数器进行计时,并在计时结束时产生中断;模式2是比较模式,使用比较器进行比较,并在比较器输出变化时产生中断。在模式3下,定时器1同时使用了定时器模式和比较模式,每1ms产生一次中断。需要注意的是,中断服务函数中应尽量不要使用过多的计算和延时操作,以免影响定时器1的计时精度。
阅读全文