📄 ta.c
字号:
/****************************************************************************
* 文件名称:
* TA.c
* 文件说明:
* 使用TA输出PWM波形,可通过set_TA设定不同的模式
*****************************************************************************/
#include "msp430x44x.h"
/******************************************************************************
* 设置TimerA输出PWM的工作模式
********************************************************************************/
void set_TA(int mode)
{
if (mode==2)
{ // 翻转/复位模式,CCR1=25%,CCR2=75%
CCR0 = 511; // PWM 周期
CCTL1 = OUTMOD_2; // PWM toggle/reset
CCR1 = 384; // ccr1 Pwm cycle
CCTL2 = OUTMOD_2; // PWM toggle/reset
CCR2 = 128; // ccr2 Pwm cycle
P1DIR |= 0x04; // p1.2 模式设置
P1SEL |= 0x04; // p1.2 option select
P2DIR |= 0x01; // P2.0 output mode
P2SEL |= 0x01; // P2.0 option select
TACTL |= MC0; // 设置递增模式
}else if (mode==0x03)
{ //置位/复位模式,CCR1=25%,CCR2=75%
CCR0 = 511; // PWM 周期
CCTL1 = OUTMOD_3; // PWM toggle/reset
CCR1 = 384; // ccr1 Pwm cycle
CCTL2 = OUTMOD_3; // PWM toggle/reset
CCR2 = 128; // ccr2 Pwm cycle
P1DIR |= 0x04; // p1.2 output mode
P1SEL |= 0x04; // p1.2 option select
P2DIR |= 0x01; // P2.0 output mode
P2SEL |= 0x01; // P2.0 option select
TACTL |= MC0; // 设置递增模式
}else if (mode==0x04)
{ // 翻转模式,CCR1=50%,CCR2=50%
CCR0 = 511; // PWM 周期
CCTL1 = OUTMOD_4; // PWM toggle/reset
CCR1 = 384; // ccr1 Pwm cycle
CCTL2 = OUTMOD_4; // PWM toggle/reset
CCR2 = 128; // ccr2 Pwm cycle
P1DIR |= 0x04; // p1.2 output mode
P1SEL |= 0x04; // p1.2 option select
P2DIR |= 0x01; // P2.0 output mode
P2SEL |= 0x01; // P2.0 option select
TACTL |= MC0; // 设置递增模式
}else if (mode==0x06)
{ //翻转/置位模式,CCR1=75%,CCR2=25%
CCR0 = 511; // PWM 周期
CCTL1 = OUTMOD_6; // PWM toggle/reset
CCR1 = 384; // ccr1 Pwm cycle
CCTL2 = OUTMOD_6; // PWM toggle/reset
CCR2 = 128; // ccr2 Pwm cycle
P1DIR |= 0x04; // p1.2 output mode
P1SEL |= 0x04; // p1.2 option select
P2DIR |= 0x01; // P2.0 output mode
P2SEL |= 0x01; // P2.0 option select
TACTL |= MC0; // 设置递增模式
}else if (mode==0x07)
{ // 复位/置位模式
CCR0 = 511; // P1.2--> CCR1 - 75% PWM
// P2.0--> CCR2 - 25% PWM
// PWM 周期
CCTL1 = OUTMOD_7; // ccrl reset/set
CCR1 = 384; // ccr1 Pwm cycle
CCTL2 = OUTMOD_7; // ccr1 reset/set
CCR2 = 128; // ccr2 Pwm cycle
P1DIR |= 0x04; // p1.2 output mode
P1SEL |= 0x04; // p1.2 option select
P2DIR |= 0x01; // P2.0 output mode
P2SEL |= 0x01; // P2.0 option select
TACTL |= MC0; // 设置递增模式
}
}
/****** 在Timer A的不同工作模式下输出PWM波形 *****/
void main()
{
unsigned int pwm_Delay;
char tmpv,tmp[5] = {2,3,4,6,7};
WDTCTL = WDTHOLD + WDTPW; //关闭看门狗
tmpv=0;
while(1)
{
set_TA(tmp[tmpv]); //选择 PWM 模式
tmpv = (tmpv + 1) % 5; //改变模式
for(pwm_Delay=0;pwm_Delay<0xffff;pwm_Delay++);//delay
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -