MSP430F169用DAC12产生正弦波问题

2019-03-24 11:33发布

本帖最后由 地瓜ing 于 2014-5-10 23:31 编辑

做课程设计,刚刚接触430,好多地方不熟,请教大神。下面是我用169写的一个DAC12产生正弦波的程序,下面的程序基本上能够产生一个正弦波,但是如果我打开XT2,就完全不能产生波形,但如果MCLK和SMCLK用DCO就不会出现问题,最起码能够产生波形,TB0用得是ACLK,是不是我哪里写错了,都两天了,实在是找不出原因,求大神指教

#include <msp430x16x.h>
#include <math.h>
double x=0,sina;
/***********************************
            时钟源选择
************************************/
/*                   只能将其注释掉void InitClk(void)
{
   unsigned int iq0;

  //使用XT2振荡器
   BCSCTL1&=~XT2OFF;                             //打开XT2振荡器
   do
   {
     IFG1 &= ~OFIFG;                        //清除振荡器失效标志
     for (iq0 = 0xFF; iq0 > 0; iq0--);        //延时,等待XT2起振
    }
   while ((IFG1 & OFIFG) != 0);                        //判断XT2是否起振

   BCSCTL2 =SELM_2+SELS;                                //选择MCLK、SMCLK为XT2
}*/

/**********************************
          DAC12初始化
***********************************/

void initDAC12_0(void)
{
ADC12CTL0=REF2_5V+REFON;     //打开内部基准电压2.5V
DAC12_0CTL|=DAC12CALON;      //启动校验DAC
while((DAC12_0CTL&DAC12CALON)!=0)
   {
    _NOP();
   }
//控制寄存器设置
DAC12_0CTL= DAC12IR + DAC12AMP_5 + DAC12ENC+DAC12LSEL_1 ;
//满量程为参考电压,中速度/电流输出,12位分辨率,Vref+为参考电压
DAC12_0DAT=0x00;
}
/***************************************************
              TB初始化
***************************************************/
void TB_Init(void)
{  
  TBCTL=TBSSEL_1+TBCLR+MC_1; //选择时钟源为ACLK    // MCLK, up mode
  TBCCR0=328;                 // 定时
  TBCCTL0=CCIE;                  //开CCR0中断
}
  #pragma vector=TIMERB0_VECTOR   
__interrupt void Timer_B0(void)   //定时器中断函数   
{      
  //输出正弦波
        if(x<365)                  
            x++;
        else
          x=0;
        sina=0xFFF*sin(x);               
        DAC12_0DAT=sina;
     
}

/*************************
      主函数
**************************/
void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;   //管狗
  //InitClk();                //系统时钟初始化
  BCSCTL2 =SELM_0+(~SELS);    //MCLK,SMCLK选DCO,        
  initDAC12_0();              //DAC12初始化
  TB_Init();                  //定时器B初始化
  _EINT();                     //开总中断
  LPM3;
}

此帖出自小平头技术问答
0条回答

一周热门 更多>

相关问题

    相关文章