打印

AD9850串行程序,错误在哪里????

[复制链接]
3536|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lfflsh|  楼主 | 2007-8-2 09:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int
bdata uchar BCC;
bdata uchar BC;
sbit  buf=BCC^0;
sbit RESET=P1^0;     /*整体复位*/
sbit DAT=P1^4;       /*数据口 RXD/D7*/
sbit W_CLOCK=P1^2;   /*脉冲口 TXD/*/
sbit FQ_UD=P1^6;     /*相位频率刷新控制端WR*/
delay(uint t)
{while(--t);}
void AD9850_init(void)
{
W_CLOCK=0;
FQ_UD=0;
delay(50);
W_CLOCK=1;
delay(50);
W_CLOCK=0;
delay(100);
FQ_UD=1;
delay(100);
FQ_UD=0;
}
//==========================================
void AD9850(uchar XiangW,long PinL)
{   
  
    uchar i;
    RESET=1;            /*整机复位*/
    delay(500);
    RESET=0;
    BCC=XiangW;     /*myself*/
    BC=PinL;        /*myself*/
    FQ_UD=0;
    W_CLOCK=0;
    for(i=0;i<8;i++)    /*送相位控制字*/
    {   
        
         W_CLOCK=0;
         delay(100);
           if(XiangW&0x00000001)
           DAT=1;
         else DAT=0;
         delay(100);
         W_CLOCK=1;
         XiangW=BCC>>1;
        
         W_CLOCK=0;
    }
    for(i=0;i<32;i++)   /*送频率控制字*/
    {
      
       W_CLOCK=0;
         delay(100);
           if(PinL&0x00000001)
           DAT=1;
         else DAT=0;
         delay(100);
         W_CLOCK=1;
         PinL=BC>>1;
         W_CLOCK=0;
    }
    FQ_UD=1;delay(100);FQ_UD=0;
    
}
//==============================================
main()
{   
    AD9850_init();
    while(1)
    {
    AD9850(0,100);
    }
}
帮我指点一下,为什么不出现波形,错误出现在哪里?
谢谢!!!!!

相关帖子

沙发
gjg191| | 2007-8-2 09:43 | 只看该作者

dd

首先看硬件是否正确,再检查软件

使用特权

评论回复
板凳
snakeemail| | 2007-8-2 10:22 | 只看该作者

使劲看pdf,给我100000000000000000000000000000000000000块美金

是DDS吧,俺只到9832

使用特权

评论回复
地板
lfflsh|  楼主 | 2007-8-2 10:26 | 只看该作者

回2楼

硬件电路很简单:IOUTB输出端节两个LC震荡电路,进行滤波和放大!再方波输出端采用空载输出!!

使用特权

评论回复
5
lfflsh|  楼主 | 2007-8-4 16:49 | 只看该作者

请高手来帮忙

为什么没有人来响应一下呢?
哪位前辈帮个忙啊!

使用特权

评论回复
6
zgl7903| | 2007-8-4 17:11 | 只看该作者

自己耐心软调一下 就能发现问题

XiangW=BCC>>1; 每次发送的值都是 BCC>>1
PinL=BC>>1; 每次发送的值都是 BC>>1

使用特权

评论回复
7
gjg191| | 2007-8-4 17:13 | 只看该作者

dd

现在没空晚上帮你看

使用特权

评论回复
8
student06| | 2007-8-4 22:38 | 只看该作者

相位控制字不是八个吧

后三个是工作模式设置,只能设置为0,而且是先发频率控制字后发相位控制字

使用特权

评论回复
9
lfflsh|  楼主 | 2007-8-5 08:15 | 只看该作者

修改以后的发送数据的程序

#include"reg51.h"
#include <intrins.h>
#include<ABSACC.H> 
#define uchar unsigned char
#define uint unsigned int
bdata uchar BCC;
bdata uchar BC;

uchar dbuf[4];
sbit  buf=BCC^0;
sbit RESET=P1^0;     /*整体复位*/
sbit DAT=P1^4;       /*数据口 RXD/D7*/
sbit W_CLOCK=P1^2;   /*脉冲口 TXD/*/
sbit FQ_UD=P1^6;     /*相位频率刷新控制端WR*/
delay(uint t)
{while(--t);}
void AD9850_init(void)
{
 W_CLOCK=0;
 FQ_UD=0;
 delay(10);
 W_CLOCK=1;
 delay(10);
 W_CLOCK=0;
 delay(50);
 FQ_UD=1;
 delay(50);
 FQ_UD=0;
}
//==========================================
void AD9850(uchar XiangW,long PinL)
{   
  
    uchar i,j;
    RESET=1; 
    //_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
    delay(0);
    RESET=0;
    PinL=PinL*107.3741824;
   dbuf[1]=PinL&(0xff);
   PinL=PinL>>8;
   dbuf[2]=PinL&(0xff);
   PinL=PinL>>8;
   dbuf[3]=PinL&(0xff);
   PinL=PinL>>8;
   dbuf[4]=PinL&(0xff);
    //dbuf[1]=PinL%256;     //myself
    
    //dbuf[2]=PinL/256%256;
    
    //dbuf[3]=PinL/256/256%256;    
    
    //dbuf[4]=PinL/256/256/256%256; 
     
    FQ_UD=0;
    
     W_CLOCK=0;

    _nop_();_nop_();_nop_();_nop_();_nop_();
        for(i=8;i>0;i--)    //送相位控制字
    {   
        
      /*  BCC=XiangW;
        W_CLOCK=0;
        DAT=buf;
         delay(100);
        W_CLOCK=1;
        XiangW=XiangW>>1;*/ 
         //delay(100);
         W_CLOCK=0;
         //_nop_();_nop_();_nop_();_nop_();_nop_();
         delay(50);
           if(XiangW&0x01)
          buf=DAT=1;

         else buf=DAT=0;

          W_CLOCK=0;
        //  _nop_();_nop_();_nop_();_nop_();_nop_();
         delay(50);
         W_CLOCK=1;
         BC=XiangW=BC>>1;         //myself
        // XiangW=XiangW>>1;
         W_CLOCK=0;
    }

    for(i=4;i>0;i--)
    {
        BCC=dbuf;
         for(j=8;j>0;j--)   /*送频率控制字*/
            {
    /*       // BCC=PinL;
        //W_CLOCK=0;
           //DAT=buf;
        //delay(100);
        //W_CLOCK=1;
        //PinL=PinL>>1;
        //delay(100);*/
             W_CLOCK=0;
       //_nop_();_nop_();_nop_();_nop_();_nop_(); 
             delay(50);
               if(PinL&0x01)
                  buf=DAT=1;
             else buf=DAT=0;
                  W_CLOCK=0;
         
               delay(100);
               W_CLOCK=1;
               BCC=PinL=BCC>>1;
               W_CLOCK=0;
               }
       }

    FQ_UD=1;
    delay(500);
    FQ_UD=0;
     // delay(100);
}
main()
{   
   AD9850_init();

    while(1)
    {
    AD9850(0,12500000);
    
    }
}
我的相位直接设置成零相位了
我现在是相送频率后送相位,我测量的空载输出的方波,我一直不明白为什么?

使用特权

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

本版积分规则

23

主题

48

帖子

0

粉丝