//串行時序
#include <reg51.h>
sbit ad9850_fq_up =P1^1; //接ad9850的fq_up腳
sbit ad9850_bit_data =P1^2; //接ad9850的D7腳
sbit ad9850_w_clk =P1^3; //接ad9850的w_clk腳
//***************************************************//
// 向ad9850中寫命令(串口) //
//---------------------------------------------------//
void ad9850_wr_com(unsigned char w, double frequence)
{
unsigned char i;
unsigned long int M;
//計算頻率值
frequence=frequence*85.89934592+0.5; //適合50M晶振 f=fclk*M/2^32即M=f*2^32/fclk
M=frequence; //頻率控制字
ad9850_w_clk=0; //初始化
ad9850_fq_up=0;
//寫頻率控制字
for(i=0;i<32;i++) //連續(xù)寫入32位頻率控制字
{
ad9850_w_clk=0;
ad9850_bit_data=(bit)((M>>i)&0x0001);
ad9850_w_clk=1; //上升沿寫入數據
}
//寫相位控制字
for(i=0;i<8;i++) //需要w<=32 相位有180、90、45、22.5、11.25以及它們的組合。
{
ad9850_w_clk=0;
ad9850_bit_data=(bit)(w>>i)&0x01;
ad9850_w_clk=1; //上升沿寫入數據
}
//移入始能
ad9850_fq_up=0;
ad9850_fq_up=1; //上升沿將40位數一次性打入數據寄存器
}
void main()
{
ad9850_wr_com(0,1000000);
while(1);
}
//該芯片使用簡單,新手可能困惑于相位,如無特殊情況相位設置為0即可,如需參考不明白處可留言。