这个程序是我自己写的,已经实验成功通过了.有源晶振是8m.单片机at89s52,单片机晶振是11.0592m
#include<reg52.h>
#include<stdio.h>
sbit out=p1^0; //out为ad9851的d7脚
sbit w_clk=p1^1;
sbit fq_ud=p1^2;
void input(unsigned char in_data);
void dalay_ms(unsigned char k );
void over();
void setup_ad9851();
main()
{
setup_ad9851();//设置串行模式,初始化
dalay_ms(3);//时间延时我随意写的,不是准确的3ms
/*我要的频率控制字为0x00104b80,先送低位再送高位,最后送相位控制,倍频控制为0x01*/
input(0x80); //w0控制字的低位
input(0x4b); //w1
input(0x10); //w2
input(0x00); //w3控制字的高位
input(0x01); //w4相位控制,倍频率开
over();
while(1);
}
void setup_ad9851()
{
w_clk=0;
fq_ud=0;
dalay_ms(3);
w_clk=1;
dalay_ms(3);
w_clk=0;
dalay_ms(3);
fq_ud=1;
dalay_ms(3);
fq_ud=0;
}
void input(unsigned char in_data)
{
unsigned char count;
unsigned char swap,swap_and;
swap=in_data;
count=8;
do{
swap_and=swap&0x01;
if (swap_and==0x01) {
w_clk=0;
dalay_ms(3);
out=1;
dalay_ms(3);
w_clk=1;
dalay_ms(3);
}
if (swap_and==0x00) {
w_clk=0;
dalay_ms(3);
out=0;
dalay_ms(3);
w_clk=1;
dalay_ms(3);
}
swap=swap>>1;
count=count-1;
}while(count!=0);
}
void dalay_ms(unsigned char k )
{ unsigned char i,j;
for(i=0;i<k;i++){ for(j=0;j<200;j++);}
}
void over()
{
fq_ud=1;
dalay_ms(3);
}