📄 ad9851.c
字号:
#include<reg52.h>
#include<absacc.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define FRE1_A XBYTE [0x9000] //频率控制字一正弦波,调幅载波,FSK载波f1,ASK,PSK载波
#define FRE1_B XBYTE [0x9001]
#define FRE1_C XBYTE [0x9002]
#define FRE1_D XBYTE [0x9003]
#define FRE2_A XBYTE [0x9005] //频率控制字二 FSK载波f2
#define FRE2_B XBYTE [0x9006]
#define FRE2_C XBYTE [0x9007]
#define FRE2_D XBYTE [0x9008]
#define MODE XBYTE [0x9004]
#define DDS_D0 XBYTE [0xc000] //AM调制波控制字
#define DDS_D1 XBYTE [0xc001]
#define DDS_D2 XBYTE [0xc002]
#define DDS_D3 XBYTE [0xc003]
#define DA0832 XBYTE [0xd000] //AM调制波幅度控制端口
sbit PINPIAN=P1^3; //1:5KHZ 0:10KHZ
sbit AM_CS=P1^4; //数子调制脉冲使能 低电平有效
void DDS(ulong F)
{
ulong M;
float fre=10.73621578383221; //参数为0.1Hz精度的整数,故除10
//fre=(float)(F); //fout=fosc*K/2e32
//fre=fre*107.3621578383221; //K=fout*2e32/fosc
fre=fre*F;
M=(ulong)(fre); //fosc=40.004480MHz
DDS_D0=(uchar)(M&0x000000ff);
DDS_D1=(uchar)((M>>8)&0x000000ff);
DDS_D2=(uchar)((M>>16)&0x000000ff);
DDS_D3=(uchar)((M>>24)&0x000000ff);
}
/********************************************************/
/*********AD9851**************/
void AD9851_DDS(ulong frequence)
{
//float abc=23.858257297405;//fosc=40.004480*4.5;
//float abc=29.826472471; //fosc=23.999750*6;
float abc=2.8636145307; //fosc=25.000000*6; 除10
ulong ku;
abc=abc*frequence;
ku=(ulong)(abc);
FRE1_D=(uchar)((ku>>24)&0x000000ff);
FRE1_C=(uchar)((ku>>16)&0x000000ff);
FRE1_B=(uchar)((ku>>8)&0x000000ff);
FRE1_A=(uchar)(ku&0x000000ff);
//MODE=0x01;
}
void main(void)
{
DA0832=200; //给0800的参考电压
DDS(10000);
AD9851_DDS(10000000); //正弦信号产生
MODE=0x01; //SIN
AD9851_DDS(1000000);
MODE=0x02; //FM
MODE=0x03; //ASK
MODE=0x04; //FSK
MODE=0x05; //PSK
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -