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

📄 ad9851驱动程序.txt

📁 基于ATMEGA16和DDS的信号发生器的代码
💻 TXT
字号:
/**************************************************
作者:陈晓涛
名称:AD9851串行控制程序
说明:AD9851在复位时默认的状态为并行输入状态,在该
      状态下先用一个W_CLK时钟将“XXXXX011”写入W0中
      (通常在硬电路中将D2-D0接成011),并用一FQ_UD
      时钟将40位的控制字并入AD9851的内核,这样便完
      成了从并行转到串行的工作模式下,但须注意的是
      紧接着便须将有奖的控制字输入到AD9851的内核,以
      防其进入无效的工作状态
**************************************************/
#include<iom16.h>
#include<intrinsics.h>
#define uchar unsigned char


#define DDS_CON_DDR  DDRD
#define DDS_CON_DIR 0X8D
#define DDS_DATA_DDR DDRC
#define DDS_DATA_DIR 0X80
#define DDS_CON_PORT PORTD
#define DDS_DATA_PORT PORTC
#define DDS_CON_PIN  PIND
#define SET_DDS_REST DDS_CON_PORT|=(1<<7)  //RESET 接到PD7
#define CLR_DDS_REST DDS_CON_PORT&=~(1<<7)
#define SET_DDS_WCLK DDS_CON_PORT|=(1<<3)  //WCLK 接到PD3
#define CLR_DDS_WCLK DDS_CON_PORT&=~(1<<3) 
#define SET_DDS_FQUD DDS_CON_PORT|=(1<<2)  //FQUD 接到PD2
#define CLR_DDS_FQUD DDS_CON_PORT&=~(1<<2)
#define DDS_DATA_BIT PORTC_Bit7            //位操作


uchar a[]={0x55,0x55,0x93,0x78,0x00};
uchar b[5]={0xf0,0x22,0x35,0x33,0x00};
void set_dds_to_serial(void);
void write_word(uchar *s);

void set_dds_to_serial(void)
{
DDS_CON_DDR |= DDS_CON_DIR;    //设置控制端口的方向
DDS_CON_PORT &= ~DDS_CON_DIR;  //各端口初始化为0
DDS_DATA_DDR |= DDS_DATA_DIR;  //设置数据端口的方向
DDS_DATA_PORT &= ~DDS_DATA_DIR;//数据口初始化为0
SET_DDS_REST;                  //复位 
delay_nus(5);                  //复位时间为5US
CLR_DDS_REST;                  //复位完毕
SET_DDS_WCLK;                  //将硬件电路设置的XXXXX011写入W0中
delay_nus(2);
CLR_DDS_WCLK;
SET_DDS_FQUD;                  //将控制字送入内核
CLR_DDS_FQUD;

write_word(a);                 //调用write_word()用串行方式写入数组a中的值,应该得到与输入时钟相同频率的波形

}

void write_word(uchar *s)
{
uchar i,j;
uchar k,l;
for(i=0;i<5;i++)              //40位的控制字保存在5个字节中
  {
   k=s[i];
   for(j=0;j<8;j++)
      {
       l=k>>j;
       l=l&0x01;
       CLR_DDS_WCLK;
       DDS_DATA_BIT=l;
       SET_DDS_WCLK;
       
      }
  }
SET_DDS_FQUD;
CLR_DDS_FQUD;
}



void main()
{
 
set_dds_to_serial();
b[0]=0x55;
b[1]=0x44;
b[2]=0x33;
b[3]=0x22;
b[4]=0x00;
write_word(b);
while(1);
}

⌨️ 快捷键说明

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