ad9854单片机程序详细说明(ad9854结构框图及电路).doc

上传人:白大夫 文档编号:3245652 上传时间:2019-08-05 格式:DOC 页数:12 大小:49KB
返回 下载 相关 举报
ad9854单片机程序详细说明(ad9854结构框图及电路).doc_第1页
第1页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《ad9854单片机程序详细说明(ad9854结构框图及电路).doc》由会员分享,可在线阅读,更多相关《ad9854单片机程序详细说明(ad9854结构框图及电路).doc(12页珍藏版)》请在三一文库上搜索。

1、ad9854单片机程序详细说明(ad9854结构框图及电路)ad9854结构框图如图4-2所示,AD9854内部包括一个具有48位相位累加器、一个可编程时钟倍频器、一个反sinc滤波器、两个12位300MHzDAC,一个高速模拟比较器以及接口逻辑电路。其主要性能特点如下:1.高达300MHz的系统时钟;2.能输出一般调制信号,FSK,BPSK,PSK,CHIRP,AM等:3.100MHz时具有80dB的信噪比:4.内部有4*到20*的可编程时钟倍频器:5.两个48位频率控制字寄存器,能够实现很高的频率分辨率。6.两个14位相位偏置寄存器,提供初始相位设置。7.带有100MHz的8位并行数据传输

2、口或10MHz的串行数据传输口。两款ad9854应用电路电路一:下面给出一种用AD9854开发高精度频率信号发生器的简易方法,开发者只需要熟悉MCS-51单片机编程即可。该系统具有开发周期短,开发成本低的特点,也可以作为探索AD9854功能的一种方法,它的电路原理图见图2。系统主要由DDS芯片AD9854、单片机AT89C51、看门狗定时器X25045和LED显示驱动芯片MAX7219组成。在这个系统中提供了8位七段LED显示器,其中前五位为输出频率值,显示范围为00.00099.999MHz,后三位为幅度显示位,显示范围为0999,表示幅值从零幅度到满幅度的变化。电路二:正交信号源选择了DD

3、S芯片AD9854,具体实现电路见下图。对AD9854进行编程控制,使之输出两路幅度相同并且正交的信号,然后对输出信号进行滤波,使得正弦波变得更加平滑,滤波之后再把输出峰值为512mV的信号放大2倍到1.24V。ad9854单片机程序/=/ AD9854 驱动程序设计/AD9854.c/说明:10MHZ 有源晶振/=#include reg52.h#include lcd1602.h#include intrins.hsfr P4 = 0xC0; /1111,1111 端口4sbit KEY1 = P3;sbit KEY2 = P3;sbit KEY3 = P3;sbit KEY4 = P3;

4、unsigned char FreqWord6; /6个字节频率控制字/*CLK_Set为时钟倍频设置,可设置420倍倍频,但最大不能超过300MHZFreq_mult_unsigned long和Freq_mult_doulle均为2的48次方除以系统时钟,一个为长整形,一个为双精度型*/#define CLK_Set 20const unsigned long Freq_mult_ulong = 1407375;const double Freq_mult_doulle = 1407374.88355328;/*修改硬件时要修改的部分*#define AD9854_DataBus P2#d

5、efine AD9854_AdrBus P0sbit AD9854_RST = P3; /AD9854复位端口sbit AD9854_UDCLK = P3; /AD9854更新时钟sbit AD9854_WR = P4; /AD9854写使能,低有效sbit AD9854_RD = P4; /AD9854读使能,低有效sbit AD9854_FDATA = P4; /AD9854 FSK,PSK控制sbit AD9854_OSK = P4; /AD9854 OSK控制端unsigned char flag = 1;unsigned int fc = 1000;unsigned long LFe

6、rq = 750;unsigned long HFerq = 1250;void AD9854_WR_Byte(unsigned char addr,unsigned char dat);void AD9854_Init(void);void Freq_convert(long Freq);void AD9854_InitFSK(void);void AD9854_SetFSK(unsigned long Freq1,unsigned long Freq2);/void delay (unsigned int us);void UpDisplay()unsigned char disbuf5;

7、LCD_Write_String(0, 0, “BaseFerq M”);LCD_Write_String(0, 1, “Now Ferq M”);disbuf0 = fc / 1000 + 0;disbuf1 = 。;disbuf2 = fc % 1000 / 100 + 0;disbuf3 = fc % 100 / 10 + 0;disbuf4 = fc % 10 + 0;disbuf5 = 0;LCD_Write_String(9, 0, disbuf);disbuf0 = HFerq / 1000 + 0;disbuf1 = 。;disbuf2 = HFerq % 1000 / 100

8、 + 0;disbuf3 = HFerq % 100 / 10 + 0;disbuf4 = HFerq % 10 + 0;disbuf5 = 0;LCD_Write_String(9, 1, disbuf);void DownDisplay()unsigned char disbuf5;LCD_Write_String(0, 0, “BaseFerq M”);LCD_Write_String(0, 1, “Now Ferq M”);disbuf0 = fc / 1000 + 0;disbuf1 = 。;disbuf2 = fc % 1000 / 100 + 0;disbuf3 = fc % 1

9、00 / 10 + 0;disbuf4 = fc % 10 + 0;disbuf5 = 0;LCD_Write_String(9, 0, disbuf);disbuf0 = LFerq / 1000 + 0;disbuf1 = 。;disbuf2 = LFerq % 1000 / 100 + 0;disbuf3 = LFerq % 100 / 10 + 0;disbuf4 = LFerq % 10 + 0;disbuf5 = 0;LCD_Write_String(9, 1, disbuf);void AD9854_SetSine(unsigned long Freq,unsigned int

10、Shape)unsigned char count;unsigned char Adress;Adress = 0x04; /选择频率控制字地址的初值Freq_convert(Freq); /频率转换for(count=6;count0;) /写入6字节的频率控制字AD9854_WR_Byte(Adress+,FreqWord-count);AD9854_WR_Byte(0x21,Shape8); /设置I通道幅度AD9854_WR_Byte(0x22,(unsigned char)(ShapeAD9854_WR_Byte(0x23,Shape8); /设置Q通道幅度AD9854_WR_Byt

11、e(0x24,(unsigned char)(ShapeAD9854_UDCLK=1; /更新AD9854输出AD9854_UDCLK=0;void main()LCD_Init();LCD_Clear();/*LCD_Write_String(0,0,“BaseFerq 0.875 M”);LCD_Write_String(0,1,“Now Ferq 1.125 M”);*/UpDisplay();AD9854_Init();AD9854_SetSine(HFerq * 1000,4000);/ AD9854_SetSine(1000000,4000);/ while(1);/ AD9854

12、_InitFSK();/ AD9854_SetFSK(HFerq * 1000, LFerq * 1000);/ AD9854_SetFSK(1000000,1000000);/ AD9854_FDATA = 1;/ while(1);while(1)if(!KEY1)if (flag = 1)AD9854_SetSine(0,0);/AD9854_InitFSK();flag = 0;else/ AD9854_InitFSK();/ AD9854_SetFSK(HFerq * 1000, LFerq * 1000);AD9854_SetSine(HFerq * 1000,4000);flag

13、 = 1;while (!KEY1);if (flag = 1)if (!KEY2)AD9854_SetSine(0,0);fc += 100;if (fc = 7900) fc = 7800;LFerq = fc * 3 / 4;HFerq = fc * 5 / 4;UpDisplay();AD9854_SetSine(HFerq * 1000,4000);/ AD9854_InitFSK();/ AD9854_SetFSK(HFerq * 1000, LFerq * 1000);while (!KEY2);if (!KEY3)AD9854_SetSine(0,0);fc -= 100;if

14、 (fc = 300) fc = 400;LFerq = fc * 3 / 4;HFerq = fc * 5 / 4;UpDisplay();AD9854_SetSine(HFerq * 1000,4000);/ AD9854_InitFSK();/ AD9854_SetFSK(HFerq * 1000, LFerq * 1000);while (!KEY3);if (!KEY4)/AD9854_FDATA = 1;AD9854_SetSine(LFerq * 1000,4000);DownDisplay();while (!KEY4);AD9854_SetSine(HFerq * 1000,

15、4000);/AD9854_FDATA = 0;UpDisplay();/=/函数名称:void AD9854_WR_Byte(unsigned char addr,unsigned char dat)/函数功能:AD9854并行口写入数据/入口参数:addr 6位地址/ dat 写入的数据/出口参数:无/=void AD9854_WR_Byte(unsigned char addr,unsigned char dat)AD9854_AdrBus = (addrAD9854_DataBus = dat;AD9854_WR = 0;AD9854_WR = 1;/=/函数名称:void AD985

16、4_Init(void)/函数功能:AD9854初始化/入口参数:无/出口参数:无/=void AD9854_Init(void)AD9854_WR=1;/将读、写控制端口设为无效AD9854_RD=1;AD9854_UDCLK=0;AD9854_RST=1; /复位AD9854AD9854_RST=0;AD9854_WR_Byte(0x1d,0x10); /关闭比较器AD9854_WR_Byte(0x1e,CLK_Set); /设置系统时钟倍频AD9854_WR_Byte(0x1f,0x00); /设置系统为模式0,由外部更新AD9854_WR_Byte(0x20,0x60); /设置为可调

17、节幅度,取消插值补偿AD9854_UDCLK=1; /更新AD9854输出AD9854_UDCLK=0;/=/函数名称:void Freq_convert(long Freq)/函数功能:正弦信号频率数据转换/入口参数:Freq 需要转换的频率,取值从0SYSCLK/2/出口参数:无 但是影响全局变量FreqWord6的值/说明: 该算法位多字节相乘算法,有公式FTW = (Desired Output Frequency 2N)/SYSCLK/ 得到该算法,其中N=48,Desired Output Frequency 为所需要的频率,即Freq,SYSCLK/ 为可编程的系统时钟,FTW为

18、48Bit的频率控制字,即FreqWord6/=void Freq_convert(long Freq)unsigned long FreqBuf;unsigned long Temp=Freq_mult_ulong;unsigned char Array_Freq4; /将输入频率因子分为四个字节Array_Freq0=(unsigned char)Freq;Array_Freq1=(unsigned char)(Freq8);Array_Freq2=(unsigned char)(Freq16);Array_Freq3=(unsigned char)(Freq24);FreqBuf=Tem

19、p*Array_Freq0;FreqWord0=FreqBuf;FreqBuf=8;FreqBuf+=(Temp*Array_Freq1);FreqWord1=FreqBuf;FreqBuf=8;FreqBuf+=(Temp*Array_Freq2);FreqWord2=FreqBuf;FreqBuf=8;FreqBuf+=(Temp*Array_Freq3);FreqWord3=FreqBuf;FreqBuf=8;FreqWord4=FreqBuf;FreqWord5=FreqBuf8;/=/函数名称:void AD9854_InitFSK(void)/函数功能:AD9854的FSK初始化/

20、入口参数:无/出口参数:无/=void AD9854_InitFSK(void)AD9854_WR=1; /将读、写控制端口设为无效AD9854_RD=1;AD9854_UDCLK=0;AD9854_RST=1; /复位AD9854AD9854_RST=0;AD9854_WR_Byte(0x1d,0x10); /关闭比较器AD9854_WR_Byte(0x1e,CLK_Set); /设置系统时钟倍频AD9854_WR_Byte(0x1f,0x02); /设置系统为模式1,由外部更新AD9854_WR_Byte(0x20,0x60); /设置为可调节幅度,取消插值补偿AD9854_UDCLK=1

21、; /更新AD9854输出AD9854_UDCLK=0;/=/函数名称:void AD9854_SetFSK(unsigned long Freq1,unsigned long Freq2)/函数功能:AD9854的FSK设置/入口参数:Freq1 FSK频率1/ Freq2 FSK频率2/出口参数:无/=void AD9854_SetFSK(unsigned long Freq1,unsigned long Freq2)unsigned char count=6;unsigned char Adress1,Adress2;const unsigned int Shape=4000; /幅度设置。 为12 Bit,取值范围为(04095)Adress1=0x04; /选择频率控制字1地址的初值Adress2=0x0a; /选择频率控制字2地址的初值

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1