⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wo.txt

📁 简介和源程序ad9850得初始化和控制字的写入
💻 TXT
字号:
1.2AD9850的引脚功能
  AD9850是28脚SOP表面封装,体积小,易用于便携仪器。其引脚排列如图1所示,功能如下:
  (1)D0-D7,控制字并行输入端,其中D7可作为串行输入;
  (2)DGND,数字地;
  (3)DVDD,为内部数字电路提供电源;
  (4)WCLK,控制字装入时钟;
  (5)FQUD,频率更新控制;
  (6)CLK,输入时钟;
  (7)AGND,模拟地;
  (8)AVDD,为内部模拟电路提供电源,可与数字电源共用;
  (9)RSET,DAC外接电阻;
  (10)QOUT,QB,内部比较器输出端;
  (11)VINN,VINP,内部比较器输入端;

  
  (12)DACBL,内部DAC外接参考电压端,可空;
  (13)IB,IOUT,DAC输出端;
  (14)RES,复位端。
2.1控制字格式及写入时序
  AD9850包含一个40位输入寄存器,其中低32位为频率控制字,高5位为相位控制字,还有一位电源使能位和两位测试位,具体格式见表1。AD9850的控制字有并行和串行两种写入方式,时序如图2所示。并行装入模式下,WCLK第一个时钟上升沿到来时,装入高8位控制字,依次下去,当第5个WCLK时钟到来时装入低8位控制字,这样,连续5个WCLK时钟即可将40位控制字装入输入寄存器。第5个WCLK时钟后,WCLK时钟将不再起作用,直到FQUD时钟上升沿以来或重新复位。FQUD时钟上升沿将40位控制字写入数据寄存器,AD9850输出新的频率波。对于串行模式,每一个WCLK时钟上升沿,由控制字输入口的第8位(管脚25)移入1位控制位(低位先移入),40个WCLK时钟后,FQUD脉冲的上升沿更新输出频率。值得注意的是两位测试位仅是为了生产测试用,必须是00。



//-----------------------函数声明,变量定义--------------------------------------------------------
#include <reg51.h>
#include <intrins.h>
#include<ABSACC.H>  
//-----------------------定义管脚--------------------------------------------------------
#define  data_OUT P1
sbit FQ_UD=P3^0;          //AD9850信号更新申请 
sbit W_CLK=P3^1;          //写控制字时钟
unsigned char CON_word[5]; 
//Word data[7] data[6] data[5] data[4] data[3] data[2] data[1] data[0]
//W0  Phase b  Phase b3  Phase b2  Phase b1 Phase b0  Power Down  Control     Control
//W1 Freq-b31    Freq-b30 Freq-b29 Freq-b28 Freq-b27 Freq-b26 Freq-b25 Freq-b24
//W2 Freq-b23 Freq-b22 Freq-b21 Freq-b20 Freq-b19 Freq-b18 Freq-b17 Freq-b16
//W3 Freq-b15 Freq-b14 Freq-b13 Freq-b12 Freq-b11 Freq-b10 Freq-b9 Freq-b8
//W4 Freq-b7     Freq-b6     Freq-b5     Freq-b4     Freq-b3     Freq-b2   
//--------------------------------------------------------------------------------------------------
// 函数名称: delay
// 入口参数: N
// 函数功能:延时子程序,实现(16*N+24)us的延时 
// 系统采用11.0592MHz的时钟时,延时满足要求,其它情况需要改动
//--------------------------------------------------------------------------------------------------
  void delay(unsigned  int N)  
  {
  int i; 
  for(i=0;i<N;i++);
  }
//--------------------------------------------------------------------------------------------------
// 函数名称: WRITE_AD9850
// 函数功能: 将控制字写入AD9850
//--------------------------------------------------------------------------------------------------
void WRITE_AD9850(void)
{  
     unsigned char i;
     FQ_UD=0;
     W_CLK=0;
  delay(0);
  CON_word[0]=CON_word[0]&0xFC; //置工作方式选择位为00
     for(i=0;i<5;i++)
     {
     data_OUT=CON_word[i];      //送控制字 
     W_CLK=0;
     delay(0);
     W_CLK=1;                   //上升延
     delay(0);
     }
     FQ_UD=1;               //上升延要求AD9850改变输出
} 
//--------------------------------------------------------------------------------------------------
// 函数名称:main
// 用户主函数
// 函数功能:主函数
//--------------------------------------------------------------------------------------------------
void main()
     {
  FQ_UD=0;
  WRITE_AD9850();
  }


 

//-----------------函数声明、通用变量定义--------------------------------------------------------
#include <reg51.h>
#include <intrins.h>
sbit FQ_UD=P1^0;          //AD9850信号更新申请 
unsigned char CON_word[5]; 
//Word data[7] data[6] data[5] data[4] data[3] data[2] data[1] data[0]
//W0  Phase b  Phase b3  Phase b2  Phase b1 Phase b0  Power Down  Control     Control
//W1 Freq-b31    Freq-b30 Freq-b29 Freq-b28 Freq-b27 Freq-b26 Freq-b25 Freq-b24
//W2 Freq-b23 Freq-b22 Freq-b21 Freq-b20 Freq-b19 Freq-b18 Freq-b17 Freq-b16
//W3 Freq-b15 Freq-b14 Freq-b13 Freq-b12 Freq-b11 Freq-b10 Freq-b9 Freq-b8
//W4 Freq-b7     Freq-b6     Freq-b5     Freq-b4     Freq-b3     Freq-b2     Freq-b1 Freq-b0
//--------------------------------------------------------------------------------------------------
// 函数名称: delay
// 入口参数: N
// 函数功能:延时子程序,实现(16*N+24)us的延时 
// 系统采用11.0592MHz的时钟时,延时满足要求,其它情况需要改动
//--------------------------------------------------------------------------------------------------
  void delay(unsigned  int N)  
  {
  int i; 
  for(i=0;i<N;i++);
  }
//--------------------------------------------------------------------------------------------------
// 函数名称: AD9850_init
// 入口参数: 无
// 函数功能: 初始化设置 设置串口工作方式
//--------------------------------------------------------------------------------------------------
void AD9850_init(void)       //初始化 
     { 
      FQ_UD=0; 
      SCON=0;              //串口工作在方式0;不允许串行口接收数据,先写通讯寄存器  
 } 
//--------------------------------------------------------------------------------------------------
// 函数名称: WRITE_AD9850
// 函数功能: 将控制字写入AD9850
//--------------------------------------------------------------------------------------------------
void WRITE_AD9850(void)
{  
     int i;
     FQ_UD=0;
  delay(0);
  CON_word[0]=CON_word[0]&0xFC;            //置工作方式选择位为00
     for(i=4;i>=0;i--)
     {
     SCON=0;          
     SBUF=CON_word[i];      //送通讯寄存器命令   
     while(TI==0);          //等待发送完成  
     TI=0;                  //TI清"0"
     }
     FQ_UD=1;               //上升延要求AD9850改变输出
} 
//--------------------------------------------------------------------------------------------------
// 函数名称:main
// 用户主函数
// 函数功能:主函数
//--------------------------------------------------------------------------------------------------
void main()
     {
  AD9850_init();
  WRITE_AD9850();
  }


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -