1 引言
在現代通信、電子測量、教學科研等領域中,經常需要頻率信號源,而且一般要求可以數字控制,可用頻率信號發生器實現。一般要求信號建立時間短,輸出頻率的穩定。本題利用89S51/52單片機定時器/計數器的功能產生連續的低頻方波信號、結構簡單、外圍元器件較少、程序可以反復下載和隨時改變頻率大小定時量.在教學實驗中得到廣泛的應用。
2 硬件設計
信號發生器由三部分電路組成復位電路、時鐘電路、由指撥開關和排阻組成存儲器設置電路。
指撥開關的狀態由單片機的P2端口輸入,利用指撥開關S1~S8設定輸出的頻率。若S1開關on的話,不管其他開關是什么狀態,OUTPUT端輸出100 KHZ;若S1開關off,S2開關on的話,不管其他開關是什么狀態,OUTPUT端輸出50 KHZ;若S1開關off,S2開關off,S3開關on的話,不管其他開關是什么狀態,OUTPUT端輸出10 KHZ;若S1開關off,S2開關off,S3開關off,S4開關on的話,不管其他開關是什么狀態,OUTPUT端輸出5 KHZ;若S1開關off,S2開關off,S3開關off,S4開關off,S5開關on的話,不管其他開關是什么狀態,OUTPUT端輸出1 KHZ;若S1開關off,S2開關off,S3開關off,S4開關off,S5開關off的話,S6開關on的話,不管其他開關是什么狀態,OUTPUT端輸出500 KHZ;若S1開關off,S2開關off,S3開關off,S4開關off,S5開關off的話,S6開關off的話,S7開關on的話,不管其他開關是什么狀態,OUTPUT端輸出100 KHZ;;若S1開關off,S2開關off,S3開關off,S4開關off,S5開關off的話,S6開關off的話,S7開關off的話,S8開關on的話,不管其他開關是什么狀態,OUTPUT端輸出50 KHZ;開關on為0,off為1。如表1:
若f=100khz,則T=10us,輸出脈沖每5us變化一次。如圖1:
對所要產生的信號整理如表2。
設計89S51/52單片機P2端口為輸入口,P0.0為輸出端口在經過非門輸出,原理圖如圖2。
3 軟件設計
在此編寫一個定時中斷子程序FG_timer,而其定時量將隨指撥開關的設定而定時,假如S1接通,FG_timer的定時量為5,每次5us中斷一次,而中斷時就將反相輸出可得到100KHZ的頻率,主程序流程圖如圖3。
89s51/52單片機定時器/計數器有兩種應用方式:一種是中斷方式,第二種查詢方式;若采用中斷方式,須五個步驟 即定時器/計數器中斷的設定 計數量的設定啟動定時器/計數器以及中斷子程序;若采用查詢方式,則不需要中斷設定,也不需要中斷子程序,只要設定計數量及啟動定時器/計數器,然后就判斷定時器/計數器的標志位(TFx)是否動作,已決定程序的流程。本文采用的查詢方式
軟件程序如下:
#include <reg51.h> //定義8051寄存器的頭文件
#define TH_M1(65536-count)/256 // T0(MODE1) 計數高8位
#define TL_M1(65536-count)%256 // T0(MODE1) 計數低8位
unsigned int count=0; //T0(MODE1) 的計數值
Sbit output=P0^0; //聲明輸出端口
Sbit s1=P2^0; //聲明指撥開關s1~s8位置
Sbit s2=P2^1;
Sbit s3=P2^2;
Sbit s4=P2^3;
Sbit s5=P2^4;
Sbit s6=P2^5;
Sbit s7=P2^6;
Sbit s8=P2^7;
void mian( ) //主程序開始
{
IE=0x82; //啟用TF0中斷
TMOD=0x01; //T0采用mode 1
output=1; //輸出端口初值為1
P2=0xff; //設計P2輸入口
While(1)
{
if(s1= =0)count=5; //按下s1,輸出100KHZ
else if(s1= =0)count=10; //按下s2,輸出50KHZ
else if(s1= =0)count=50; //按下s3,輸出10KHZ
else if(s1= =0)count=100; //按下s4,輸出5KHZ
else if(s1= =0)count=500; //按下s5,輸出1KHZ
else if(s1= =0)count=1000;//按下s6,輸出500HZ
else if(s1= =0)count=5000;//按下s7,輸出100 HZ
else if(s1= =0)count=10000; //按下s8,輸出50HZ
TH0=TH_M1; //設置T0計數量高8位
TL0=TL_M1; //設置T0計數量低8位
TR0=1; //啟動T0
While(TF0= =0); //等待中斷(TF0= =1)
TF0=0; //中斷后,清除TF0,關閉T0
output=~output; //輸出反相
}
}
根據功能的需求與電路結構編寫程序,然后將該程序編譯與鏈接,以生成*.HEX文件。
在Keil C里進行軟件的調試與仿真,看看其功能正常與否?其在仿真正常,將軟件程序燒錄到89s51/52單片機上,再把該89s51/52單片機放入設計好的電路里.以取代剛才的在線仿真器。
4 結束語
經過硬、軟件的設計、制作與調試, 本裝置實現了性能優良的波形發生器,具有線路簡單、易于操作、價格低廉、性能優越、便于維護等優點,在單片機應用領域中值得推廣,信號源在各種領域必定有著廣闊的應用前景。
參考文獻:
[1] 張毅剛.新編MCS-51單片機應用設計[M].哈爾濱:哈爾濱工業大學出版社,2003.
[2] 張義和,王敏男,許宏昌.例說51單片機(C語言版)[M].北京:人民郵電出版社,2008.
[3] 郭天祥.51單片機C語言教程[M].北京:電子工業出版社,2009.
[4] 劉玉利.基于單片機DDS多波形發生器設計[J]:自動化技術與應用.2011,(8):56-59.
[5] 求是科技.8051系列單片機C程序設計完全手冊[M].北京:人民郵電出版社,2006.
作者簡介:徐堅(1968-),男,助理工程師,研究方向:單片機相關產品開發與設計。