以上用的芯片是ad9850有源晶体是125mhz 但是电路通用于ad9851,以下是它的简易测试程序(测试时用的是串行通讯,图中画的是并行),通过测试,使用ad9851时控制字与置频率字略有差异,用频率计测量输出很准,示波器观测波形很干净。
#include <at892051.h>
#include <intrins.h>
sbit dds_data = p1^0;
sbit dds_wclk = p1^1;
sbit dds_fqud = p1^2; //dds线位地址
unsigned long freq_word = ;//频率控制字
void dds_set_freq ()
{
unsigned char byte_temp;
_nop_(); _nop_(); _nop_(); _nop_();
dds_fqud = 0;
_nop_(); _nop_(); _nop_(); _nop_();
dds_wclk = 0;
_nop_(); _nop_(); _nop_(); _nop_();
for ( byte_temp = 0; byte_temp < 32; byte_temp++ )
{
freq_word = freq_word >> 1; dds_data = cy;
dds_wclk = 1;
_nop_(); _nop_(); _nop_(); _nop_(); //实际应用应在延迟
dds_wclk = 0;
}
for ( byte_temp = 0; byte_temp < 8; byte_temp++ )
{
dds_data = 0;
dds_wclk = 1;
_nop_(); _nop_(); _nop_(); _nop_();
dds_wclk = 0;
}
dds_fqud = 1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
dds_fqud = 0;
}
void main( void )
{
dds_set_freq();
while(1);
}