导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→请教AD9832[huayun]

 *第41384篇: 请教AD9832

  
楼 主:huayun 2006年6月14日12:58
 请教AD9832
[size=4][size=2]我是新手,用80C52驱动AD9832,硬件没问题。改变频率控制字时,输出时而准时而不准,请求各位高手帮忙.程序如下:
#include "reg52.h"
#include "dy8958a.h"
#include "intrins.h"
#include "bianliang.h"  

void SendData(unsigned int d)
{
   unsigned int i;
   SY9832 = 0;
   SDA9832=0;
   for(i=0;i  <16;i++)
   {
      SDA9832 =(bit)(d&0x8000);
      SCLK9832=1;
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      SCLK9832=0;
      d  <  <=1;
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
   }
   SY9832 = 1;
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   SCLK9832=1;
   _nop_();
   SCLK9832=0;
   _nop_();
}

void ad9832()
{
    void SendData(unsigned int x);
    unsigned long f;
 unsigned int x;
    unsigned char data y[4];
    unsigned char i,*px;
    void *pf; 
    x=0;
    f=(long int)(hz*69.905*256);
    px=y;
    pf=&f;
    if(~fhag)
    {
     for (i=0;i  <4;i++)
     {
      *(px+i)=*((char*)pf+3-i);
   x=(unsigned int)(*(px+i));
   switch (i)
   {
    case 0: x&=0x30ff;x|=0x3000;break;
    case 1: x&=0x21ff;x|=0x2100;break;
       case 2: x&=0x32ff;x|=0x3200;break;     
       case 3: x&=0x23ff;x|=0x2300;break;
   }
   SendData(x);
     }
     SendData(0x5000);
     fhag=1;
   }
   else
   {
    for (i=0;i  <4;i++)
    {
     *(px+i)=*((char*)pf+3-i);
  x=(unsigned int)(*(px+i));
  switch (i)
  {
   case 0: x&=0x34ff;x|=0x3400;break;
   case 1: x&=0x25ff;x|=0x2500;break;
      case 2: x&=0x36ff;x|=0x3600;break;     
      case 3: x&=0x27ff;x|=0x2700;break;
  }
  SendData(x);
    }
    SendData(0x5800);
    fhag=0;
   }
}
void ad98320()
{
  void SendData(unsigned int x);
  unsigned long f;
  unsigned int x;
  unsigned char data y[4];
  unsigned char i,*px;
  void *pf;
  SY9832 = 1;
  x=0;
  f=(long int)(hz*69.905*256);
  px=y;
  pf=&f; 
  SendData(0xf800);
  SendData(0xb000);
  if(~fhag)
  {
   for (i=0;i  <4;i++)
   {
    *(px+i)=*((char*)pf+3-i);
 x=(unsigned int)(*(px+i));
 switch (i)
    {
  case 0: x&=0x30ff;x|=0x3000;break;
  case 1: x&=0x21ff;x|=0x2100;break;
     case 2: x&=0x32ff;x|=0x3200;break;     
     case 3: x&=0x23ff;x|=0x2300;break;
 }
 SendData(x);
   }
    SendData(0x5000);
    fhag=1;
   }
   else
   {
    for (i=0;i  <4;i++)
    {
     *(px+i)=*((char*)pf+3-i);
  x=(unsigned int)(*(px+i));
  switch (i)
  {
   case 0: x&=0x34ff;x|=0x3400;break;
   case 1: x&=0x25ff;x|=0x2500;break;
      case 2: x&=0x36ff;x|=0x3600;break;     
      case 3: x&=0x27ff;x|=0x2700;break;
  }
  SendData(x);
    }
    SendData(0x5800);
    fhag=0;
  }
  SendData(0x1800);
  SendData(0x0900);
  SendData(0x1a00);
  SendData(0x0b00);
  SendData(0x1c00);
  SendData(0x0d00);
  SendData(0x1e00);
  SendData(0x0f00);
  SendData(0xc000);
}[/size][/size]

  
2楼:huayun 2006年6月14日17:15
 急求AD9832改变频率控制字时输出时准时不准解决办法
void SendData(unsigned int d)
{
   unsigned int i;
   SY9832 = 0;
   SDA9832=0;
   for(i=0;i  <16;i++)
   {
      SDA9832 =(bit)(d&0x8000);
      SCLK9832=1;
      SCLK9832=0;
      d  <  <=1;
   }
   SCLK9832=1;
   SY9832 = 1;
   SCLK9832=0;
}

void ad9832()
{
    void SendData(unsigned int x);
    unsigned long f;
 unsigned int x;
    unsigned char y[4];
    unsigned char i,*px;
    void *pf;
    f=(long )(hz*69.905*256);
    px=y;
    pf=&f;
    if(~fhag)
    {
     for (i=0;i  <4;i++)
     {
      *(px+i)=*((char*)pf+3-i);
   x=(unsigned int)(*(px+i));
   switch (i)
   {
    case 0: x&=0x30ff;x|=0x3000;break;
    case 1: x&=0x21ff;x|=0x2100;break;
       case 2: x&=0x32ff;x|=0x3200;break;     
       case 3: x&=0x23ff;x|=0x2300;break;
   }
   SendData(x);
     }
     SendData(0x5000);
     fhag=1;
   }
   else
   {
    for (i=0;i  <4;i++)
    {
     *(px+i)=*((char*)pf+3-i);
  x=(unsigned int)(*(px+i));
  switch (i)
  {
   case 0: x&=0x34ff;x|=0x3400;break;
   case 1: x&=0x25ff;x|=0x2500;break;
      case 2: x&=0x36ff;x|=0x3600;break;     
      case 3: x&=0x27ff;x|=0x2700;break;
  }
  SendData(x);
    }
    SendData(0x5800);
    fhag=0;
   }
}
void ad98320()
{
  void SendData(unsigned int x);
  SY9832 = 1;
  SendData(0xf800);
  SendData(0xb000);
  SendData(0xc000);
}


>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:基于单总线协议的亮度传感器

[下一篇主题]:菜鸟求助 philips P89LPC921 串口通讯