Zigbee之旅(四):几个重要的CC2430基础实验——定时器中断
时间: 2023-06-24 18:03:21 浏览: 61
在 CC2430 的应用开发中,定时器中断是非常常用的一个功能。下面我们将介绍几个关于定时器中断的基础实验。
## 实验一:定时器中断实验
### 实验目的
了解 CC2430 的定时器模块,并掌握其中断的使用方法。
### 实验原理
CC2430 的定时器模块有三个定时器:T1、T2 和 T3。其中,T1 和 T2 是 16 位的定时器,T3 是 8 位的定时器。在本实验中,我们将以 T1 定时器为例,介绍定时器中断的使用方法。
T1 定时器的计数器是一个 16 位的寄存器,它可以通过以下寄存器进行配置:
- T1CC0H/T1CC0L:T1 的比较器 0,可以用来产生比较中断。
- T1CC1H/T1CC1L:T1 的比较器 1,可以用来产生比较中断。
- T1CC2H/T1CC2L:T1 的比较器 2,可以用来产生比较中断。
- T1IE:T1 中断使能寄存器,用来使能 T1 的中断。
- T1CTL:T1 控制寄存器,用来配置 T1 的计数模式、时钟源等参数。
在本实验中,我们将使用 T1 的比较器 0,配置为每隔 1 秒钟产生一次中断。
### 实验步骤
1. 配置 T1 的计数模式、时钟源等参数。
```c
T1CTL |= 0x0C; // T1 计数模式为比较器模式
T1CTL &= ~0x03; // T1 时钟源为时钟源选择寄存器 CLKCON 的 CLKSPD 位所选择的时钟源
T1CTL &= ~0x30; // T1 比较器模式为单次比较模式
```
2. 配置 T1 的比较器 0。
```c
T1CC0L = 0x00; // T1 的比较器 0 的低 8 位
T1CC0H = 0x80; // T1 的比较器 0 的高 8 位
```
3. 使能 T1 的中断。
```c
T1IE = 1; // 使能 T1 的中断
```
4. 在主函数中进入循环,等待定时器中断的触发。
```c
while(1);
```
5. 在定时器中断服务函数中处理中断事件。
```c
#pragma vector = T1_VECTOR
__interrupt void T1_ISR(void)
{
T1IF = 0; // 清除 T1 中断标志
// 中断处理代码
}
```
### 实验结果
当程序运行后,每隔 1 秒钟会触发一次定时器中断。在中断服务函数中可以添加相应的处理代码,实现定时器中断的功能。
## 实验二:定时器中断实现 LED 闪烁
### 实验目的
通过定时器中断实现 LED 的闪烁。
### 实验原理
在上一个实验中,我们已经学习了如何使用定时器中断。在本实验中,我们将以 T1 定时器为例,通过定时器中断实现 LED 的闪烁。
在本实验中,我们将使用 P0.0 引脚控制 LED 的状态。LED 亮时,P0.0 输出低电平;LED 灭时,P0.0 输出高电平。我们可以通过改变 P0.0 引脚的电平状态,实现 LED 的闪烁。
### 实验步骤
1. 配置 P0.0 引脚为输出模式。
```c
P0SEL &= ~0x01; // P0.0 引脚配置为 GPIO 模式
P0DIR |= 0x01; // P0.0 引脚配置为输出模式
```
2. 配置 T1 的计数模式、时钟源等参数。
```c
T1CTL |= 0x0C; // T1 计数模式为比较器模式
T1CTL &= ~0x03; // T1 时钟源为时钟源选择寄存器 CLKCON 的 CLKSPD 位所选择的时钟源
T1CTL &= ~0x30; // T1 比较器模式为单次比较模式
```
3. 配置 T1 的比较器 0。
```c
T1CC0L = 0x00; // T1 的比较器 0 的低 8 位
T1CC0H = 0x80; // T1 的比较器 0 的高 8 位
```
4. 使能 T1 的中断。
```c
T1IE = 1; // 使能 T1 的中断
```
5. 在定时器中断服务函数中处理中断事件,改变 P0.0 引脚的电平状态。
```c
#pragma vector = T1_VECTOR
__interrupt void T1_ISR(void)
{
T1IF = 0; // 清除 T1 中断标志
P0_0 = ~P0_0; // P0.0 引脚电平状态取反
}
```
6. 在主函数中进入循环,等待定时器中断的触发。
```c
while(1);
```
### 实验结果
当程序运行后,LED 会以 1 秒钟的频率闪烁。如果需要改变 LED 闪烁的频率,可以通过修改 T1 的比较器 0 的值来实现。