📄 main.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 + -