打印

AD9852求助!DDS出不来东西 请各位前辈 帮我看看

[复制链接]
948|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
215860540o|  楼主 | 2012-3-20 13:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
硬件 应该没什么错误,就是软件有点问题
  关键是串口控制寄存器的设置,我觉得模棱两可
请各位 前辈指点下!
想实现的功能  就是2线串口  在单音 模式下  输出一个单频率点  就行!
#include<reg52.h>
#include<intrins.h>  //包含右移
#include<math.h>
sbit UPDCLK = P2^6;  //20 更新时钟,上升沿锁存数据到编程寄存器
sbit MRESET = P3^0;  //71 主复位端,高电平有效复位
      
sbit IORESET  = P2^3;

void WriteData(unsigned char DataByte);    //写字节数据
void WriteADDR(unsigned char DATAAddress); //写寄存器地址
//*********************************
void main()
{
   MRESET=1;
   MRESET=1;  //复位  高电平持续时间长点
   MRESET=1;
    MRESET=1;
   MRESET=1;  //复位  高电平持续时间长点
   MRESET=1 ;
    MRESET=1;
   MRESET=1;  //复位  高电平持续时间长点
   MRESET=1;
   MRESET=0;
   SCON=0;         //方式0  串口 同步传输   TXD做移位脉冲 和  AD9852的SCLK相连 RXD传输数据与AD9852的

   IORESET=1;
   IORESET=1;
   IORESET=0;
   WriteADDR(0x08);    //I幅度字高字节地址
   WriteData(0xff);    //幅度字高字节
   WriteData(0xff);  
      
   IORESET=1;
   IORESET=1;
   IORESET=0;
   WriteADDR(0x09);    //q幅度字高字节地址
   WriteData(0xFF);    //幅度字高字节
   WriteData(0xFF);
   IORESET=1;
   IORESET=1;
   IORESET=0;
   WriteADDR(0x07);    //控制寄存器 地址
   WriteData(0x00);    // 4个字节的控制
   WriteData(0x04);     // 旁路倍频     外看面61脚
   WriteData(0x00);    //   外部UPDCLK控制
   WriteData(0x60);     //关反辛格滤波器
    UPDCLK=1;
UPDCLK=1;
UPDCLK=0;
//*********************************    以上初始化完成  下面输入频率字
   IORESET=1;
   IORESET=1;
   IORESET=0;  
   WriteADDR(0x02);   //数据频率控制字   50M输出,300M的系统时钟
   WriteData(0xAB);
   WriteData(0xAA);
   WriteData(0xAA);
   WriteData(0xAA);
   WriteData(0xAA);
   WriteData(0x2A);
   UPDCLK=1;
   UPDCLK=1;
   UPDCLK=0;
}
//***写入数据
void WriteData(unsigned char DataByte)
{
   unsigned char bdata x,y;
   x =DataByte;
  y =0;
   if(x&0x01)        //数据格式旋转180
      y=y|0x80;      //由D7 D6 D5 D4 D3 D2 D1 D0
   if(x&0x02)        //  D0 D1 D2 D3 D4 D5 D6 D7
      y=y|0x40;
  if(x&0x04)
     y=y|0x20;
   if(x&0x08)
     y=y|0x10;
   if(x&0x10)
     y=y|0x08;
  if(x&0x20)
      y=y|0x04;
  if(x&0x40)
     y=y|0x02;
  if(x&0x80)
     y=y|0x01;
  SBUF=y;
     //SBUF=x;
   TI=0;
   
}
//*********************************
//***写入地址
void WriteADDR(unsigned char DATAAddress)
{
   unsigned char bdata x,y;
   x =DATAAddress;
   y =0;
   if(x&0x01)        //数据格式旋转180
     y=y|0x80;      //由D7 D6 D5 D4 D3 D2 D1 D0
  if(x&0x02)        //  D0 D1 D2 D3 D4 D5 D6 D7
      y=y|0x40;
  if(x&0x04)
      y=y|0x20;
   if(x&0x08)
      y=y|0x10;
   if(x&0x10)
      y=y|0x08;
if(x&0x20)
     y=y|0x04;
  if(x&0x40)
      y=y|0x02;
if(x&0x80)
      y=y|0x01;
     SBUF=y;
      //因为串口输出的数据是D0在前的  与一般相反   所以颠倒
   TI=0;      //当传输一个字节时,串口会自动置位,会造成无法移位 输入下一个字节    所以清零
  
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

8

帖子

0

粉丝