⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad9833.c

📁 DDS芯片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 + -