[求助] MSP430F169用DAC12产生正弦波问题

地瓜ing   2014-5-10 23:28 楼主
做课程设计,刚刚接触430,好多地方不熟,请教大神。下面是我用169写的一个DAC12产生正弦波的程序,下面的程序基本上能够产生一个正弦波,但是如果我打开XT2,就完全不能产生波形,但如果MCLK和SMCLK用DCO就不会出现问题,最起码能够产生波形,TB0用得是ACLK,是不是我哪里写错了,都两天了,实在是找不出原因,求大神指教 #include #include 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; } 本帖最后由 地瓜ing 于 2014-5-10 23:31 编辑

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复