久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
STC8F2K16S2單片機AD9833波形發(fā)生器程序 輸出3種波形頻率相位
[打印本頁]
作者:
chensq
時間:
2019-8-7 11:04
標(biāo)題:
STC8F2K16S2單片機AD9833波形發(fā)生器程序 輸出3種波形頻率相位
這是我編寫的基于國產(chǎn)51單片機芯片STC8F2K16S2的AD9833波形發(fā)生器驅(qū)動程序,可以輸出不同頻率以及相位的波形,可以輸出正弦波,三角波以及方波,其中附帶AD9833的中文數(shù)據(jù)手冊,不易獲得,請珍惜。
單片機源程序如下:
#include <reg52.h>
#include <intrins.h>
sbit f_sync = P3^5;
sbit s_clk = P3^2;
sbit s_data = P3^3;
#define DDS_SCLK_UP s_clk=1
#define DDS_SCLK_DOWN s_clk=0
#define DDS_SDATA_UP s_data=1
#define DDS_SDATA_DOWN s_data=0
#define DDS_FSYNC_UP f_sync=1
#define DDS_FSYNC_DOWN f_sync=0
//#define BITB 0x0800
//AD9833輸入時鐘值
unsigned long int MCLK=6000000;
unsigned char p=3.141592653589793;
//寄存器配置數(shù)組
unsigned int Config_Data[8];
//頻率
unsigned long int code freq[5]={7500,10000,20000,30000,40000};
//函數(shù)聲明
static void delay2us(unsigned char i);
static void changeFreq(unsigned char key);
static unsigned char getKeyValue();
void writeDDS2Byte(unsigned int config);
void waveGenerate(unsigned long int frequency,unsigned int phase,unsigned char signal_type);
void main(void)
{
// unsigned char key_temp,key;
// //用單片機P1口高5bit來選擇頻率
// key=getKeyValue();
// changeFreq(key);
// while(1)
// {
// key_temp=getKeyValue();
// if(key!=key_temp)
// {
// key = key_temp;
// changeFreq(key);
// }
// }
waveGenerate(freq[4],2*p,0);
}
//static unsigned char getKeyValue()
//{
// unsigned char cnt;
// unsigned char key_first,key_second;
// key_first = P1&0xF8;
// for(cnt=0; cnt<100; --cnt );
// key_second = P1&0xF8;
// if( key_first == key_second )
// return key_second;
// else
// return 255;
//}
//static void changeFreq(unsigned char key)
//{
// switch(key)
// {
// case 0xF0://s5
// waveGenerate(freq[4],0);
// P2 = 0x00;
// break;
// case 0xE8://s4
// waveGenerate(freq[3],0);
// P2 = 0x01;
// break;
// case 0xD8://s3
// waveGenerate(freq[2],0);
// P2 = 0x02;
// break;
// case 0xB8://s2 X3
// waveGenerate(freq[1],0);
// P2 = 0x03;
// break;
// case 0x78://s1 X4
// waveGenerate(freq[0],0);
// P2 = 0x04;
// break;
// default:
// waveGenerate(freq[0],0);
// P2 = 0x04;
// break;
// }
//}
/*******************************************************************
* 功能:波形發(fā)生器
*
* 入口參數(shù): frequency: 期望得到的信號頻率 (frequency<MCLK)
*
* phase:期望得到的相位
*
* signal_type:0正弦波1(三角波),2(方波)
*
* 默認(rèn)配置: 0相移,方波不分頻
*******************************************************************/
void waveGenerate(unsigned long int frequency,unsigned int phase,unsigned char signal_type)
{
unsigned char k;
unsigned long int freq_temp;
unsigned int phase_temp;
if(frequency>MCLK)
frequency=MCLK;
switch(signal_type)
{
case 0://正弦波
Config_Data[0]=0x2108;//控制寄存器配置值,復(fù)位片內(nèi)其他寄存器,AD9833上電時,期間應(yīng)復(fù)位,要使AD9833復(fù)位應(yīng)將reset位置1,即bit8置1,要通過Vout引腳提供正弦波輸出,應(yīng)將mode(D1)bit清0并將OPBITEN(D5)bit清0,當(dāng)DIV2=1時即bit3=1,DAC的MSB被直接送至Vout引腳
Config_Data[7]=0x2008;//控制寄存器配置值,不復(fù)位片內(nèi)其他寄存器,要使AD9833退出復(fù)位,應(yīng)將該位清零,即bit8位清零,要通過Vout引腳提供正弦波輸出,應(yīng)將mode(D1)bit清0并將OPBITEN(D5)bit清0,當(dāng)DIV2=1時即bit3=1,DAC的MSB被直接送至Vout引腳
break;
case 1://三角波
Config_Data[0]=0x210A;//控制寄存器配置值,復(fù)位片內(nèi)其他寄存器,AD9833上電時,期間應(yīng)復(fù)位,要使AD9833復(fù)位應(yīng)將reset位置1,即bit8置1,要通過Vout引腳提供三角波輸出,應(yīng)將mode(D1)1,DIV2=1時即bit3=1,DAC的MSB被直接送至Vout引腳
Config_Data[7]=0x200A;//控制寄存器配置值,不復(fù)位片內(nèi)其他寄存器,要使AD9833退出復(fù)位,應(yīng)將該位清零,即bit8位清零,要通過Vout引腳提供三角波輸出,應(yīng)將mode(D1)置1,DIV2=1時即bit3=1,DAC的MSB被直接送至Vout引腳
break;
case 2://方波,不分頻
Config_Data[0]=0x2128;//控制寄存器配置值,復(fù)位片內(nèi)其他寄存器,AD9833上電時,期間應(yīng)復(fù)位,要使AD9833復(fù)位應(yīng)將reset位置1,即bit8置1,當(dāng)OPBITEN(D5)置1,mode(D1)清0,DIV2=1時即bit3=1,Vout輸出DAC數(shù)據(jù)MSB
Config_Data[7]=0x2028;//控制寄存器配置值,不復(fù)位片內(nèi)其他寄存器,要使AD9833退出復(fù)位,應(yīng)將該位清零,即bit8位清零,當(dāng)OPBITEN(D5)置1,mode(D1)清0,DIV2=1時即bit3=1,Vout輸出DAC數(shù)據(jù)MSB
break;
default://正弦波
Config_Data[0]=0x2108;
Config_Data[7]=0x2008;
break;
}
//freq_temp=frequency*(2^28/MCLK),MCLK=6Mhz?,2^28/MCLK約等于44.739242666666669
//phase_temp=phase*(4096/2p),p=3.141592653589793
freq_temp=frequency*44.739242666666669; //載入所選頻率寄存器的值,此信號會經(jīng)過如下相位偏移處理,2?/4096*PHASEREG,PHASEREG是所選相位輸出頻率和參考時鐘頻率之間的關(guān)系,必須考慮所選輸出頻率和參考時鐘頻率之間的關(guān)系,以免產(chǎn)生不良的輸出異常
phase_temp=phase*651.898646904403295309;
Config_Data[1]=freq_temp&0x3fff;//先將bit15,bit14位清0,控制字寫入
Config_Data[3]=Config_Data[1];//先將bit15,bit14位清0,控制字寫入
Config_Data[2]=(freq_temp&0x0fffc000)>>14;//先將bit15,bit14位清0,控制字寫入
Config_Data[4]=Config_Data[2];//先將bit15,bit14位清0,控制字寫入
Config_Data[5]=phase_temp&0x1fff;
Config_Data[5]=Config_Data[6];
Config_Data[1]=Config_Data[1]|0x4000;//(頻率寄存器)FREQ0 14 LSBs,bit15=0,bit14=1,F(xiàn)REQ0寄存器寫入
Config_Data[2]=Config_Data[2]|0x4000;//(頻率寄存器)FREQ0 14 MSBs,bit15=0,bit14=1,F(xiàn)REQ0寄存器寫入
Config_Data[3]=Config_Data[3]|0x8000;//(頻率寄存器)FREQ1 14 LSBs,bit15=1,bit14=0,F(xiàn)REQ1寄存器寫入
Config_Data[4]=Config_Data[4]|0x8000;//(頻率寄存器)FREQ1 14 MSBs,bit15=1,bit14=0,F(xiàn)REQ1寄存器寫入
// Config_Data[5]=0xC000;//(相位寄存器)PHASE0
// Config_Data[6]=0xE000;//(相位寄存器)PHASE1
Config_Data[5]=Config_Data[5]|0xC000;//(相位寄存器)PHASE0,bit15=1,bit14=1,bit13=0,PHASE0寄存器寫入
Config_Data[6]=Config_Data[6]|0xE000;//(相位寄存器)PHASE1,bit15=1,bit14=1,bit13=1,PHASE1寄存器寫入
for(k=0;k<8;k++)
{
writeDDS2Byte(Config_Data[k]);
}
}
/***********************************************************************************************
*
* 軟件模擬SPI
*
* 向AD9833寫入數(shù)據(jù)或控制信息時,F(xiàn)SYNC應(yīng)處于低電平并保持低電平,直到數(shù)據(jù)的16個位均已寫入AD9833為止,F(xiàn)SYNC信號以幀方式傳輸要載入AD9833的16位信息
*
* 向AD9833發(fā)送數(shù)據(jù)時,F(xiàn)SYNC被拉低,單片機以8位字節(jié)傳輸數(shù)據(jù),因此每個周期中只有8個SCLK下降沿,要向AD9833中載入剩余的8個位,F(xiàn)SYNC應(yīng)在第一批8個位傳輸完成后保持低電平,同時啟動第二次寫操作來傳輸數(shù)
* 據(jù)的第二個字節(jié),第二次寫操作結(jié)束后FSYNC被拉高,SCLK應(yīng)在兩次寫操作之間處于高電平空閑狀態(tài)
*
************************************************************************************************/
void writeDDS2Byte(unsigned int config)
{
unsigned char i;
DDS_SCLK_DOWN;//拉低SCLK
_nop_();//延時
DDS_FSYNC_UP;//拉高FSYNC
_nop_();//延時
DDS_SCLK_UP;//拉高SCLK
delay2us(1);//延時1us
DDS_FSYNC_DOWN;//發(fā)送數(shù)據(jù)時,F(xiàn)SYNC拉低
_nop_();
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
0.png
(5.44 KB, 下載次數(shù): 37)
下載附件
2019-8-7 21:24 上傳
所有資料51hei提供下載:
超聲波驅(qū)動.7z
(10.66 MB, 下載次數(shù): 150)
2019-8-7 21:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
51hei團(tuán)團(tuán)
時間:
2019-8-7 21:29
好資料,51黑有你更精彩!!!
作者:
51hei團(tuán)團(tuán)
時間:
2019-8-7 21:31
好資料,51黑有你更精彩!!!
作者:
zhiren
時間:
2019-8-7 21:51
好資料,51黑有你更精彩!!!
作者:
Ljp989A
時間:
2019-10-10 14:38
好資料,謝謝樓主!
作者:
qq1182560902
時間:
2019-10-13 23:35
寫的不錯,加油
作者:
爹爹
時間:
2020-6-16 07:11
樓主問您一下,AD9833的GND和VCC應(yīng)該和單片機的什么引腳連在一起
作者:
陳初學(xué)
時間:
2020-6-25 13:06
好資料,謝謝樓主
作者:
陳新雅
時間:
2021-4-1 13:56
想問下樓主AD轉(zhuǎn)換器和stc8f2k16s2單片機怎么連接驅(qū)動的,還有驅(qū)動程序是你寫的這個嘛
作者:
enochenoch
時間:
2025-5-16 19:25
太好了,正需要啊
作者:
長風(fēng)007
時間:
2025-6-25 09:47
及時雨,正在研究這一塊。
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
超碰在线小说
|
四虎在线视频
|
四虎视频在线观看
|
国产乱码一区二区三区
|
欧美精品一二三
|
国产精品高潮呻吟av
|
美日韩精品
|
91看片在线
|
成人毛片网站
|
欧美日韩在线观看视频
|
亚洲视频一区二区三区
|
国产又粗又大又爽
|
精品1区
|
成人欧美一区二区三区黑人孕妇
|
日韩免费一级片
|
在线观看免费毛片
|
成人一级视频
|
欧美资源在线
|
色鬼久久
|
91av在线播放
|
国产视频在线观看视频
|
日日干日日干
|
欧美日在线
|
亚洲精品乱码久久久久久蜜桃91
|
国产手机在线视频
|
国产精品毛片一区二区在线看
|
欧美人xxxx
|
久热精品视频
|
久久久久久一区
|
国产在线一区二区三区
|
久草资源站
|
国产成人在线免费观看
|
亚洲午夜av
|
青青国产
|
一级免费片
|
99热超碰
|
日韩欧美中文字幕在线观看
|
人人干人人艹
|
亚洲视频免费
|
可以在线观看的av
|
久久高清免费视频
|