使用CC2530定时器1的模模式完成P1.0和P1.1两个LED灯的流水灯,闪烁时间为点亮1.2S熄灭1.2S
时间: 2023-08-27 12:05:10 浏览: 96
以下是使用CC2530定时器1模模式完成P1.0和P1.1两个LED灯的流水灯,闪烁时间为点亮1.2S熄灭1.2S的示例代码:
```c
#include "ioCC2530.h"
typedef unsigned char uint8;
typedef unsigned int uint16;
#define LED1 P1_0
#define LED2 P1_1
void initTimer(void)
{
// 将P1.0和P1.1设置为输出模式
P1SEL &= ~(BIT0 | BIT1);
P1DIR |= BIT0 | BIT1;
// 定时器1配置
T1CTL |= BIT7; // 选择ACLK作为定时器1的时钟源
T1CTL &= ~BIT6; // 停止定时器1
T1CTL |= BIT4; // 定时器1采用模模式
T1CTL &= ~BIT3; // 定时器1计数模式为16位
T1CTL &= ~BIT2; // 定时器1溢出中断禁止
T1CTL |= BIT1; // 定时器1计数开始
// 定时器1比较器0配置
T1CCTL0 &= ~BIT7; // 关闭比较器0中断
T1CCTL0 &= ~BIT6; // 比较器0输出禁止
T1CCTL0 |= BIT5; // 比较器0模式为比较器模式
T1CCTL0 &= ~BIT4; // 比较器0输出模式为输出低电平
T1CCTL0 &= ~BIT3; // 比较器0快速模式禁止
T1CCTL0 &= ~BIT2; // 比较器0同步模式禁止
T1CCTL0 &= ~BIT1; // 比较器0输出翻转禁止
T1CCTL0 &= ~BIT0; // 比较器0中断标志清零
// 定时器1比较器1配置
T1CCTL1 &= ~BIT7; // 关闭比较器1中断
T1CCTL1 &= ~BIT6; // 比较器1输出禁止
T1CCTL1 |= BIT5; // 比较器1模式为比较器模式
T1CCTL1 &= ~BIT4; // 比较器1输出模式为输出低电平
T1CCTL1 &= ~BIT3; // 比较器1快速模式禁止
T1CCTL1 &= ~BIT2; // 比较器1同步模式禁止
T1CCTL1 &= ~BIT1; // 比较器1输出翻转禁止
T1CCTL1 &= ~BIT0; // 比较器1中断标志清零
// 定时器1比较器0和比较器1的比较值配置
T1CC0L = 0x34; // 0x34 表示1.2S的时钟数(ACLK = 32.768kHz)
T1CC0H = 0x12; // 0x1234 = 4660
T1CC1L = 0x34; // 0x34 表示1.2S的时钟数(ACLK = 32.768kHz)
T1CC1H = 0x12; // 0x1234 = 4660
// 定时器1比较器0的输出配置
T1CCTL0 |= BIT6; // 比较器0输出使能
T1CCTL0 |= BIT4; // 比较器0输出模式为输出低电平
// 定时器1比较器1的输出配置
T1CCTL1 &= ~BIT6; // 比较器1输出禁止
T1CCTL1 |= BIT4; // 比较器1输出模式为输出低电平
}
void main(void)
{
initTimer();
while(1) {
if(T1CCTL0 & BIT0) { // 检查比较器0中断标志
LED1 = ~LED1; // 切换LED1的状态
T1CCTL0 &= ~BIT0; // 比较器0中断标志清零
}
if(T1CCTL1 & BIT0) { // 检查比较器1中断标志
LED2 = ~LED2; // 切换LED2的状态
T1CCTL1 &= ~BIT0; // 比较器1中断标志清零
}
}
}
```
该代码首先定义了LED1和LED2的宏定义,分别表示P1.0和P1.1。然后在`initTimer`函数中配置了定时器1的模模式,并将比较器0的比较值设置为1.2S,比较器1的比较值也设置为1.2S。比较器0输出模式为输出低电平,比较器1输出模式同样为输出低电平。在主函数中,不断检查比较器0和比较器1的中断标志,如果有对应的中断发生,就切换LED1和LED2的状态,然后将对应的中断标志清零。这样就可以实现LED1和LED2的流水灯效果,闪烁时间为点亮1.2S熄灭1.2S。
阅读全文