出50RMB求一个AD9837的驱动程序

2020-01-23 14:47发布

你要用ad9837做啥
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
imfv
1楼-- · 2020-01-24 16:39
本帖最后由 qjs412_avr 于 2014-4-25 12:48 编辑

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit FSYNC=P3^3;   
sbit SCLK=P1^4;
sbit SDATA=P1^3;

void delay(uchar k)     //延迟程序
{
        uchar i,j;
        for(;k>0;k--)
        for(j=100;j>0;j--)
        for(i=100;i>0;i--);
}

void indate0(uint p)
{
        uchar i;
        FSYNC=0;
        for(i=0;i<16;i++)
        {
                SCLK=0;
                if(p&0x8000)
        {
                        SDATA=1;
                }
                else
                {
                        SDATA=0;
                }
                SCLK=1;
                p=p<<1;
        }
        FSYNC=1;
        SCLK=0;
        SDATA=1;
}

void main(void)
{   
        FSYNC=1;
        SCLK=0;
        SDATA=1;        
        while(1)
        {
                indate0(0x0100);//复位DDS芯片
                delay(100);  //延时
                indate0(0x1000);//写频率寄存器的高14位
                delay(20);  //
                indate0(0x53b1);//写寄存器高14位频率字
                delay(20);
                indate0(0x0000);//写频率寄存器的低14位
                delay(20);  //
                indate0(0x84ec);//写寄存器低14位频率字
                delay(20);  //
                indate0(0xcf0f); //写相位控制字
                delay(20);  //
                while(1);               
        }        
}

楼主试试这个代码,从芯片手册上看,数据变化的时候在SCLK的上升沿,所以SDATA上的数据信息应该在SCLK低电平时赋值,然后拉高SCLK
编辑原因:修改代码
imfv
2楼-- · 2020-01-24 17:01
imfv 发表于 2014-4-25 15:06
程序的好像是先传低位,再传高位,所以应该是P&0X0001

真服了你。。。 自己看时序图,,,MSB...
imfv
3楼-- · 2020-01-24 17:38
imfv 发表于 2014-4-26 10:48
时序要求好像是时钟的下降沿传送数据,单片机用的是STC12LE5608AD,晶振用的是11.0592M ...

建立时间,保持时间等等,你都有示波器,可以看看。  保险起见,先降频最好,每个语句后加几个NOP。
你再去看看时序图。。。  是MSB还是LSB...
lryxr2507
4楼-- · 2020-01-24 23:34
楼主哪里的?调这类需要硬件才好调
skynet
5楼-- · 2020-01-24 23:57
 精彩回答 2  元偷偷看……
imfv
6楼-- · 2020-01-25 03:33
这个我还真不会,所以帮不了,自己找了。。。

一周热门 更多>