標(biāo)題:
51單片機(jī)AD9833正弦波方波和三角波程序
[打印本頁]
作者:
qewtggg
時(shí)間:
2019-5-4 14:40
標(biāo)題:
51單片機(jī)AD9833正弦波方波和三角波程序
STC89C51控制AD9833產(chǎn)生正弦波,頻率可調(diào)
單片機(jī)源程序如下:
#include<reg52.h>
#include<intrins.h>
#define BITB 0x08000
sbit fsync=P1^4;//引腳定義
sbit sdata=P1^6;//引腳定義
sbit sclk=P1^2;
#define DDS_SCLK_UP sclk=1 //串行時(shí)鐘 上升
#define DDS_SLCK_DOWN sclk=0 //
#define DDS_SDATA_UP sdata=1 //串行數(shù)據(jù) 上升
#define DDS_SDATA_DOWN sdata=0 //
#define DDS_FSYNC_UP fsync=1 //控制輸入 上升
#define DDS_FSYNC-DOWN fsync=0 //
unsigned int Config_Data[B];
void delay2us(unsigned char i)
{
while(--i);
}
void writeDDS2Byte(unsigned int config) //寫入兩個(gè)數(shù)據(jù)
{
unsigned char i;
DDS_SLCK_DOWN;
_nop_();
DDS_FSYNC_UP;
_nop_();
DDS_SLCK_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_SLCK_DOWN;
delay2us(1);
DDS_SLCK_up;
config<=0;
}
DDS_FSYNC_UP;
_nop_();
DDS_SLCK_DOWN;
delay2us(100);
}
//波形發(fā)生器
//入口參數(shù):頻率:Freq(=12000000)
//形狀:0(正弦波),1(三角波),2(方波)
//默認(rèn):Fmclk=25MHz,0移相,方波不分頻
void waveGennerrate(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);
Config_Data[1]=temp&0x3fff;
Config_Data[3]=Config_Data[1];
Config_Data[2]=(temp&0xfffC000)>>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(oxc000);
for(k=200;k;k--);
writeDDS2Byte(oxc000|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=Freq*13.4217728;//temp=Freq*(0x10000000/20000000);
Config_Data[1]=temp&0x3fff;
Config_Data[3]=Config_Data[1];
Config_Data[2]=(temp&0xfffC000)>>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;
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
STC89C51_AD9833.rar
(24.16 KB, 下載次數(shù): 165)
2019-5-4 14:40 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
qewtggg
時(shí)間:
2019-5-4 14:41
頂一個(gè),良心之作!
作者:
lseo
時(shí)間:
2019-8-9 20:34
報(bào)錯(cuò)*********
作者:
光凌1997
時(shí)間:
2019-9-30 21:55
從哪里識(shí)別復(fù)制了一段?很多地方都是錯(cuò)的。DDS_FSYNC_DOWN抄成了DDS_FSYNC-DOWN ,Config_Data[8]定義的長(zhǎng)度為8,抄成了B。。但總的代碼還是很值的借鑒的,大家改一下就行了。
作者:
Straw
時(shí)間:
2020-10-17 21:01
錯(cuò)誤好多。。。。。
作者:
Straw
時(shí)間:
2020-10-17 21:02
錯(cuò)誤好多,改都要改好久
作者:
liaoym
時(shí)間:
2020-11-22 14:59
Straw 發(fā)表于 2020-10-17 21:02
錯(cuò)誤好多,改都要改好久
改好了嗎?麻煩傳一個(gè)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1