1、特征180 MHz 时钟速率参考时钟具有 6 倍倍乘器。芯片具有高性能 10 位 DAC 和高速滞后比较器无杂散动态范围 SFDR 为 43 分贝 70 MHz 的模拟输出。32 位频率控制字简化控制接口:并行或串行异步加载格式5 位相位调制和补偿能力比较器纹波抖动/头文件/定义 AD9851 与 98C51 的接口sbit W_CLK = P30;sbit FQ_UD = P31;sbit RESET = P32;/*频率算法公式*/*f 是输出的频率*/*32 位控制字为:Fm (f*0xFFFFFFFF)/内部时钟 */unsigned long int Fm=0x0003a411; /
2、实验时候自己设了 1KHz 结果很精确。外时钟用信号了生器 3MHz!unsigned char data tab=0x01,0x00,0x00,0x00,0x00;/(W0)(W4 W3 W2 W1)高低)注意顺序!/延时程序void delay(unsigned int i)while(i-);/ 分 32 位数据分解为 4 个字节存于 tab数组的后四个单元,tab0为相位和频率的设置单元void chang(unsigned long int t)unsigned char *i;i=tab1=(char)*i;tab2=(char)*(i+1);tab3=(char)*(i+2);t
3、ab4=(char)*(i+3); /*主程序*/void main(void) unsigned char i;FQ_UD=0;delay(1);W_CLK=0;delay(1); RESET=1;delay(1); /上电先复位一次RESET=0;delay(1);chang(Fm); /分离四字节程序for(i=0;i5;i+) /*写 AD8951*5 个字节* W_CLK=0;delay(1);P1=tab;W_CLK=1;FQ_UD=1;delay(1);/输出FQ_UD=0;delay(1); while(1); 凌阳单片机 AD9851 的驱动程序 /=/ Copyright
4、(C), 2006, HUST./ -Filename: AD9851.c/ -Description: AD9851 驱动/ -History: 06/8/29 V1.0 Edit By L.F./=#include “SPCE061A.h“/变量说明unsigned long int Freq_Ctrl_Word = 0x051eb851; /频率控制字 先传低位再传高位unsigned int Phase_Ctrl_Word = 0x0000; /相位控制字 先传低位再传高位unsigned int Order_Ctrl_Word = 0x0000;/b32:0 6 倍频关闭 b33b3
5、4:00 电源工作模式/定义 AD9851 与 SPCE061A 的接口#define M_DATA 0x0001#define M_UD 0x0002#define M_CLK 0x0004#define Set_IOA_Bit(x) (*P_IOA_Data = *P_IOA_Buffer | x) /置高#define Clear_IOA_Bit(x) (*P_IOA_Data = *P_IOA_Buffer *P_IOA_Attrib |= (M_DATA + M_UD + M_CLK);*P_IOA_Data /=/ -Function: void Write_AD9851(void
6、)/ -Description: 向 AD9851 写入频率控制字,命令控制字和相位控制字 / -Parameters: 无/ -Return: 无/ -Notes: 无/=void Write_AD9851(void)unsigned long int mask = 0x0001;unsigned int i;Clear_IOA_Bit(M_UD); /M_UD 置低/送 32 位频率控制字for(i = 0;i 32;i+)Clear_IOA_Bit(M_CLK); /M_CLK 置低if(Freq_Ctrl_Word else Clear_IOA_Bit(M_DATA);Set_IOA_
7、Bit(M_CLK);mask = mask 1;/送 3 位的命令控制字mask = 0x0001;for(i = 0;i 3;i+)Clear_IOA_Bit(M_CLK); /M_CLK 置低if(Order_Ctrl_Word else Clear_IOA_Bit(M_DATA);Set_IOA_Bit(M_CLK);mask = mask 1;/送 5 位相位控制字mask = 0x0001;for(i = 0;i 5;i+)Clear_IOA_Bit(M_CLK); /M_CLK 置低if(Phase_Ctrl_Word else Clear_IOA_Bit(M_DATA);Set_IOA_Bit(M_CLK);mask = mask 1;Set_IOA_Bit(M_UD); /M_UD 置高 ,产生上升沿 ,频率更新使能,输出有效/= /=