|
#include "io430g2553.h"
void Set_TimerA(void) {
P2DIR |= 0x12; // P2.1 and P2.4 output
P2SEL |= 0x12; // P2.1 and P2.4 TA1 options
TA1CCR0 = 1000000/1000-1; // PWM Period
TA1CCTL1 = OUTMOD_7; // CCR1 reset/set
TA1CCTL2 = OUTMOD_7; TA1CCR1 =(1002000/1000-1)*50/100;
TA1CCR2 = (1002000/1000-1)*25/100;
TA1CTL = TASSEL_2 + MC_1; // SMCLK, up mode
// CCTL0 = CCIE; // CCR0 interrupt enabled
}
void pwm_sinit(unsigned char pwmvalue1) //pwmvlue是占空比,50是代表百分之50,从1到100变化
{
TACTL = TASSEL_2 + MC_1;
CCR0 = 1002000/200; //通过示波器观察此时SMLK=1002000
CCTL1 = OUTMOD_7;
CCR1 = (1002000*pwmvalue1)/(100*200);
P1DIR |= 0x04; //P1.2 output
P1SEL |= 0x04;//通过特殊功能口输出
}
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
Set_TimerA();
pwm_sinit(50);
while(1);
}
以上程序不知道好不好,但已输出了三路PWM,如果要一样频率不同占空比只要选P2.1和P2.4
如果要不一样频率,则,必须要P1.2口与P2的配合
|
|