📄 ad9833.c
字号:
// name : ad9833.c
// author : pyy
// date : 2008-8-6
#include <reg51.h>
sbit AD9833_FSYNC = P1^2;
sbit AD9833_SCLK = P1^3;
sbit AD9833_SDATA = P1^4;
//控制子数组
unsigned int Config_Data[8];
//写入一个字的数据
void Send_Word(unsigned int Data_In);
//产生一个频率波形 以及选择波形模式
void Wave_Generate(unsigned long , unsigned char );
void main( void )
{
AD9833_FSYNC = 1;
AD9833_SCLK = 0;
while(1)
{
Wave_Generate(1, 2);
Wave_Generate(12, 2);
Wave_Generate(123, 2);
Wave_Generate(1234, 2);
Wave_Generate(12345, 2);
Wave_Generate(123456, 2);
Wave_Generate(1234567, 2);
Wave_Generate(2234567, 2);
Wave_Generate(3234567, 2);
Wave_Generate(4234567, 2);
Wave_Generate(5234567, 2);
Wave_Generate(6234567, 2);
Wave_Generate(7234567, 2);
Wave_Generate(8234567, 2);
Wave_Generate(9234567, 2);
Wave_Generate(10000000, 2);
// 5Mhz sine
Wave_Generate(5000000, 2);
Wave_Generate(4000000, 2);
Wave_Generate(3000000, 2);
Wave_Generate(2000000, 2);
Wave_Generate(1000000, 2);
// 1Mhz sine
Wave_Generate(1000000, 2);
Wave_Generate(900000, 2);
Wave_Generate(800000, 2);
Wave_Generate(700000, 2);
Wave_Generate(600000, 2);
Wave_Generate(500000, 2);
Wave_Generate(400000, 2);
Wave_Generate(300000, 2);
Wave_Generate(200000, 2);
Wave_Generate(100000, 2);
Wave_Generate(5000000, 0);
Wave_Generate(4000000, 0);
Wave_Generate(3000000, 0);
Wave_Generate(2000000, 0);
Wave_Generate(1000000, 0);
Wave_Generate(1000000, 0);
Wave_Generate(900000, 0);
Wave_Generate(800000, 0);
Wave_Generate(700000, 0);
Wave_Generate(600000, 0);
Wave_Generate(500000, 0);
Wave_Generate(400000, 0);
Wave_Generate(300000, 0);
Wave_Generate(200000, 0);
Wave_Generate(100000, 0);
Wave_Generate(1000000, 1);
Wave_Generate(900000, 1);
Wave_Generate(800000, 1);
Wave_Generate(700000, 1);
Wave_Generate(600000, 1);
Wave_Generate(500000, 1);
Wave_Generate(400000, 1);
Wave_Generate(300000, 1);
Wave_Generate(200000, 1);
Wave_Generate(100000, 1);
// 100Khz sine
Wave_Generate(100000, 2);
// 10Khz sine
Wave_Generate(10000, 2);
// 1Khz sine
Wave_Generate(1000, 2);
// 100hz sine
Wave_Generate(100, 2);
// 10hz sine
Wave_Generate(10, 2);
// 1hz sine
Wave_Generate(1, 2);
// 10Mhz sine
Wave_Generate(10000000, 0);
// 5Mhz sine
Wave_Generate(5000000, 0);
// 1Mhz sine
Wave_Generate(1000000, 0);
// 100Khz sine
Wave_Generate(100000, 0);
// 10Khz sine
Wave_Generate(10000, 0);
// 1Khz sine
Wave_Generate(1000, 0);
// 100hz sine
Wave_Generate(100, 0);
// 10hz sine
Wave_Generate(10, 0);
// 1hz sine
Wave_Generate(1, 0);
// 10Mhz 三角波
Wave_Generate(10000000, 1);
// 5Mhz sine
Wave_Generate(5000000, 1);
// 1Mhz sine
Wave_Generate(1000000, 1);
// 100Khz sine
Wave_Generate(100000, 1);
// 10Khz sine
Wave_Generate(10000, 1);
// 1Khz sine
Wave_Generate(1000, 1);
// 100hz sine
Wave_Generate(100, 1);
// 10hz sine
Wave_Generate(10, 1);
// 1hz sine
Wave_Generate(1, 1);
// 10Mhz 方波
Wave_Generate(10000000, 2);
// 5Mhz sine
Wave_Generate(5000000, 2);
// 1Mhz sine
Wave_Generate(1000000, 2);
// 100Khz sine
Wave_Generate(100000, 2);
// 10Khz sine
Wave_Generate(10000, 2);
// 1Khz sine
Wave_Generate(1000, 2);
// 100hz sine
Wave_Generate(100, 2);
// 10hz sine
Wave_Generate(10, 2);
// 1hz sine
Wave_Generate(1, 2);
}
}
void Send_Word(unsigned int Data_In)
{
unsigned int i,j;
AD9833_SCLK = 1;
AD9833_FSYNC = 0;
for(i = 0; i < 16; i++)
{
AD9833_SCLK = 1;
AD9833_SDATA = (bit) ((Data_In & 0x8000)>>15);
j = 0x01;
while(j--);
AD9833_SCLK = 0;
Data_In = Data_In << 1;
j = 0x01;
while(j--);
}
AD9833_FSYNC = 1;
AD9833_SCLK = 0;
}
//波形发生函数
//入口参数: 频率 <= 10MHz
// 形状: 0 正弦波 1 三角波 2 方波
//默认: FMCLK - 20MHz 0相移
void Wave_Generate(unsigned long Freq, unsigned char Shape )
{
unsigned long temp;
unsigned char k;
if(Freq > 10000000) Freq = 10000000;
switch(Shape)
{
case 0 : Config_Data[0]=0x2108;
Config_Data[7]=0x2008;
break;
case 1 :
Config_Data[0]=0x210A;
Config_Data[7]=0x200A;
break;
case 2 :
Config_Data[0]=0x2128;
Config_Data[7]=0x2028;
break;
default : Config_Data[0]=0x2108;
Config_Data[7]=0x2008;
break;
}
//20M 13.4218
//19.6608M 13.6533
//16M 16.7772
//24M 11.1848
temp = Freq*11.1848;
Config_Data[1] = temp&0x00003fff;
Config_Data[3] = Config_Data[1];
Config_Data[2] = (temp&0x0fffc000)>>14;
Config_Data[4] = Config_Data[2];
Config_Data[1] = Config_Data[1] | 0x4000;
Config_Data[2] = Config_Data[2] | 0x4000;
Config_Data[3] = Config_Data[3] | 0x8000;
Config_Data[4] = Config_Data[4] | 0x8000;
Config_Data[5] = 0xC000;
Config_Data[6] = 0xE000;
for(k = 0; k<8; k++)
{
Send_Word(Config_Data[k]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -