|
給51黑電子論壇的朋友們分享一個(gè)用51單片機(jī)做的模擬低頻DDS信號(hào)發(fā)生器系統(tǒng),帶proteus仿真工程文件加單片機(jī)源程序.
下面是仿真原理圖:
DDS信號(hào)發(fā)生器的部分單片機(jī)源程序:
- #include "sin_dds.h"
- uchar i,j;
- uint counter,step;
- /**************定時(shí)器0初始化**********************************/
- void Init_Timer0(void)
- {
- TMOD = (TMOD & 0XF0) | 0X01; //定時(shí)器0,方式1
- TH0 = 0xff; //定時(shí)器初值
- TL0 = 0xff;
- TR0 =1; //啟動(dòng)定時(shí)器0
- ET0 =1; //開定時(shí)器0中斷
- }
- /*************************主函數(shù)*********************************/
- main()
- {
- Init_Timer0(); //定時(shí)器0初始化
- step=2; //數(shù)值采樣步數(shù)初始化
- EA = 1; //CPU開中斷
- while(1)
- {
- if(key_up == 0) if(step<4096) step++; //數(shù)值采樣步數(shù)加1,采樣頻率變高 ,正弦波周期變小
- if(key_dw == 0) if(step>1) step--; //數(shù)值采樣步數(shù)減1,采樣頻率變低 ,正弦波周期變大
- while((!key_up)||(!key_dw)); //若有一個(gè)鍵按下去,則正弦波周期始終保持不變
- }
- }
- /******************系統(tǒng)OS定時(shí)中斷服務(wù)***************************/
- void OS_Timer0(void) interrupt 1 using 2
- {
- TH0 = 0xff; //重裝定時(shí)器初值
- TL0 = 0xff;
- counter = counter + step; //counter以step的步數(shù)遞增
- dac1=type[(unsigned int)counter>>8]; //當(dāng)counter加滿(256/step)次時(shí),dac1的采樣值變化一次
- }
復(fù)制代碼
全部資料下載(含仿真工程文件和完整代碼):
單片機(jī)模擬低頻DDS信號(hào)發(fā)生器系統(tǒng).rar
(16.78 KB, 下載次數(shù): 108)
2017-3-17 23:03 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|