Google
 
Web hellocq.net

PDA

查看完全版本 : 12M时钟882Us计算DDS控制字源程序


wycx
2006-02-25, 13:54
//每位的控制字---111.518000MHz dds时钟
#define FF7 385136686
#define FF6 38513669
#define FF5 3851367
#define FF4 385137
#define FF3 38514
#define FF2 3851
#define FF1 385
#define FF0 39

/***********************************************************/
/***计算控制字************/
/***入口:频率数组指针***出口,控制字*****/
unsigned long jisuan(unsigned char data *fno)
{
unsigned long dds_no ;
dds_no=
(*(fno+7))*FF7+
(*(fno+6))*FF6+
(*(fno+5))*FF5+
(*(fno+4))*FF4+
(*(fno+3))*FF3+
(*(fno+2))*FF2+
(*(fno+1))*FF1+
(*fno)*FF0 ;
return(dds_no);
}

longxiaodao
2007-01-22, 13:58
电路图能不能贴出来看看

wycx
2007-01-22, 18:49
晕..能够看的懂的就不用电路图了.

longxiaodao
2007-01-22, 19:00
这个程序不是很懂
想对照电路图看看

wycx
2007-01-22, 19:04
明白了...主要就是AD9851与单片机的连接问题...

longxiaodao
2007-01-22, 19:24
是啊 我搭了个电路最后输出是个高电平 在网上问人他们说是我的电路问题

longxiaodao
2007-01-22, 19:42
这个是我的电路图

wycx
2007-01-23, 16:13
晕..用的到那么多线么???要不用并行..要么用串行..不能都用的 ..

ahzds
2007-01-23, 19:10
这个程序不是很懂
想对照电路图看看
//输出端口(显示端口)
#define LCD_OUT P2
//DDS控制
sbit w_clk=P1^1 ;
sbit fq_ud=P1^2 ;
sbit data7=P1^3 ;
//键盘控制
sbit key_f=P3^7 ;
sbit key_inc=P3^6 ;
sbit key_dec=P3^5 ;
//PTT
sbit rx_en=P3^4 ;

wycx
2007-01-25, 13:25
这样啊...
//输出端口(显示端口)
#define LCD_OUT P2 //这是接显示的lcd的口啊..用一个lcd分时显示八位的...自己作实验的..简单
//DDS控制
sbit w_clk=P1^1 ;
sbit fq_ud=P1^2 ;
sbit data7=P1^3 ; //这三个脚接个50欧电阻到dds9850/1的相应脚上
//键盘控制
sbit key_f=P3^7 ;
sbit key_inc=P3^6 ;
sbit key_dec=P3^5 ; //这三个一个是改步进...一个加一个减
//PTT
sbit rx_en=P3^4 ; //这个是电台的收发切换...我的程序允许异频工做...把ptt电压接到这个脚

aqqw751121
2007-04-03, 01:34
是不是将它汇编后写入MCU就可以用了?? :133: :133: :133:

wycx
2007-04-05, 23:36
对...可是...要与硬件对应的..

aqqw751121
2007-04-05, 23:45
谢谢楼主的共享 :177:

wycx
2007-04-13, 18:36
//每位的控制字---111.518000MHz dds时钟
#define FF7 385136686
#define FF6 38513669
#define FF5 3851367
#define FF4 385137
#define FF3 38514
#define FF2 3851
#define FF1 385
#define FF0 39


这个地方要用你的dds的时钟换掉。

wbsnt
2007-05-02, 14:22
lz能发图吗??谢谢谢谢

wycx
2007-05-05, 16:40
要什么图。。。

ba6iv
2008-04-04, 10:53
楼主的加一 减一函数太复杂了!
/***加一*****************/
void inc_c(unsigned char data *a)
{
{
if(*a==10)
{
*a=0 ;
(*(a+1))++;
}
if((*(a+1))==10)
{
(*(a+1))=0 ;
(*(a+2))++;
}
if((*(a+2))==10)
{
(*(a+2))=0 ;
(*(a+3))++;
}
if((*(a+3))==10)
{
(*(a+3))=0 ;
(*(a+4))++;
}
if((*(a+4))==10)
{
(*(a+4))=0 ;
(*(a+5))++;
}
if((*(a+5))==10)
{
(*(a+5))=0 ;
(*(a+6))++;
}
if((*(a+6))==10)
{
(*(a+6))=0 ;
(*(a+7))++;
}
if((*(a+7))==10)
{
(*(a+7))=0 ;
}
}

temp_r=jisuan(jieshou);
send_code(temp_r);
}
/***减一***************/
void dec_c(unsigned char data *a)
{
{
if(*a==255)
{
*a=9 ;
(*(a+1))--;
}
if((*(a+1))==255)
{
(*(a+1))=9 ;
(*(a+2))--;
}
if((*(a+2))==255)
{
(*(a+2))=9 ;
(*(a+3))--;
}
if((*(a+3))==255)
{
(*(a+3))=9 ;
(*(a+4))--;
}
if((*(a+4))==255)
{
(*(a+4))=9 ;
(*(a+5))--;
}
if((*(a+5))==255)
{
(*(a+5))=9 ;
(*(a+6))--;
}
if((*(a+6))==255)
{
(*(a+6))=9 ;
(*(a+7))--;
}
if((*(a+7))==255)
{
(*(a+7))=9 ;
}
}
temp_r=jisuan(jieshou);
send_code(temp_r);
}

我改成这样,如何?
//定义全局变量
unsigned char F_BIT=4; //频率步进位置变量 4为千赫兹位 7为赫兹位 1为兆赫兹位
unsigned char F_VFO[8] = {1,0,0,0,0,0,0,0}; //频率数据变量 10MHz

void F_Inc(void)
{
unsigned char i;
F_VFO[F_BIT]++;

for(i=F_BIT; i>0 ; i--)
{
if (F_VFO[i]>9)
{
F_VFO[i] = 0;
F_VFO[i-1]++;
}
else
{
break;
}

}

}



void F_Dec(void)
{
unsigned char i;
F_VFO[F_BIT]--;


for(i=F_BIT; i>0 ; i--)
{
if (F_VFO[i]>254)
{
F_VFO[i] = 9;
F_VFO[i-1]--;
}
else
{
break;
}

}

}

BG7RKR
2008-11-03, 16:33
你好,交个朋友!————无线DIY!

BG7RKR
2008-11-03, 16:34
你的DDS用什么控制核心?

wycx
2008-11-04, 09:57
这个程序是标准的C啊..什么单片机都能用..

wycx
2008-11-04, 09:58
补充一下..时间是用KEIL模拟出来了..标准的51.

山河
2008-11-10, 10:54
不错。非常好。记下