【摘要】 我們研究了單片機與PC機之間串行通信的方式,設計了一個串行通信系統(tǒng),該系統(tǒng)的上位機為PC機,下位機為MCS—51單片機,本文主要介紹了采取專用電平轉換芯片MAX232實現(xiàn)了上位機與MCS-51單片機間串行通信的有關技術方法。并對此進行了具體實現(xiàn),給出了下位機基于Keil μ Vision4通信的核心控制代碼。
【關鍵詞】 MAX232 串口通信 波特率 單片機
一、前言
隨著計算機網(wǎng)絡技術與數(shù)據(jù)終端的普及,計算機的通信功能越來越重要。計算機通信是指計算機與外部設備或計算機與計算機之間的信息交換。通信有并行通信和串行通信兩種方式。在單片機系統(tǒng)以及現(xiàn)代測控系統(tǒng)中信息的交換多采用串行通信方式。
本文介紹了在Windows環(huán)境下,利用串口調試助手實現(xiàn)PC機與MCS—51單片機之間串行通信的方法。
二、硬件接口設計
1、串行通信接口標準:RS-232C是EIA(美國電子工業(yè)協(xié)會)1969年修訂RS-232C標準。RS-232C定義了數(shù)據(jù)終端設備(DTE)與數(shù)據(jù)通信設備(DCE)之間的物理接口標準。目前PC機上均為RS-232C接口。單片機的邏輯電平(TTL電平)與RS-232C規(guī)定的邏輯電平不一致,因此需要使用專用電平轉換芯片MAX232芯片實現(xiàn)RS-232電平與TTL電平之間的轉換[1][2]。
2、MAX232芯片實現(xiàn)RS-232電平與TTL電平之間的轉換。MAX232芯片是MAXIM公司生產(chǎn)的、包含兩路接收器和驅動器的IC芯片,它的內部有一個電源電壓變換器,可以把輸入的+5V/0V電源電壓變換成RS-232輸出電平所需的+10V/-10V電壓。所以,采用此芯片接口的串行通信系統(tǒng)只需要單一的+5V就可以了。在沒有+12V電源的場合,實用性更強,并且價格適中,硬件接口簡單。
三、波特率配置
1、波特率。單片機或計算機在串口通信時的速率用波特率表示,它定義為每秒傳輸二進制代碼的位數(shù),即1波特=1位/秒,單位bps(位/秒)。
2、波特率配置。在串行通信中,通信雙方應該采用相同的波特率以確保通信成功。PC機系統(tǒng)中配備有異步通信適配器,該板上有8250異步通信接口,PC機上波特率的設置是通過8250初始化而實現(xiàn)的.在COM2的8250寄存器中,2F8H、2F9H分別設置為波特率因子的低8位和高8位值.該因子(k)的取值范圍在1~65535之間,對輸入時鐘(1.8432)進行分頻,產(chǎn)生16倍波特率的時鐘,波特率為1.843 2/(16k)。MCS-51單片機的串行接口(UART)是一個全雙工的接收緩沖式的串行通信接口,可以同時發(fā)送和接收數(shù)據(jù).波特率隨串行口工作方式選擇不同而異.它除了與系統(tǒng)的晶振、特殊控制寄存器PCON的SMOD位(D7位)有關外,還與定時器T1的設置有關.當采用外部時鐘電路時,設置串口工作在方式3,便可以選擇使用不同的波特率。
四、 系統(tǒng)軟件設計
4.1 PC機部分
上位機與單片機的通信,這里我們借助串口調試助手來實現(xiàn)串口通信的接口參數(shù)配置。串口調試助手就是相當于PC機,也就是上位機。通過串口和其它設備(比如單片機或儀器,甚至也可以是PC機)通信。串口調試助手可以自動識別串口,能設置校驗、數(shù)據(jù)位和停止位,能以ASCII碼或十六進制接收或發(fā)送任何數(shù)據(jù)或字符,可以任意設定自動發(fā)送周期,并能將接收數(shù)據(jù)保存成文本文件,能發(fā)送任意大小的文本文件。
4.2單片機部分
51單片機的串行口是一個可編程全雙工的通信接口,具有UART(通用異步收發(fā)器)的全部功能,能同時進行數(shù)據(jù)的收發(fā),也可以作為同步移位寄存器使用。它主要由兩個獨立的串行數(shù)據(jù)緩沖寄存器SBUF(一個發(fā)送緩沖寄存器,一個接收緩沖寄存器)和發(fā)送控制器、接收控制器、輸入移位寄存器及若干控制門電路組成。51單片機可以通過特殊功能寄存器SBUF對串口接收或串行發(fā)送寄存器進行訪問,兩個寄存器共用一個地址99H,但在物理上是兩個獨立的寄存器,由指令操作決定訪問寄存器。
串行口有4種工作方式,我們采用串口方式1是實現(xiàn)通信。方式1是10位數(shù)據(jù)的異步通信,其中1位起始位,8位數(shù)據(jù)位,1位停止位。TXD為數(shù)據(jù)發(fā)送引腳,RXD為數(shù)據(jù)接收引腳。波特率由定時器1的溢出率決定。
控制代碼的主要部分為對單片機的一些與串口有關的特殊功能寄存器進行初始化設置。具體包括:
①確定定時器T1的工作方式(編程設置TMOD寄存器);
②計算T1的初值,裝載TH1,TL1;
③啟動T1(編程設置TCON寄存器中的TR1位);
④確定串行工作方式(編程設置SCON寄存器);
⑤串行口工作在哪種中斷方式,進行中斷設置(編程設置IE、IP寄存器)。
程序核心代碼:
(1)初始化程序:
void init()
{
TMOD=0x20;//設置定時器1為工作方式2
TH1=0xfd;// 時器T1定裝初值
TL1=0xfd;// 時器T1定裝初值
TR1=1;//啟動定時器T1
REN=1;//允許串口接收
SM0=0;// 設定串口工作方式1
SM1=1;//設定串口工作方式1
EA=1;//開總中斷
ES=1;//開串口中斷
}
(2)串口中斷服務程序:
void ser() interrupt 4
{
RI=0;//產(chǎn)生串口中斷,接收到數(shù)據(jù),RI被硬件置1,將不會再產(chǎn)生下次中斷,//因此需要軟件清零。
a=SBUF;//單片機自動將串口接收寄存器中的數(shù)據(jù)讀走給a。
flag=1;//標志位用于在主程序中判斷是否收到了數(shù)據(jù)。}
本串口通信測試代碼實現(xiàn)的基本功能為,上位機用串口調試助手發(fā)送一個字符X,單片機收到該字符后會送給上位機一個“give back X”,串口波特率為9600bps.在主程序中進入while大循環(huán)后,一直檢測標志位flag是否為1,當檢測到為1時,說明程序已經(jīng)執(zhí)行了串口中斷服務程序,收到了數(shù)據(jù)。同時檢測到flag=1時,先將ES清零,關閉串口中斷,否則當發(fā)送完數(shù)據(jù)后,單片機同樣會申請串口中斷,再次進入中斷服務程序,flag又被置1,主程序檢測到flag為1,又會再次發(fā)送數(shù)據(jù),導致程序發(fā)生死循環(huán)。
五、結束語
本文所介紹的是一種基于keil的PC機與單片機之間串行通信的方法,系統(tǒng)硬件電路簡單可靠,軟件程序簡潔易懂。上位機通過串口調試助手可以給下位機發(fā)送指令,系統(tǒng)實際運行效果良好,較好地解決了上位機與下位機之間的通信問題,可應用在需要此技術的其他場合。
參 考 文 獻
[1]朱立忠,馮丹 PC機與MCS單片機串行通信接口電路的設計 沈陽工業(yè)學院學報,2003
[2]夏莉英,陳雁 AT89C51單片機與PC機的通信接口及編程[J]. 電子工程師.2006
[3]郭天祥 新概念 51單片機C語言教程 電子工業(yè)出版社,2013年
[4]孫育才 MCS-51系列單片微型計算機及其應用,南京:東南大學出版社,1997
[5]殷志華,鄭海,楊浩 單片機與PC機串口通信的實現(xiàn) 中國數(shù)據(jù)通信,2004
[6]孫力娟,李愛群 仇玉章 陳燕俐 周寧寧 微型計算機原理與接口技術 清華大學出版社,2013年