| 
 
| 硬件 应该没什么错误,就是软件有点问题 关键是串口控制寄存器的设置,我觉得模棱两可
 请各位 前辈指点下!
 想实现的功能  就是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;      //当传输一个字节时,串口会自动置位,会造成无法移位 输入下一个字节    所以清零
 
 }
 | 
 |