这是我的主函数,想产生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
}
回复 楼主 cuice15 的帖子
149没有I2C接口,所以你的接口是用GPIO模拟的,也就是你的ISR至少得有几十个时钟周期,如果你的正弦表是100个数据的话,这样一个正弦波约需要100*100个时钟周期,剩下的自己算
回复 沙发 sjunbasketball 的帖子
先谢谢你!我是个初学者,用的149的开发板,上面有DA转换模块,芯片是DAC5571。我算了一遍,把程序里的延迟和DAC5571的更新速度都算上,得出32个数据的最大才能产生160HZ的正弦波,应该是我算错了吧?可不可以再帮我想想,再次谢谢!