51单片机控制DDS芯片AD9851的源程序

来源:本站
导读:目前正在解读《51单片机控制DDS芯片AD9851的源程序》的相关信息,《51单片机控制DDS芯片AD9851的源程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51单片机控制DDS芯片AD9851的源程序》的详细说明。
简介:51单片机控制DDS芯片AD9851的源程序,仅供参考

;==================定义单片机与DDS芯片的连接========

DDS_DATA BIT P0.0

DDS_WCLK BIT P0.1

DDS_FQUD BIT P0.2

;===================================================

;==================定义DDS控制数据的存放地址========

DDS_DATA0 DATA 40H

DDS_DATA1 DATA 41H

DDS_DATA2 DATA 42H

DDS_DATA3 DATA 43H

DDS_DATA4 DATA 44H

;===================================================

;==============送数据到DDS芯片(串行控制方式)==========

SEND_DDS_DATA: MOV R1,#DDS_DATA4 ;从W4的最低位开始送出数据

;一直到W0的最低位结束

MOV R0,#05H ;设总共要送出的字节为5X8

CLR DDS_FQUD ;置低

LOOP_SEND_W: MOV A,@R1 ;把数据由缓冲区送给A准备输出

CLR C ;清零

SEND_1_BIT: MOV R2,#08H ;循环8次,每次送出一个字节

LOOP_SEND: CLR DDS_WCLK

RRC A ;左移

MOV DDS_DATA,C ;送出一位数据到DDS

NOP

SETB DDS_WCLK

NOP

DJNZ R2,LOOP_SEND ;判断是否送完这一位的8个字节

DEC R1

DJNZ R0,LOOP_SEND_W ;判断是否送完5位

SETB DDS_FQUD

NOP

CLR DDS_FQUD

RET

;==================送数据到DDS芯片子程序结束=========

当然单单给9851送数很简单,我们同样可以由键盘给定十进制的频率来控制输出

单片机用总线接口方案:

MOVX @DPTR,W0

MOVX @DPTR,W1

MOVX @DPTR,W2

MOVX @DPTR,W3

MOVX @DPTR,W4

SETB FQ_UD

CLR FQ_UD

其中W0高5bit为相位控制字,低3bit为功能控制,建议一般测试用0或1既可。

其中W1~W4为频率控制字,不要为0,也不要太大。比如测试可以发4byte的“2”。

sbit FQ_UD = P1^0;

unsigned char xdata *pByte0;

unsigned char xdata *pByte1;

unsigned char xdata *pByte2;

unsigned char xdata *pByte3;

unsigned char xdata *pByte4;

void wr5byte(unsigned char d0,d1,d2,d3,d4)

{

*pByte0 = d0;

*pByte1 = d1;

*pByte2 = d2;

*pByte3 = d3;

*pByte4 = d4;

FQ_UD = 1;

FQ_UD = 0;

}

main()

{

pByte0 = 0xf0ff;

pByte1 = 0xf0ff;

pByte2 = 0xf0ff;

pByte3 = 0xf0ff;

pByte4 = 0xf0ff;

RESET = 1;

RESET = 0;

wr5byte(1,1,1,1,1);

// wr5byte(0,1,1,1,1);

while(1);

}

//DDS测试程序

#include <reg51.h>//头文件

//定义AD9851与98C51的接口

sbit W_CLK = P3^0;

sbit FQ_UD = P3^1;

sbit RESET = P3^2;

/***频率算法公式*****/

/****f是输出的频率****//*******32位控制字为:Fm =(f*0xFFFFFFFF)/内部时钟 *******/

unsigned long int Fm=0x0003a411; //实验时候自己设了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[]数组的后四个单元,tab[0]为相位和频率的设置单元

void chang(unsigned long int t)

{

unsigned char *i;

i=&t;

tab[1]=(char)*i;

tab[2]=(char)*(i+1);

tab[3]=(char)*(i+2);

tab[4]=(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;i<5;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);

}

注意:用并行接口方式!!!

提醒:《51单片机控制DDS芯片AD9851的源程序》最后刷新时间 2024-03-14 01:10:13,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机控制DDS芯片AD9851的源程序》该内容的真实性请自行鉴别。