hustestwolf 发表于 2011-7-6 15:07:09

请高手帮忙看下这个电路

我是用AD9834做个信号发生器,13 14 15脚分别接MCU的P3.0 P3.1 P3.3,其他相应的功能引脚用控制寄存器控制。电路图和程序如下:
http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_655130QIT8TY.jpg
(原文件名:改进后的电路.jpg)

#include<reg52.h>
   
   
sbit FSYNC = P3^3;   
sbit SDATA = P3^0 ;
sbit SCLK= P3^1;


   
                  
#define uchar unsigned char   
#define uintunsigned int   
#define ulong unsigned long   
   

void Send_Con(uint Con_word);   
void Send_Freq(uint Freq_word);
void delay(uint delay_word);



void main()
{

ulong data1,data2;   
uint LSB_D,MSB_D;          

   
SCLK=1;   
FSYNC=1;   

data1=0x12F7;   
data2=data1;   
   
LSB_D=(data1%0x4000)+0x4000;      
MSB_D=(data2/0x4000)+0x4000;

Send_Con(0x2100);
delay(9);
Send_Freq(LSB_D);   
Send_Freq(MSB_D);
Send_Con(0x2000);
delay(9);
}   
   
void Send_Con(uint Con_word)   
{   
uchar i;   
FSYNC=0;                        //低电平使数据有效   
for(i=0;i<16;i++)                //传输16位控制字   
{   
if(Con_word&0x8000)
SDATA=1;
else SDATA=0;
SCLK=0;
delay(5);
SCLK=1;         
Con_word=Con_word<<1;               //控制字左移一位,准备下一次                                 //产生下降沿,传输SDATA            
}   
FSYNC=1;
                     //高电平,无效   
}   

/*****************************************************
发送频率字
*****************************************************/   


void Send_Freq(uint Freq_word)   
{   
uchar i;   
FSYNC=0;                        //低电平使数据有效   
for(i=0;i<16;i++)                //传输16位频率字   
{   
if(Freq_word&0x8000)
SDATA=1;
else SDATA=0;          //最高位不变,最高位赋给SDATA   
                  //控制字左移一位,准备下一次   
SCLK=0;
delay(5);                         //产生下降沿,传输SDATA   
SCLK=1;
Freq_word=Freq_word<<1;
}   
FSYNC=1;

                     //高电平,无效   
}

void delay(uint delay_word)
{
uchar i;
for(i=0;i<delay_word;i++)
;
}

结果就是出不了波形,求高手指导!

hustestwolf 发表于 2011-7-6 15:44:32

补充一下,我用的单片机是SST89E58RDA
页: [1]
查看完整版本: 请高手帮忙看下这个电路