找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5373|回复: 2
收起左侧

51单片机的AD9851并行驱动程序

[复制链接]
ID:72705 发表于 2015-1-24 14:23 | 显示全部楼层 |阅读模式
程序可以正常运行,大家可以拿去用了,呵呵
#include "reg52.h"
/****************51并行驱动****************/
sbit     clk    =P1^0;
sbit     fq_ud =P1^1;
sbit     rst    =P1^2;
#define     dat    P3
sbit     key1  =P1^4;
sbit     key2  =P1^5;
sbit     key3  =P1^6;
sbit     key4  =P1^7;
unsigned char phase_word=0x00;    //相位控制字,使用低5位
unsigned char power_down=0x00;    //低功耗模式
unsigned char mult=0x01;          //6倍频是否打开
unsigned char ww[5]={0x09,0x0E,0x38,0xE3,0x8E};
unsigned long freq,set_value;
void delay_us(unsigned int i)       //delay     
    {
       while(i--);
    }
//AD9851初始化,在此之前请确认D0,D1和D2的电平状态
void init_dds(void)
{   
     rst=1;     //高电平复位
delay_us(10000);   //延时10mS
rst=0;
delay_us(10000);   //延时10mS
}

//往AD9851写数据
void write_dds(unsigned long dds)
{
unsigned char i;
      
ww[4]=dds&0xFF;              //频率字最低字节
ww[3]=(dds>>8)&0xFF;
ww[2]=(dds>>16)&0xFF;
ww[1]=dds>>24;              //频率字最高字节
     ww[0]= (phase_word<<3)|| power_down<<2 || mult; //控制字

fq_ud=0;                    //FQ_UD置低
clk=0;                      //CLK置低
for(i=0;i<5;i++)            //送入5个字节的控制字
{
   dat=ww[i];
   delay_us(2);
   clk=1;
   delay_us(2);
   clk=0;
   delay_us(2);
}
     fq_ud=1;   //使能信号
delay_us(3);
fq_ud=0;
}
//写入频率
void write_freq(unsigned long freq)
{
unsigned long dds;
if(freq<=1000)                            dds=23.861*freq;   // 23.861             freq<=1K        
if((freq>1000)&&(freq<=10000))            dds=23.8615*freq; //  23.8615         1K<freq<=10K
if((freq>10000)&&(freq<=100000))          dds=23.8616*freq;  //  23.8616        10K<freq<=100K        
if((freq>100000)&&(freq<=35000000))       dds=23.8617*freq; //  23.8617       100K<freq<=35M
if((freq>35000000)&&(freq<=40000000))     dds=23.8619*freq; //  23.8619        35M<freq<=40M
write_dds(dds);
}
main()
{
init_dds();
while(1)
{
if(key1==0) {delay_us(10000);write_freq(0);while(!key3);write_freq(32768);}
if(key2==0) {delay_us(10000);write_freq(0);while(!key4);write_freq(11059200);}
if(key3==0) {delay_us(10000);write_freq(0);while(!key2);write_freq(40000000);}
if(key4==0) {delay_us(10000);write_freq(0);while(!key1);write_freq(45000000);}
};
}


回复

使用道具 举报

ID:807238 发表于 2020-8-15 17:25 | 显示全部楼层
请问,电路图该怎么连接呀?
回复

使用道具 举报

ID:1037535 发表于 2022-7-13 14:34 | 显示全部楼层
除了 p1.0到p1.2三个口,是不是还要占用7个I/O口?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表