cc2530之定时器1的输出比较模式(PWM实验)
程序员文章站
2022-06-09 19:29:26
...
PWM实验是通过调节高低电平所占的时间比,控制灯的亮暗程度
1. 查看灯的原理图
之前在第一篇博客中有写道led的配置和相关知识,此处就不再重复了.这里我们使用D3LED来进行实验,可以从原理图中看出D3LED是由P1_0口控制的
P1SEL |= 0x01; //设置P1_0口为外设口
P1DIR |= 0x01; //设置P1_0口为输出端口
2. 查看外设io图
由上图中可以看出定时器1要选择备用位置2以及通道2
PERCFG |= 0x40; //选择定时器备用位置2
T1CCTL2 |= 0x1c; //选择比较模式,以及选择比较模式4
P2SEL &= ~0x10; //定时器1优先
3.查看输出比较模式
*模式下的比较模式: 当计数器的值等于比较寄存器中的值时,输出高电平,当计数器的值等于0的时候清除,也就是输出低电平
我们选择*模式,而且选择128分频
T1CTL |= 0x0d; //选择*模式,128分频
T1CC0H = 0x40; //先初始化这两个比较寄存器为4040,即16448
T1CC0L = 0x40;
通过修改T1CC0寄存器的值就可以修改LED的亮度
T1CC0H = 0xE6;
T1CC0L = 0x66; //正占空比10%
T1CC0H = 0xB3;
T1CC0L = 0x33; //正占空比30%
T1CC0H = 0x80;
T1CC0L = 0x00; //正占空比50%
T1CC0H = 0x4C;
T1CC0L = 0xCD; //正占空比70%
T1CC0H = 0x19;
T1CC0L = 0x9A; //正占空比90%
总代码
#include<ioCC2530.h>
typedef unsigned int uint;
void delay(int ms)
{
int i,j;
for(i=0; i<ms; i++)
for(j=0; j<120; j++);
}
void InitLED()
{
P1SEL |= 0x01; //设置P1_0口为外设口
P1DIR |= 0x01; //设置P1_0口为输出端口
}
void InitTimer()
{
P2SEL &= ~0x10; //定时器1优先
PERCFG |= 0x40; //选择定时器备用位置2
T1CCTL2 |= 0x1c; //选择比较模式,以及选择比较模式4
T1CTL |= 0x0d; //选择*模式,128分频
T1CC0H = 0x40; //先初始化这两个比较寄存器为4040,即16448
T1CC0L = 0x40;
}
void main()
{
int i;
uint rateH[5] = {0xE6, 0xB3, 0x80, 0x4C, 0x19}; //10% 30% 50% 70% 90%
uint rateL[5] = {0x66, 0x33, 0x00, 0xCD, 0x9A};
InitLED();
InitTimer();
//逐渐变亮 逐渐变暗 逐渐变亮 逐渐变暗
while(1)
{
for(i=0; i<5; i++)
{
T1CC0H = rateH[i];
T1CC0L = rateL[i];
delay(1000);
}
}
}
上一篇: Zigbee之CC2530最小系统及寄存器配置(1)
下一篇: CC2530之定时器T3