[求助] msp430F149 用DA转换模块输出正弦波,为什么频率上不去,附有程序,求大神指教

cuice15   2012-12-19 19:28 楼主
这是我的主函数,想产生1000HZ的正弦波,为什么频率调不上去,求指教
void main(void)
  {
      
    WDTCTL=WDTPW+WDTHOLD;// 禁止看门狗定时器
  // 设置系统时钟,使用外接晶振 :8MHz,使单片机的时钟源设为 XT2//
   BCSCTL1 &=~XT2OFF;//首先打开外部晶体振荡器。也就是XT2OFF清零。
  do
  { IFG1 &=~OFIFG;//清除晶体振荡器失效标志OFIFG
  for(i=0xFF;i>0;i--);  //等待50us等待晶体振荡器正常工作
  }
  while((IFG1 & OFIFG)!=0);//等OFIFG等于0的时候结束,说明晶体振荡器正常工作了
   BCSCTL2=SELM_2+SELS;                 //选择MCLK、SMCLK为XT2
  //初始化端口//
     P6DIR |= BIT2;P6OUT |= BIT2;  //关闭电平转换
   
    Set_IO();                   //设置IIC端口
   P1DIR|=BIT0+BIT1;
  //设置Timer_a//
  TACTL =TASSEL1+TACLR;// 选择SMLK为时钟,定时器清除
  //TACTL |=TASSEL1+TACLR;// 选择SMLK为时钟,定时器清除
  CCTL0=CCIE;
  TACCR0=32;
  _EINT(); //中断允许
  TACTL |=MC0;//选择up,16位模式
   }
     //Timer_A中断服务子程序
     #pragma vector=TIMERA0_VECTOR
     __interrupt void Timer_A(void)
{
         
          SampleTimes=(SampleTimes+1)%100;
          DAC_Val=SinTable[SampleTimes];     

          Write_DAC(DAC_Val);            //写入DAC   
           

}

回复评论 (2)

回复 楼主 cuice15 的帖子

149没有I2C接口,所以你的接口是用GPIO模拟的,也就是你的ISR至少得有几十个时钟周期,如果你的正弦表是100个数据的话,这样一个正弦波约需要100*100个时钟周期,剩下的自己算
点赞  2012-12-19 21:51

回复 沙发 sjunbasketball 的帖子

先谢谢你!我是个初学者,用的149的开发板,上面有DA转换模块,芯片是DAC5571。我算了一遍,把程序里的延迟和DAC5571的更新速度都算上,得出32个数据的最大才能产生160HZ的正弦波,应该是我算错了吧?可不可以再帮我想想,再次谢谢!
点赞  2012-12-21 09:13
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复