f=value_Freq*34.359738368;<br />昨这样算呢!误差好大的。<br />参考一下我的程序!<br />计算结果正确,就费点时间!<br /> //phase(内部寄存器w)=fout * 2^32 / system clock<br /> //****************calculation W<br /> unsigned long tmp1,tmp2,tmp3,dat_dds;<br /> unsigned char w0_ser,w1_ser,w2_ser,w3_ser,w4_ser;<br /> tmp1=120000000; //输入晶振<br /> tmp2=dat_fre1; //输入频率<br /> tmp3=0; //calculation result<br /> for (i=0;i<32;i++)<br /> {<br /> if(tmp2>tmp1)<br /> {<br /> tmp3=tmp3+1;<br /> tmp3=tmp3+tmp3;<br /> tmp2=tmp2-tmp1;<br /> tmp2=tmp2+tmp2;<br /> }<br /> else<br /> {<br /> tmp3=tmp3+tmp3;<br /> tmp2=tmp2+tmp2;<br /> }<br /> }<br /> dat_dds=tmp3; //RESULT IN tmp3<br /> //*************************<br /> w3_ser=dat_dds>>24;<br /> w2_ser=dat_dds>>16;<br /> w1_ser=dat_dds>>8;<br /> w0_ser=dat_dds;<br /> w4_ser=0x04; //refclk*6
|