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