0 引言
近年來,隨著制造技術(shù)的發(fā)展,單片機(jī)的價格越來越低,性能卻不斷提升,因而其應(yīng)用范圍也越來越廣,。然而在開發(fā)基于單片機(jī)的應(yīng)用系統(tǒng)時,傳統(tǒng)方法一般都需要大量的硬件設(shè)備,這些設(shè)備極易損壞而且攜帶不方便,。為此,,本文基于AT89C51數(shù)據(jù)采集系統(tǒng)詳細(xì)說明了如何利用Pro-teus和兩款串口仿真軟件來進(jìn)行單片機(jī)程序及外圍電路的仿真設(shè)計。采用該方法可以大大簡化硬件電路測試和系統(tǒng)調(diào)試過程,,對單片機(jī)系統(tǒng)開發(fā)具有指導(dǎo)意義,。本文介紹的基于AT89C5l單片機(jī)的數(shù)據(jù)采集系統(tǒng)能實現(xiàn)16路信號輸入,每一路都是0~10 mV的信號,,每秒鐘采集一遍,,從而將數(shù)據(jù)傳給上位PC計算機(jī)。
1 硬件設(shè)計
1.1 主控芯片
AT89C51是一種帶有4 KB閃爍可編程可擦除只讀存儲器的低電壓,,高性能CMOS 8位微處理器,,可為很多嵌入式控制系統(tǒng)提供靈活且價廉的方案。所以,,本設(shè)計采用ATMEL公司的AT89C51作為程序的主控芯片,。
AT89C51數(shù)據(jù)總線是由P0口提供的,P0口本身能以多種方式提供數(shù)據(jù)總線和地址總線,。當(dāng)ALE輸出信號為高電平時,,P0將輸出的數(shù)據(jù)鎖入總線驅(qū)動器中作為地址的低8位,然后和P2送出來的高8位地址一起組成一個完整的16位地址,,以尋址到外部的64KB的地址空間,。AT89C51的地址總線比較簡單(只有3個:RD、WR,、PSEN),,其中RD是用來讀取外部數(shù)據(jù)內(nèi)存的控制線,WR是用來寫數(shù)據(jù)到外部數(shù)據(jù)內(nèi)存的控制線,,PSEN是用來存取外部程序內(nèi)存的讀取控制線,。
由于P0口是數(shù)據(jù)和地址分時復(fù)用口,故要進(jìn)行地址鎖存,,本設(shè)計使用74HC573作為鎖存器,。
1.2 系統(tǒng)硬件電路
本系統(tǒng)的硬件電路原理如圖1所示。因為ADC0809的地址選擇端A,、B,、C都接地,,所以ADC0809的數(shù)據(jù)采集通道只有IN0被選通,。16路模擬信號連接到多路選擇模擬開關(guān)HCC4067后,即可通過地址選擇端A,、B,、C、D進(jìn)行選擇,每一次選通一路,,選通的通道經(jīng)IO COM X和ADC0809的IN0相連,,以進(jìn)行A/D轉(zhuǎn)換。P2.7(地址總線最高位A 15)可作為A/D轉(zhuǎn)換的啟動開關(guān),,P2.7為低電平有效,。在啟動A/D轉(zhuǎn)換時,可由寫信號WR和P2.7控制ADC0809的地址鎖存和轉(zhuǎn)換啟動,。而在讀取轉(zhuǎn)換結(jié)果時,,則由讀信號RD和P2.7控制ADC0809的OE信號。若令P2.7為0,,74HC573的A,、B、C,、D即可給出被選擇的模擬通道的地址,,此時若ABCD=0000,則16路信號的100被選通,,并將其數(shù)據(jù)送到ADC0809的IN0中,,地址是7FF0H;若ABCD:1111,,地址為7FFFH,,則指向IO15。所以,,16路信號依次對應(yīng)的地址為7FFOH~7FFFH,。轉(zhuǎn)換完成后,數(shù)據(jù)將保存到一數(shù)組中,,直到當(dāng)上位PC機(jī)通過串行口發(fā)信號時,,AT89C51通過檢測地址是否和本機(jī)地址相符來作出動作。如果地址相符,,則發(fā)送A/D轉(zhuǎn)換結(jié)果,,如不相符,則繼續(xù)等待,。
1.3 信號選通與調(diào)理
本系統(tǒng)要求有16路模擬信號輸入,,而且必須將這些信號互相隔離,然后才能對這些信號逐一選通后進(jìn)入A/D轉(zhuǎn)換,。為此,,本系統(tǒng)選用了16選1多路模擬開關(guān)HCC4067。
一般傳感器的輸出信號都比較微弱,,要將該微弱信號轉(zhuǎn)換成有用的信號以便于后期使用,,就要加入信號調(diào)理電路,,其作用是進(jìn)行信號放大和去除干擾等。本設(shè)計中的信號輸入每路都是0~10mV.但ADC0809的輸入要求是0~5 V,,因此選用運算放大器OP07來進(jìn)行信號放大,。OP07是一種精密運算放大器,它使用雙極性電源供電,,精度較高,,放大倍數(shù)為500,可把0~10 mV信號放大到0~5 V,。使用OP07的信號調(diào)理電路如圖2所示,。
1.4 A/D采樣電路
ADC0809是美國NS公司生產(chǎn)的CMOS組件,是一種8路輸入單片模數(shù)轉(zhuǎn)換器件,,采用逐位逼近式A/D轉(zhuǎn)換原理,,它的輸出輸人接口全部為TTL電平,數(shù)據(jù)輸出口線為三態(tài),,可以直接接到微機(jī)系統(tǒng)總線上,,而無需另加I/O接口芯片。
由于本設(shè)計中使用16選1模擬開關(guān)來進(jìn)行信號的選擇,,因此,,ADC0809的信號選擇功能就不使用了,設(shè)計時把ADC0809的地址選擇端A,、B,、C都接地,即ABC=000,,這樣,,選通通道始終是IN0。將EOC通過非門連接到AT89C51的INT0腳,,可通過查詢方式來檢測轉(zhuǎn)換是否完成,。
由于ADC0809的典型工作頻率640 kHz不太容易得到,所以通常使用相近頻率且容易獲得的信號進(jìn)行替代,。本設(shè)計中,,單片機(jī)的晶振頻率12MHz,ALE信號輸出為晶振頻率的六分之一(即2MHz,、),,可將該2 MHz經(jīng)過74HC74四分頻后得到500 kHz信號來給ADC0809使用。
1.5 串行口控制
AT89C51內(nèi)部有一個可編程的全雙工串行通信接口,,該口能同時進(jìn)行串行發(fā)送和接收,,以便通過RXD引腳(串行數(shù)據(jù)接收端)和TXD引腳(串行數(shù)據(jù)發(fā)送端)與外界進(jìn)行通信。AT89C51串行口有四種工作方式,,本設(shè)計中,,AT89C51串行口工作于方式3。串口方式3的波特率是可變的,,它可由定時器T1的溢出率來控制,。通過計算可以得到T1的裝載初值為0xfd,波特率為9600bps,。
RS232是用正負(fù)電壓來表示邏輯狀態(tài)的,,它與TTL以高低電平來表示邏輯狀態(tài)的規(guī)定不同。因此,,為了能夠同計算機(jī)接口或與終端的TTL器件連接,,必須在RS232與TTL電路之間進(jìn)行電平和邏輯關(guān)系的變換。目前廣泛使用的集成電路轉(zhuǎn)換器件是MAX232芯片,,它可完成TTL到EIA的雙向電平轉(zhuǎn)換,。MAX232是一種雙組驅(qū)動器/接收器,片內(nèi)含有一個電容性電壓發(fā)生器,,可在單5V電源供電時提供EIA/TIA-232-E電平,。每個接收器均可將EIA/TIA-232-E電平轉(zhuǎn)換為5 V TTL/CMOS電平。這些接收器具有1.3 V的門限值及0.5V的典型遲滯,,而且可以接收±30 V的輸入,。利用MAX232芯片連接單片機(jī)和PC的具體電路如圖3所示。
由以上器件分析可知該系統(tǒng)所用到的電源電壓總共有兩種,,其中運放OP07使用±12 V,,其它芯片使用+5 V電壓。
2 實驗仿真
2.1 Keil C51軟件的使用
Keil C51軟件是眾多單片機(jī)應(yīng)用開發(fā)的優(yōu)秀軟件之一,。本設(shè)計就是在Keil C51環(huán)境中編譯數(shù)據(jù)采集程序的,。本采集系統(tǒng)的程序主要分成三部分:主程序、A/D轉(zhuǎn)換程序和串行通信程序,。圖4所示是其軟件流程圖,。其中主程序是總的控制程序,主要實現(xiàn)各單元初始化,、控制采樣和中斷等:A/D轉(zhuǎn)換程序主要完成采樣啟動,、數(shù)據(jù)保存等功能;串行通信程序則用來在有上位PC通過串行口發(fā)送數(shù)據(jù)到單片機(jī)時引發(fā)中斷響應(yīng),,也可通過PC機(jī)通信地址和本單片機(jī)地址是否相符來判斷PC機(jī)是否和本單片機(jī)通信,,如果地址相符,則發(fā)送A/D采樣的結(jié)果給上位機(jī),,如果不相符,,則跳出中斷。串行中斷和A/D轉(zhuǎn)換部分的程序代碼如下:
程序編寫完成后,,為了便于和proteus聯(lián)合仿真,,還應(yīng)當(dāng)在工程目錄下生成一個.hex文件,。
2.2 proteus仿真
一般情況下,個人配備單片機(jī)實驗開發(fā)系統(tǒng)的成本較高,,很多人無法承受,。而且一般單片機(jī)的實驗箱都是成品,學(xué)習(xí)者很難參與到其中的細(xì)節(jié)設(shè)計中去,,動手能力也難以得到訓(xùn)練與提高,。Proteus的出現(xiàn)恰好解決了這個矛盾。利用proteus可以隨時搭建一個單片機(jī)應(yīng)用系統(tǒng),,并對其進(jìn)行仿真,。proteus仿真軟件包含兩個應(yīng)用程序,其中proteus_isis主要用于電路原理圖的仿真,,另外一個就是proteus_ares,,用于直接將proteus_isis的仿真原理圖生成pcb。本任務(wù)只涉及仿真,,所以只用到proteus_isis,。操作時,首先應(yīng)建立一個新的工程文件,,然后按照硬件原理圖繪制仿真電路,。Proteus的仿真電路設(shè)計如圖7所示。
2.3 串口通信仿真
本設(shè)計仿真可在一個PC機(jī)上完成,,但要用到串口仿真軟件,。虛擬串口工具VSPD XP就是一個虛擬串口軟件,可模擬物理串口,,而且使用比較簡單,。通信時,只要COM3發(fā)送數(shù)據(jù),,COM4就會收到,,而COM4發(fā)送數(shù)據(jù),COM3也會收到,。
串口調(diào)試軟件有很多種,,還有串口調(diào)試助手等。本設(shè)計選用ComMonitor V2.0作為串口調(diào)試軟件,。
虛擬串口工具VSPD XP中COM3和COM4是一對虛擬串口,,可以互相通信。本設(shè)計把proteus設(shè)置為COM3,,把ComMonitor設(shè)置為COM4,,然后在兩者之間進(jìn)行數(shù)據(jù)傳輸。對ComMonitor設(shè)置的方法如下:
(1)在左上角設(shè)置串口號和波特率,,并打開串口,;
(2)接收數(shù)據(jù)控制區(qū)設(shè)置的是十六進(jìn)制顯示,,自動清空;
(3)發(fā)送區(qū)有三個,,都選擇為十六進(jìn)制顯示,,分別寫入"50", "1 2"和"45",,其中"50"是本設(shè)計中單片機(jī)系統(tǒng)的地址,"12"和"45"是隨意的兩個數(shù)據(jù)(做測試用),。
2.4仿真結(jié)果分析
在proteus中點擊界面左下角的仿真運行按鈕使系統(tǒng)開始工作,,然后在ComMonitor中依次發(fā)送三個發(fā)送區(qū)的預(yù)設(shè)數(shù)值,之后便可以看到運行結(jié)果:
(1)發(fā)送"50"時,,由于和單片機(jī)地址相符合,,根據(jù)程序設(shè)定,把A/D采樣結(jié)果通過串行口發(fā)送給了主機(jī),,即COM4端,。
(2')發(fā)送"12"和"45"時,單片機(jī)接收也同上面一樣,,并分別顯示,。
(3)三次發(fā)送數(shù)據(jù),COM分別收到不同的數(shù)據(jù),。
實際上,,在發(fā)送"12"和"45"時,單片機(jī)應(yīng)該不送回數(shù)據(jù),,但為了仿真結(jié)果清晰,,本程序中設(shè)置了收到除"50"以外的 數(shù)據(jù)回送功能,以便把收到的數(shù)據(jù)再發(fā)回去,,這樣,,COM4就會依次收到"12"和"45"。
3 結(jié)束語
本文從工程角度出發(fā),,詳細(xì)介紹了基于AT89C51單片機(jī)的數(shù)據(jù)采集系統(tǒng)所需的硬件電路配置以及相關(guān)的程序設(shè)計,。同時用基于Proteus和Keil接口的單片機(jī)外圍硬件電路構(gòu)成了一個實用的數(shù)據(jù)采集系統(tǒng)。所得出的仿真結(jié)果完整地展示了一個單片機(jī)系統(tǒng)新的開發(fā)思路,。