求助 求助 急需各位大神帮助看一下程序

2019-03-24 14:04发布

中断出来的PWM怎么没有时间差啊 祈求各位大神帮助
#include <msp430x14x.h>
#include <math.h>
#define uint unsigned int
#define uchar unsigned char 
#define ulong  unsigned long
#define keyin    (P1IN & 0x0F)
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)
{
  //uchar temp=0;
  //ulong PWM_T=50000;
  //static unsigned long PWM_T=65535;//20000;
  WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗
  Init_Clock();
  P6DIR|= BIT2;P6OUT|= BIT2;//关闭电平转换
  P1DIR= BIT7;               //设置P1.0~P.3为输入状态,P.7为输出
  P1OUT=0;
  P3DIR|= BIT4;              //设置P3.4为输出状态
  P3OUT|= BIT4;              //P3.4输出1
  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
//  TBCCTL3=OUTMOD_2;                      // CCR1 reset/set模式
//  TBCCR3=(PWM_T/2);
 
  TACCR0=5000;//5ms,12500-1;//12.5ms
  TACCTL0=CCIE;
TACCR1=2500;
TACCTL1=CCIE;
  TACTL|=TASSEL_2+ID_3+MC_1+TAIE;  //ACLK 1/8 UPMODE
}
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A0(void)
{
  switch( TAIV )
  {
  case  2:{                 TBCCTL3=OUTMOD_2;                      // CCR1 reset/set模式
                TBCCR3=(PWM_T/2); }break;                                 // CCR1
  case  4: break;                           // CCR2 not used
  case 10:{
               TBCCTL1=OUTMOD_2;                      // CCR1 reset/set模式
               TBCCR1=(PWM_T/2);
   CCTL0 |= 0;
   TACTL=0;
    _DINT();
           }
    break;                           // overflow not used
 }
}
//#pragma vector=TIMERA1_VECTOR
//__interrupt void Timer_A0(void)
//{
////   TBCTL = TBSSEL_2+MC_1+ID_3;
////   TBCCR0=PWM_T;
////    TBCCTL1=OUTMOD_2;                      // CCR1 reset/set模式
////   TBCCR1=(PWM_T/2);
//   CCTL0 |= 0;
//   TACTL=0;
//    _DINT();
//
//}
//#pragma vector=TIMERA1_VECTOR
//__interrupt void Timer_A1(void)
//{
//TBCTL = TBSSEL_2+MC_1+ID_3;
//TBCCR0=PWM_T;
//TBCCTL3=OUTMOD_2;                      // CCR1 reset/set模式
//TBCCR3=(PWM_T/2);
// }   此帖出自小平头技术问答
0条回答

一周热门 更多>

相关问题

    相关文章