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

[复制链接]
4924|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震荡电路,进行滤波和放大!再方波输出端采用空载输出!!
 楼主| lfflsh 发表于 2007-8-4 16:49 | 显示全部楼层

请高手来帮忙

为什么没有人来响应一下呢?
哪位前辈帮个忙啊!
zgl7903 发表于 2007-8-4 17:11 | 显示全部楼层

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

XiangW=BCC>>1; 每次发送的值都是 BCC>>1
PinL=BC>>1; 每次发送的值都是 BC>>1
gjg191 发表于 2007-8-4 17:13 | 显示全部楼层

dd

现在没空晚上帮你看
student06 发表于 2007-8-4 22:38 | 显示全部楼层

相位控制字不是八个吧

后三个是工作模式设置,只能设置为0,而且是先发频率控制字后发相位控制字
 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部