搜索
bottom↓
回复: 3

急!!!用过ad9833的请帮我看看这段代码有没有问题!!谢谢

[复制链接]

出0入0汤圆

发表于 2011-5-27 22:04:39 | 显示全部楼层 |阅读模式
/***********向AD9833写入控制字*************/
void AD9833_Send_Word(unsigned int Data_In)
{
        unsigned char i;
        S_CLK=1;
        FSYNC=0;
        for(i=0;i<16;i++)
        {
                S_CLK=1;
                SDATA=(bit)((Data_In & 0x8000)>>15);
                S_CLK=0;
                Data_In=Data_In<<1;
        }
        FSYNC=1;
        S_CLK=0;
}


/******波形发生函数************/
//入口参数:频率Freq
//           形状:0(正弦波)1(三角波)3(方波)
void Wave_Generate(unsigned long Freq,unsigned char Shape)                 
{
        unsigned long temp;
        unsigned char k;
        if(Freq>12000000) Freq=12000000;
        switch(Shape)
        {
                case 0:Config_Data[0]=0x2108;
                      Config_Data[7]=0x2008; break;
                case 1:Config_Data[0]=0x210A;
                      Config_Data[7]=0x200A; break;
            case 2:Config_Data[0]=0x2128;
                      Config_Data[7]=0x202A; break;
                default:Config_Data[0]=0x2108;
                        Config_Data[7]=0x2008;

        }
        temp=Freq*16.77;
        Config_Data[1]=temp&0x00003fff;
        Config_Data[3]=Config_Data[1];
        Config_Data[2]=(temp&0x0fffc000)>>14;
        Config_Data[4]=Config_Data[2];
        Config_Data[1]=Config_Data[1]|0x4000;
        Config_Data[2]=Config_Data[2]|0x4000;
        Config_Data[3]=Config_Data[3]|0x8000;
        Config_Data[4]=Config_Data[4]|0x8000;
        Config_Data[5]=0xc000;
        Config_Data[6]=0xe000;

        for(k=0;k<8;k++)
        {
                AD9833_Send_Word(Config_Data[k]);
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-5-30 15:06:14 | 显示全部楼层
帮不上你。
好奇地问下,Config_Data[]是送给谁的?

出0入300汤圆

发表于 2011-6-3 23:10:48 | 显示全部楼层
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------

#include <C8051F120.h>                 // SFR declarations

#define tByte unsigned char
#define tWord unsigned int
#define tLong unsigned long
sbit  FSYNC=P0^2;
sbit  SCLK =P0^1;
sbit  SDATA=P0^0;
sbit  ddd=P1^6;
tWord Config_Data[8];
void  Wave_Generate(tLong,tByte);
//-----------------------------------------------------------------------------
void Oscillator_Init (void)                //20MHz晶振内部倍频到100MHz
{
    int i = 0;
    SFRPAGE   = CONFIG_PAGE;
    OSCXCN    = 0x67;
    for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
    while ((OSCXCN & 0x80) == 0);
    PLL0FLT   = 0x3F;
    CLKSEL    = 0x31;
    OSCICN    = 0x01;
}
//--------------------------------------------------------------------------
void Port_Init (void)
{
SFRPAGE   = CONFIG_PAGE;
    P0MDOUT   = 0xFF;
    P1MDOUT   = 0xFF;
    XBR2      = 0x40;

}

void AD9833_Send_Word(tWord Data_In)

{

                   tByte i;
                   SCLK=1;
                   FSYNC=0;
                   for(i=0;i<16;i++)

                   {

             SCLK=1;
             SDATA=(bit)((Data_In & 0x8000)>>15);
             SCLK=0;
             Data_In=Data_In<<1;

                   }
                   FSYNC=1;
                   SCLK=0;
}

//波形发生函数

//入口参数: 频率:Freq (<=12000000)

//          形状:0(正弦波),1(三角波),2(方波)

//默认: Fmclk=25MHz, 0相移,方波不分频.

                void  Wave_Generate(tLong Freq,tByte Shape)
{

                   tLong temp;
                   tByte k;
                   //if(Freq>23000000) Freq=23000000;
                   switch(Shape)
                   {
     case 0: Config_Data[0]=0x2108;
             Config_Data[7]=0x2008;
             break;
     case 1: Config_Data[0]=0x210A;
             Config_Data[7]=0x200A;
             break;
     case 2: Config_Data[0]=0x2128;
             Config_Data[7]=0x2028;
             break;
     default:Config_Data[0]=0x2108;
             Config_Data[7]=0x2008;

                   }



                   //temp=Freq*10.73;   //temp=Freq*(0x10000000/20000000);
                temp=Freq*2.68435456;
                   Config_Data[1]=temp&0x00003fff;
                   Config_Data[3]=Config_Data[1];
                   Config_Data[2]=(temp&0x0fffc000)>>14;
                   Config_Data[4]=Config_Data[2];
                   Config_Data[1]=Config_Data[1]|0x4000;
                   Config_Data[2]=Config_Data[2]|0x4000;
                   Config_Data[3]=Config_Data[3]|0x8000;
                   Config_Data[4]=Config_Data[4]|0x8000;
                   Config_Data[5]=0xC000;
                   Config_Data[6]=0xE000;



                   for(k=0;k<8;k++)

                  {
             AD9833_Send_Word(Config_Data[k]);
                  }



}

出0入300汤圆

发表于 2011-6-3 23:12:30 | 显示全部楼层
我记着有个办法好像可以让程序有颜色呀,那位给帮忙指点一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 16:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表