查看完全版本 : 12M时钟882Us计算DDS控制字源程序
//每位的控制字---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
电路图能不能贴出来看看
longxiaodao
2007-01-22, 19:00
这个程序不是很懂
想对照电路图看看
明白了...主要就是AD9851与单片机的连接问题...
longxiaodao
2007-01-22, 19:24
是啊 我搭了个电路最后输出是个高电平 在网上问人他们说是我的电路问题
longxiaodao
2007-01-22, 19:42
这个是我的电路图
晕..用的到那么多线么???要不用并行..要么用串行..不能都用的 ..
这个程序不是很懂
想对照电路图看看
//输出端口(显示端口)
#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 ;
这样啊...
//输出端口(显示端口)
#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:
aqqw751121
2007-04-05, 23:45
谢谢楼主的共享 :177:
//每位的控制字---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的时钟换掉。
楼主的加一 减一函数太复杂了!
/***加一*****************/
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;
}
}
}
补充一下..时间是用KEIL模拟出来了..标准的51.
vBulletin Version 3.0.7 Translated by
NewVBB.com™ 2009.
Translated and Hacked by:
Ztbbs