【摘要】本文針對單片機(jī)項(xiàng)目設(shè)計(jì)中出現(xiàn)的問題和基本方法,提出了將Proteus仿真軟件和Keil軟件引入到單片機(jī)項(xiàng)目式開發(fā)中。以“單片機(jī)雙機(jī)通信實(shí)驗(yàn)”項(xiàng)目為例,詳細(xì)闡述Proteus軟件在單片機(jī)課程教學(xué)中的使用方法和仿真調(diào)試過程。實(shí)踐證明,該方法能激發(fā)開發(fā)熱情,鍛煉創(chuàng)新能力和單片機(jī)軟硬件綜合開發(fā)能力,是提高單片機(jī)開發(fā)效率和設(shè)計(jì)產(chǎn)品質(zhì)量的一種有效方法。
【關(guān)鍵詞】單片機(jī)開發(fā);Proteus軟件;仿真調(diào)試
引言
單片機(jī)開發(fā)是一項(xiàng)綜合性、實(shí)踐性、應(yīng)用性很強(qiáng)的技術(shù)。傳統(tǒng)的單片機(jī)開發(fā)采用“先理論設(shè)計(jì),再動(dòng)手實(shí)驗(yàn)”的開發(fā)模式,該模式造成編程與之實(shí)驗(yàn)結(jié)果分離,不便于調(diào)試,效果并不理想。鑒于此,本文將Proteus和引入到單片機(jī)的項(xiàng)目式開發(fā)中,通過仿真的直觀性和真實(shí)感,不僅節(jié)約了硬件資源的投入,而且提高了單片機(jī)開發(fā)效率和產(chǎn)品質(zhì)量。
一、Proteus簡介
Proteus軟件是英國Labcenter electronics公司開發(fā)的電路分析與實(shí)物仿真軟件,它除了具有其他EDA工具的原理布圖、PCB自動(dòng)或人工布線、電路仿真等功能外,Proteus最大的特點(diǎn)是基于微控制器的設(shè)計(jì)連同所有的外圍電路一起仿真,可直接在單片機(jī)虛擬系統(tǒng)上對MCU編程,并可對軟件源代碼進(jìn)行實(shí)時(shí)調(diào)試。同時(shí),它具有電路互動(dòng)仿真功能,通過動(dòng)態(tài)外設(shè)模型,如鍵盤、LED/LCD等,可實(shí)時(shí)顯示系統(tǒng)輸入、輸出結(jié)果,以實(shí)現(xiàn)交互仿真,或配合Proteus配置的虛擬儀器如示波器、邏輯分析儀等,使單片機(jī)虛擬系統(tǒng)實(shí)現(xiàn)預(yù)期的實(shí)驗(yàn)效果。
此處還需要用Keil軟件來協(xié)助。Keil軟件是美國Keil Software公司出品的兼容單片機(jī)C語言軟件的開發(fā)系統(tǒng),是目前世界上最好的51單片機(jī)開發(fā)工具之一。它提供了豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,生成的目標(biāo)代碼效率高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。
Proteus和Keil各自都可以進(jìn)行仿真調(diào)試,但效果不是很理想,如把兩者結(jié)合起來相互配合,則可發(fā)揮Proteus和Keil的優(yōu)勢使其在仿真過程中的軟件調(diào)試和硬件設(shè)計(jì)更加便捷、高效。
二、仿真項(xiàng)目教學(xué)案例
(一)項(xiàng)目要求
本項(xiàng)目要求用兩片AT89C51單片機(jī)實(shí)現(xiàn)A機(jī)檢測輸入鍵盤信息,并通過串行通信方式,傳送給B機(jī),在B機(jī)用數(shù)碼管顯示A機(jī)所按下的對應(yīng)按鍵代號(hào),“0-9”顯示對應(yīng)數(shù)字,其余按鍵顯示“-”。
(二)任務(wù)分析
項(xiàng)目開發(fā)過程是緊緊圍繞一個(gè)或多個(gè)完整的項(xiàng)目展開的,因此項(xiàng)目的設(shè)計(jì),是單片機(jī)課程教學(xué)成敗的關(guān)鍵。按照本項(xiàng)目要求,通過分析,該項(xiàng)目實(shí)際上是一個(gè)雙機(jī)單向通信項(xiàng)目,只要掌握了該項(xiàng)目,雙向通信問題不難理解。具體思路是:
1.A、B單片機(jī)均采用AT89C51,A機(jī)須完成矩陣鍵盤掃描識(shí)別、鍵盤代碼串行傳送兩項(xiàng)任務(wù)。B機(jī)須完成串行接收代碼、數(shù)碼顯示兩項(xiàng)任務(wù)。本項(xiàng)目程序的關(guān)鍵就是串行通信程序部分。
2.A機(jī)通過檢測P2口外接的矩陣鍵盤信息,并進(jìn)行識(shí)別處理,產(chǎn)生相應(yīng)的鍵盤代碼,然后通過串行發(fā)送端TXD/P3.1發(fā)送給B機(jī);
3.B機(jī)收到A機(jī)發(fā)送的鍵盤代碼后,通過處理,從P0口輸出七段數(shù)碼管段碼信號(hào),驅(qū)動(dòng)共陽極七段數(shù)碼管顯示鍵盤代碼。
圖1
圖2
圖3
(三)硬件仿真圖繪制
通過以上的任務(wù)分析,我們先設(shè)計(jì)出硬件電路,并將電路在Proteus中繪制出來。電源電路用5V,具體電路省略。時(shí)鐘電路用來產(chǎn)生時(shí)鐘信號(hào)供單片機(jī)工作,晶振采用12MHz,平衡電容采用33pF。復(fù)位電路在系統(tǒng)上電或運(yùn)行過程中對單片機(jī)進(jìn)行初始化操作。
圖4
圖5
1.單片機(jī)最小系統(tǒng)
本案例所用單片機(jī)型號(hào)為AT89C51,其結(jié)構(gòu)簡單,控制靈活。其最小系統(tǒng)主要包括主芯片、電源電路、時(shí)鐘電路、復(fù)位電路。
2.本例單片機(jī)最小系統(tǒng)
在這里要特別說明的是,在Proteus中單片機(jī)可以默認(rèn)以最小系統(tǒng)工作。即可以不加上電源電路、復(fù)位電路、時(shí)鐘電路也可以工作。不過為了便于直觀觀察,我們還是畫出這些路。在繪制時(shí),雙機(jī)只畫出單機(jī)的這些電路,另一個(gè)不畫。并且為了不產(chǎn)生標(biāo)號(hào)沖突,B機(jī)的引腳標(biāo)號(hào)用數(shù)字表示。
本例中A機(jī)的主電路、電源電路、時(shí)鐘電路、復(fù)位電路見附圖。B機(jī)的系統(tǒng)圖和A機(jī)系統(tǒng)大同小異。
3.本例輸入、輸出系統(tǒng)及通信連接
本例中的輸入系統(tǒng)是矩陣鍵盤電路,從A機(jī)輸入。利用P2口作為鍵盤檢測口,P2.0-P2.3為行線掃描,P2.4-P2.7為列線檢測。
本例中的通信連接是將雙機(jī)的RXD和TXD兩腳,即P3.0和P3.1交叉相邊即可。B機(jī)的這兩腳標(biāo)號(hào)和A機(jī)對應(yīng)。
本例中的輸出系統(tǒng)是單個(gè)LED共陽數(shù)碼管顯示電路,從B機(jī)P0輸出段碼控制信號(hào)。
4.本例硬件仿真總圖見附1。
(四)軟件系統(tǒng)流程圖
A機(jī)主程序流程圖如圖1所示,鍵盤掃描檢測程序流程圖如圖2所示,B機(jī)主程序流程圖如圖3所示。具體的程序見附3。編程輸入Kei uVsion4軟件并生成A機(jī)和B機(jī)的”.hex”格式可執(zhí)行文件。
圖6
圖7
圖8
附1 雙機(jī)通信實(shí)驗(yàn)仿真電路原理圖
附2 電源原理圖
(五)Proteus ISIS載入仿真
1.加加載源程序和目標(biāo)程序文件、目標(biāo)代碼文件、設(shè)置時(shí)鐘頻率
在ISIS菜單中單擊Source(源程序),彈出下拉菜單,點(diǎn)擊“Add/Remove Source File…”,彈出如圖1.9所示的對話框,選取A機(jī)芯片,點(diǎn)擊 ,加入源程序“雙機(jī)通信實(shí)驗(yàn)A機(jī)發(fā)送程序.C”,如圖4所示;選取B機(jī)芯片,點(diǎn)擊 ,加入源程序“雙機(jī)通信實(shí)驗(yàn)B機(jī)接收程序.C”,如圖5所示。點(diǎn)擊確定。
在ISIS編輯窗口中雙擊A機(jī)AT89C51芯片,在彈出的對話框中點(diǎn)擊如圖6所示的按鈕,選擇前面所生成的“雙機(jī)通信實(shí)驗(yàn)A機(jī)發(fā)送程序.hex”代碼文件,再在Clock Frequency:欄中設(shè)置時(shí)鐘為12MHz,點(diǎn)擊“OK”即可。B機(jī)同樣設(shè)置。如圖7所示。
2.PROTEUS交互仿真
代碼裝載完畢后即可進(jìn)行仿真,只需點(diǎn)擊運(yùn)行仿真按鈕即可運(yùn)行仿真。仿真運(yùn)行效果如圖8所示。
(六)本例仿真電路原理圖及程序部分源代碼
1.本例仿真電路原理圖(附1、附2)
2.本例程序部分源代碼(附3)
A機(jī)檢測發(fā)送程序:
#include lt;at89x51.hgt;
#define uchar unsigned char
#define uint unsigned int
#define key_4x4_port P2 "http://定義P3口為鍵盤輸入
uchar key; " "http://按鍵值
void delayms(uint xms);//1ms延時(shí)程序
void key_4x4_scan(); " "http://鍵盤掃描指示程序
uchar d[11]={0,1,2,3,4,5,6,7,8,9,10}; //發(fā)送的數(shù)據(jù)
void delay();
/*--------------Xms延時(shí)程序----------------*/
void delayms(uint xms)
{ " " " "uint i,j;
for(i=xms;igt;0;i--) //i=xms時(shí)延時(shí)xms
for(j=110;jgt;0;j--);
}
/*---------------鍵盤掃描指示程序--------------*/
{省略}
/*---------------A機(jī)檢測發(fā)送程序--------------*/
main(){
uchar i;
PCON=0x80;//波特率加倍
SCON=0x40;//方式1,波特率與T1溢出率相關(guān)
TMOD=0x20;//T1方式2
TH1=0xfd;//串口速度為19.2Kb/s
TL1=0xfd;
TR1=1;//啟動(dòng)T1
while(1){
key_4x4_scan();
SBUF=d[key];//啟動(dòng)串口并發(fā)送數(shù)據(jù)
while(1)
{
if(TI==1)
{//檢測,發(fā)送完發(fā)送下一數(shù)據(jù)
TI=0;//清中斷
break;
}
}
delay();//發(fā)送速度控制
}
}
void delay(){
unsigned int i;
for(i=0;ilt;40;i++){
}
}
B機(jī)接收顯示程序:
#include lt;at89x51.hgt;
unsigned char code d[11]= "http://LED字符碼
{ "0xc0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90,0xbf
};
main(){
PCON=0x80;//波特率加倍
SCON=0x50;//方式1,允許接收
IE=0x90;//開串口中斷
TMOD=0x20;//T1方式2
TH1=0xfd;//串口速度為19.2Kb/s
TL1=0xfd;
TR1=1;//啟動(dòng)T1
while(1){
if(RI==1){//檢測
P0=d[SBUF];//顯示
RI=0;//清中斷
}
}
}
三、結(jié)論
通過本次實(shí)驗(yàn),可以熟悉單片機(jī)串行通信的編程方法,提高鍵盤掃描檢測程序、定時(shí)器的使用技巧,熟悉ProteusISIS的使用方法,將其與Keil uVsion4有機(jī)結(jié)合,使用該軟件有利于直觀觀察仿真結(jié)果,培養(yǎng)單片機(jī)綜合應(yīng)用能力,明顯地提高單片機(jī)開發(fā)效率和教學(xué)質(zhì)量。
參考文獻(xiàn)
[1]谷秀榮,單片機(jī)原理與應(yīng)用(C51版),北京交大出版社,2009.7.
[2]李全利.單片機(jī)原理及應(yīng)用技術(shù).北京:高等教育出版社,2001.7.