日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ad9850c语言编程,AD9850与单片机波形生成程序及设计

發布時間:2023/12/31 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ad9850c语言编程,AD9850与单片机波形生成程序及设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述=================================================

AD9850/AD9851模塊是采用ADI應用最廣泛的DDS(AD9850和AD9851)制作的模塊。ADI的性能就不用多說了。模塊主要參考AD9850和AD9851的資料做的。

主要功能特點:

*??模塊能夠輸出正弦波和方波,2個正弦波和2個方波輸出。

AD9850: 0-40MHz

AD9851: 0-70MHz

頻率在20-30MHz后諧波越來越大,波形會越來越不干凈。

方波:? ???0-1MHz

*??采用70MHz的低通濾波器,使波形的SN比更好

*??比較器的基準輸入端電壓由可變電阻產生,調節該電阻可以得到不同的占空比方波

注:在輸出正弦波的情況下,接線到方波輸出的IO口,直接調節藍色的電位器可輸出方波。

* AD9850模塊采用125MHz的有源晶振,AD9851模塊采用30MHZ的有源晶振

AD9850和AD9851主要區別

*??AD9850的時鐘頻率最高125MHz,AD9851的時鐘頻率最高180MHz。輸出最高頻率AD9851要比AD9850高。

* AD9850沒有6倍頻,AD9851有

功能框圖============================================================

1:下載對應的HEX程序

見AD9850_1_V4_C程序文件夾

OUT1和OUT2端能測試到對應輸出1KHz信號。如需測試方波,調節可變電位器,可在方波1和方波2端測試到方波。

單片機源程序如下:

//***************************************************//

//函數1: ? ? ? ? ? ad9851_reset() ? ? ? ? ? ? ? ? ? ?//

//函數2: ? ? ? ? ? ad9851_reset_serial() ? ? ? ? ? ? //

//函數3: ? ? ? ? ? ad9851_wr_parrel(unsigned char w0,double frequence)//

//函數4: ? ? ? ? ? ad9851_wr_serial(unsigned char w0,double frequence)//

//版本: ? ? ? ? ? ? ?V1.1 ? ? ? ? ? ? ? ? ? ? ? ? ? ?//

//***************************************************//

// ? ? ? ? ? ? ? ? ?子程序說明 ? ? ? ? ? ? ? ? ? ? ? //

//***************************************************//

//函數1: ?ad9851_reset()

// ? ? ? ?復位ad9851,之后為并口寫入模式

//函數2: ?ad9851_reset_serial()

// ? ? ? ?復位ad9851,之后為串口寫入模式

//函數3: ?ad9851_wr_parrel(unsigned char w0,double frequence)

// ? ? ? ?并口寫ad9851數據,w0為ad9851中w0的數據,frequence

// ? ? ? ?為寫入的頻率

//函數4: ?ad9851_wr_serial(unsigned char w0,double frequence)

// ? ? ? ?串口寫ad9851數據,w0為ad9851中w0的數據,frequence

// ? ? ? ?為寫入的頻率

//需定義的位:

//ad9851_w_clk ? ?;

//ad9851_fq_up ? ?;

//ad9851_rest ? ? ;

//ad9851_bit_data ;

//例:

//sbit ad9851_w_clk ? ?=P2^2;

//sbit ad9851_fq_up ? ?=P2^1;

//sbit ad9851_rest ? ? =P2^0;

//sbit ad9851_bit_data =P1^7;

//***************************************************//

// ? ? ? ? ? ? ? ? 寫數據說明 ? ? ? ? ? ? ? ? ? ? ? ?//

//***************************************************//

//寫數據例:

// ? ? ? ad9851_reset()

// ? ? ? wr_lcd02_data(unsigned char x)

// ? ? ? ad9851_wr_parrel(0x01,1000)

// ? ? ? ad9851_wr_serial(0x01,1000)

//***************************************************//

//---------------------------------------------------//

// ? ? ? ? ? ? ? ? ? 程序 ? ? ? ? ? ? ? ? ? ? ? ? ? ?//

//---------------------------------------------------//

# include # include # include sbit ad9851_w_clk ? ?=P2^2; ?//P2.2口接AD9851的w_clk腳/PIN7

sbit ad9851_fq_up ? ?=P2^1; ?//P2.1口接AD9851的fq_up腳/PIN8

sbit ad9851_rest ? ? =P2^0; ?//P2.0口接AD9851的rest腳/PIN12

sbit ad9851_bit_data =P1^7; ?//P1.7口接AD9851的D7腳/PIN25

//P1為8位數據口

//***************************************************//

// ? ? ? ? ? ? ?ad9851復位(并口模式) ? ? ? ? ? ? ? ? //

//---------------------------------------------------//

void ad9851_reset()

{

ad9851_w_clk=0;

ad9851_fq_up=0;

//rest信號

ad9851_rest=0;

ad9851_rest=1;

ad9851_rest=0;

}

//***************************************************//

// ? ? ? ? ? ? ?ad9851復位(并口模式) ? ? ? ? ? ? ? ? //

//---------------------------------------------------//

void ad9851_reset_serial()

{

ad9851_w_clk=0;

ad9851_fq_up=0;

//rest信號

ad9851_rest=0;

ad9851_rest=1;

ad9851_rest=0;

//w_clk信號

ad9851_w_clk=0;

ad9851_w_clk=1;

ad9851_w_clk=0;

//fq_up信號

ad9851_fq_up=0;

ad9851_fq_up=1;

ad9851_fq_up=0;

}

//***************************************************//

// ? ? ? ? ?向ad9851中寫命令與數據(并口) ? ? ? ? ? ? //

//---------------------------------------------------//

void ad9851_wr_parrel(unsigned char w0,double frequence)

{

unsigned char w;

long int y;

double x;

//計算頻率的HEX值

x=4294967295/180;//適合180M晶振/180為最終時鐘頻率(或30M六倍頻)

//如果時鐘頻率不為180MHZ,修改該處的頻率值,單位MHz !!!

frequence=frequence/1000000;

frequence=frequence*x;

y=frequence;

//寫w0數據

w=w0;

P1=w; ? ? ?//w0

ad9851_w_clk=1;

ad9851_w_clk=0;

//寫w1數據

w=(y>>24);

P1=w; ? ? ?//w1

ad9851_w_clk=1;

ad9851_w_clk=0;

//寫w2數據

w=(y>>16);

P1=w; ? ? ?//w2

ad9851_w_clk=1;

ad9851_w_clk=0;

//寫w3數據

w=(y>>8);

P1=w; ? ? ?//w3

ad9851_w_clk=1;

ad9851_w_clk=0;

//寫w4數據

w=(y>>=0);

P1=w; ? ? ?//w4

ad9851_w_clk=1;

ad9851_w_clk=0;

//移入始能

ad9851_fq_up=1;

ad9851_fq_up=0;

}

//***************************************************//

// ? ? ? ? ?向ad9851中寫命令與數據(串口) ? ? ? ? ? ? //

//---------------------------------------------------//

void ad9851_wr_serial(unsigned char w0,double frequence)

{

unsigned char i,w;

long int y;

double x;

//計算頻率的HEX值

x=4294967295/180;//適合180M晶振/180為最終時鐘頻率(或30M六倍頻)

//如果時鐘頻率不為180MHZ,修改該處的頻率值,單位MHz ?!!!

frequence=frequence/1000000;

frequence=frequence*x;

y=frequence;

//寫w4數據

w=(y>>=0);

for(i=0;i<8;i++)

{

ad9851_bit_data=(w>>i)&0x01;

ad9851_w_clk=1;

ad9851_w_clk=0;

}

//寫w3數據

w=(y>>8);

for(i=0;i<8;i++)

{

ad9851_bit_data=(w>>i)&0x01;

ad9851_w_clk=1;

ad9851_w_clk=0;

}

//寫w2數據

w=(y>>16);

for(i=0;i<8;i++)

{

ad9851_bit_data=(w>>i)&0x01;

ad9851_w_clk=1;

ad9851_w_clk=0;

}

//寫w1數據

w=(y>>24);

for(i=0;i<8;i++)

{

ad9851_bit_data=(w>>i)&0x01;

ad9851_w_clk=1;

ad9851_w_clk=0;

}

//寫w0數據

w=w0;

for(i=0;i<8;i++)

{

ad9851_bit_data=(w>>i)&0x01;

ad9851_w_clk=1;

ad9851_w_clk=0;

}

//移入始能

ad9851_fq_up=1;

ad9851_fq_up=0;

}

//***************************************************//

// ? ? ? ? ? ? ? ? ? 測試程序1000Hz ? ? ? ? ? ? ? ? ?//

//---------------------------------------------------//

main()

{

P0=0x00;

P1=0x00;

P2=0x00;

P3=0x00;

//---------------------------------------------------//

……………………

總結

以上是生活随笔為你收集整理的ad9850c语言编程,AD9850与单片机波形生成程序及设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。