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

📄 main.c

📁 AD8933 square wave,sin wave,triangular wave
💻 C
字号:
#include <reg52.h>
#include <intrins.h>
#define BITB 0x0800
sbit fsync = P1^4;
sbit sclk = P1^5;
sbit sdata = P1^6;


#define DDS_SCLK_UP sclk=1
#define DDS_SCLK_DOWN sclk=0
#define DDS_SDATA_UP sdata=1
#define DDS_SDATA_DOWN sdata=0
#define DDS_FSYNC_UP fsync=1
#define DDS_FSYNC_DOWN fsync=0

unsigned int Config_Data[8];

void delay2us(unsigned char i) {
	while (--i);
}
void writeDDS2Byte(unsigned int config) {
	unsigned char i;
	DDS_SCLK_DOWN;
	_nop_();
	DDS_FSYNC_UP;
	_nop_();
	DDS_SCLK_UP;
	delay2us(1);
	DDS_FSYNC_DOWN;
	_nop_();
	for (i=0; i<16; i++) {
		if (config & 0x8000) DDS_SDATA_UP;
		else DDS_SDATA_DOWN;
		delay2us(1);
		DDS_SCLK_DOWN;
		delay2us(1);
		DDS_SCLK_UP;
		config <<= 1;
	}
	DDS_FSYNC_UP;
	_nop_();
	DDS_SCLK_DOWN;
	delay2us(100);
}
//波形发生函数
//入口参数: 频率:Freq (<=12000000)
//          形状:0(正弦波),1(三角波),2(方波)
//默认: Fmclk=25MHz, 0相移,方波不分频.
void  waveGenerate(unsigned long Freq,unsigned char Shape)
{
   unsigned long temp;
   unsigned char k;
   if(Freq>12000000) Freq=12000000;
   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;
   }

   temp=Freq*13.4217728;   //temp=Freq*(0x10000000/20000000);/Freq*(2^28/)
   Config_Data[1]=temp&0x3fff;
   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++)
  {
     writeDDS2Byte(Config_Data[k]);
  }

  /* for (;;) {
      writeDDS2Byte(0xc000);
	  for (k=200;k;k--);
	  writeDDS2Byte(0xc000|2047);
	  for (k=200;k;k--);
   }*/
}
void DDS_2FSK(unsigned long freq1, unsigned long freq2, unsigned char shape) {
   unsigned long temp;
   unsigned char k;
   if (freq1>12000000) freq1=12000000;
   if (freq2>12000000) freq2=12000000;
   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;
   }
   temp=freq1*13.4217728;   //temp=Freq*(0x10000000/20000000);
   Config_Data[1]=temp&0x3fff;
   Config_Data[2]=(temp&0x0fffc000)>>14;
   temp=freq2*13.4217728;
   Config_Data[3]=temp&0x3fff;
   Config_Data[4]=(temp&0x0fffc000)>>14;

   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++)
  {
     writeDDS2Byte(Config_Data[k]);
  }
	while (1) {	
		for (k=200; k; k--);
		writeDDS2Byte(Config_Data[7] | BITB);
		for (k=200; k; k--);
		writeDDS2Byte(Config_Data[7] & (~BITB));
	}

}
void main() {
//unsigned char i;
	DDS_2FSK(3000, 1000, 0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -