AD9851,求高人指教,不知是软件还是硬件问题

[复制链接]
 楼主| wlf464842650 发表于 2012-7-11 18:28 | 显示全部楼层 |阅读模式
#include<reg51.h> //头文件

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long int
#define AD9851_DATA P1
//定义AD9851和51接口 8
sbit W_CLK=P2^4;
sbit FQ_UD=P2^3;
sbit RESET=P2^2;
double Fm=0;
uchar tab[]={0x01,0x00,0x0,0x00,0x00};
//tab[0]为相位和频率设置单元,此处初始相位设置为零,开倍频30M*6=180M系

void delay(uint i)
{
    while(i--);
}
void delay_long(uint x)
{
    uint y,z;
    for(y=0;y<1000;y++)
    {
        for(z=0;z<x;z++) ;
    }
}
//分32位数据分解为4个字节存于tab[]数组的后四个单元,tab[0]为相位和频率的

void change(double f)
{
    ulong num;
    Fm=1073741824/45.0f*f;      //误差40000000H,整
    num=(ulong)Fm;
    tab[1]=(char)(num>>24);
    tab[2]=(char)(num>>16)&0xff;
    tab[3]=(char)(num>>8)&0xff;
    tab[4]=(char)num&0xff;
}
void init()
{
    FQ_UD=0;
    delay(1);
    W_CLK=0;
    delay(1);
    RESET=1;
    delay(10);
    RESET=0;
    delay(1);
}
void write_data(double frq)
{
    uchar i;
    change(frq);
    for(i=0;i<5;i++)
    {
        W_CLK=0;
        delay(1);  
        P1=tab;
        W_CLK=1;
    }
    FQ_UD=1;
    delay(1);
    FQ_UD=0;
    delay(1);
}
void main()
{
    init(); //ad9851初始化
    write_data(0.001);
//此处为频率设置,当前频率为(double类型)10MHz。如有误差,自己加补偿。
     while(1);
}
 楼主| wlf464842650 发表于 2012-7-11 18:33 | 显示全部楼层
[img][/img]
 楼主| wlf464842650 发表于 2012-7-11 18:36 | 显示全部楼层
 楼主| wlf464842650 发表于 2012-7-11 18:37 | 显示全部楼层
 楼主| wlf464842650 发表于 2012-7-11 23:33 | 显示全部楼层
求大虾
 楼主| wlf464842650 发表于 2012-7-12 11:51 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

25

帖子

0

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

0

主题

25

帖子

0

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