單片機(jī)最小系統(tǒng)與PC機(jī)的通信分析
PC機(jī)和多個(gè)單片機(jī)也可以組成多級(jí)控制系統(tǒng),一般以PC機(jī)為后級(jí),多個(gè)單片機(jī)最小系統(tǒng)為前級(jí)。其通信一般由兩個(gè)獨(dú)立的模塊組成,即單片機(jī)通信模塊和PC機(jī)通信模塊。
1.單片機(jī)通信模塊的設(shè)計(jì)
51單片機(jī)內(nèi)串行口部分有兩個(gè)物理上相互獨(dú)立的數(shù)據(jù)緩沖器SBUF,但兩個(gè)緩沖器的地址是一個(gè)(99H)。該緩沖器用來發(fā)送和接收數(shù)據(jù)。專用寄存器SCON和PCON控制串行口的工作方式和通信的波特率設(shè)定。定時(shí)器作為波特率發(fā)生器。CPU和SBUF寫數(shù)據(jù)即是發(fā)送數(shù)據(jù),CPU從SBUF讀數(shù)據(jù)就是接收數(shù)據(jù)。
單片機(jī)51串行口是全雙工串行通信口。0串行口控制寄存器是SCON。
SMO和SMl:工作方式選擇位,如表所列。
表中UART是異步串行通信。
SM2:允許方式2和方式3多機(jī)通信。
REN:允許串行接收。
TB8:在方式2和方式3時(shí)是發(fā)送數(shù)據(jù)的第9位。
RB8:在方式2和方式3時(shí)接收數(shù)據(jù)的第9位;在方式1時(shí),若SM2=0,則RB8為接收到數(shù)據(jù)的停止位。
TI和RI:發(fā)送和接收中斷標(biāo)志,表示是否已發(fā)送完或接收到數(shù)據(jù),由硬件置位,軟件清O。因?yàn)镻C機(jī)的RS - 232接口是由8250芯片控制的,所以一般PC/XT和PC/AT機(jī)用RS - 232與其他設(shè)備通信時(shí)所使用的是8位數(shù)據(jù)位(可少于8位數(shù)據(jù)),由此決定單片機(jī)必須設(shè)置方式1。
工作方式1:當(dāng)SMO和SM1一0時(shí),串行接口被選擇為工作方式1,此時(shí)為可變波特率的8位異步通信方式。
發(fā)送數(shù)據(jù)以TxD端輸出,每幀信息為10位:一位起始標(biāo)志位0、8位數(shù)據(jù)位和一位停止位1。發(fā)送時(shí)數(shù)據(jù)先送到緩沖器SBUF,然后啟動(dòng)發(fā)送。數(shù)據(jù)發(fā)送完后,將中斷標(biāo)志TI置1。
接收時(shí)(BEN-1),數(shù)據(jù)從RxD輸入,當(dāng)采樣到第一個(gè)1到O的下跳沿時(shí),啟動(dòng)接收器;確認(rèn)起始位后,接收一幀信息;當(dāng)RI=O,停止位為1或SM2 =0時(shí),停止位進(jìn)入RB8,中斷標(biāo)志位RI置1,接收了一幀數(shù)據(jù)。
波特率的設(shè)定 單片機(jī)定時(shí)器作為波特率發(fā)生器。為此定時(shí)器1須是工作方式2,即自動(dòng)重裝載模式。TL1作為8位計(jì)數(shù)器,TH1作為常數(shù)緩沖器。當(dāng)TL1計(jì)數(shù)溢出時(shí),將TH1中常數(shù)送到TLO中,使TL1再次從初值開始重新計(jì)數(shù)。定時(shí)器1產(chǎn)生固定頻率占空比是1:1的脈沖,波特率可由設(shè)定時(shí)間常數(shù)確定。
式中:fosc是主振蕩頻率,選用6 MHz。
當(dāng)波特率為1 200時(shí),TH1=TLl=OF3H。
通信所用線是一般雙絞電源線。通信距離一般在30 m以內(nèi)。如果通信距離比較遠(yuǎn),則須考慮用光電隔離或電流環(huán)來驅(qū)動(dòng),這時(shí)距離可達(dá)1000 m。波特率為300時(shí)問題不大,通信是可靠的,對(duì)通信線也無特殊要求。
2.PC/XT機(jī)通信模塊
PC/XT機(jī)RS - 232接口輸入/輸出使用MC1488和MC1489。用9013和9012兩只晶體管把RS - 232的標(biāo)準(zhǔn)電平-12 V表示1,+12 V表示0,轉(zhuǎn)變成0~5 V的電平,以便和單片機(jī)最小系統(tǒng)中8031進(jìn)行連接。D是發(fā)光二極管,PC機(jī)和單片機(jī)通信時(shí),D有明暗變化,表示正在傳送數(shù)據(jù)。這種電路是準(zhǔn)RS - 232接口電路。
單片機(jī)通信模塊包含3個(gè)子模塊:
●初始化模塊置定時(shí)器1的工作方式,置計(jì)數(shù)初值,定義波特率,定義串行口的工作模式等。
●發(fā)送模塊將累加器ACC中的內(nèi)容發(fā)送到串行口。
●接收模塊接收串行口上的數(shù)據(jù),送到累加器ACC中。是返回DOS。先選擇1,把ABC. OBJ文件傳到開發(fā)機(jī)(或最小系統(tǒng))的以2100H開始的地址處。PC機(jī)傳送完ABC. OBJ后,又返回到(1~3)通信的提示狀態(tài)。這時(shí)選擇2,即把單片機(jī)的外存RAM中2100H處的16個(gè)(十進(jìn)制數(shù))字節(jié)內(nèi)容傳回PC機(jī),并形成另一個(gè)文件,文件名是ABCI. OBJ。最后再返回DOS,這時(shí)用DOS的TYPE命令分別顯示ABC. OBJ和ABCLOBJ兩個(gè)文件的內(nèi)容,從而比較是否一致,以便證明通信過程是否正常。
如果通信不在開發(fā)機(jī)上進(jìn)行,只須把單片機(jī)的通信程序?qū)懭隕PROM中,并通過按鍵或啟動(dòng)復(fù)位執(zhí)行通信程序。其他步驟同上,即可完成相應(yīng)通信。
這個(gè)PC機(jī)和單片機(jī)的通信模塊應(yīng)用是很廣的。如果再增加一些控制命令,將是一個(gè)很好的控制系統(tǒng)。KDC -Ⅲ型開發(fā)機(jī)的在線仿真機(jī)通信程序就是在此基礎(chǔ)上擴(kuò)充的。