#include
#include
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
extern unsigned long PWM_T=20000;//20000;static
void delay(void);
void Init_Clock(void)
{
int i=0;
BCSCTL1&=~XT2OFF; // XT2on
do
{
IFG1&=~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
BCSCTL2 |= SELM_2 + SELS; // MCLK = SMCLK = XT2 (safe)
_EINT(); //打开全局中断控制,若不需要打开,可以屏蔽本句
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
Init_Clock();
P4SEL|= BIT1+BIT2+BIT3+BIT4; // P1.2 TA1模式P1.3 TA2模式
P4DIR|= BIT1+BIT2+BIT3+BIT4; // P1.2 P1.3输出
TBCTL = TBSSEL_2+MC_1+ID_3; // SMCLK, 清零Tar,增减模式启动Timer_B,1/8分频
TBCCR0=PWM_T; // PWM 周期 10MS(100HZ)CCR0初值10000-50MS(20HZ)CCR0初值50000
CCTL0 = CCIE;
CCR0=5000;//5ms,12500-1;//12.5ms
TACTL|=TASSEL_2+ID_3+MC_1+TAIE; //ACLK 1/8 UPMODE
TBCCTL1=OUTMOD_2; // CCR1 reset t模式
TBCCR1=(PWM_T/2);//;(2*PWM_T/3); // CCR1 PWM 任务周期
TBCCTL2=OUTMOD_6; // CCR1 reset t模式
TBCCR2=(PWM_T/2);//;(1*PWM_T/3);
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
TBCTL = TBSSEL_1+MC_3+ID_3;
TBCCR0=PWM_T;
TBCCTL3=OUTMOD_6; // CCR1 reset t模式
TBCCR3=(1*PWM_T/3); // CCR1 PWM 任务周期
TBCCTL4=OUTMOD_2; // CCR1 reset t模式
TBCCR4=(2*PWM_T/3);
P3OUT ^= BIT4; // Toggle P3.4 using exclusive-OR
CCTL0 |= 0;
// TACTL=(TAIE&0)+MC_0;
TACTL=0;
_DINT();
}
/*******************************************
函数名称:delay
功 能:用于消抖的延时
参 数:无
返回值 :无
********************************************/
void delay(void)
{
uint tmp;
for(tmp = 12000;tmp > 0;tmp--);
}
前辈 求助
我这个程序是产生4路PWM其中2路和另2路相差90度
我用示波器 显示出来的频率 不是我设置的50HZ 非常慢 是怎么回事啊 求指点啊 |