0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

介紹了MCS251單片機(jī)和PC機(jī)間的串口通信原理與通信協(xié)議

電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2018-11-09 08:13 ? 次閱讀

隨著計(jì)算機(jī)技術(shù)的快速發(fā)展和廣泛應(yīng)用,上位機(jī)和下位機(jī)的主從工作方式為工業(yè)控制及自動(dòng)控制系統(tǒng)所采用。由于PC機(jī)分析能力強(qiáng)、處理速度更快及單片機(jī)使用靈活方便等特點(diǎn),所以一般都將PC機(jī)作為上位機(jī),單片機(jī)作為下位機(jī),二者通過(guò)RS2232或者RS2485接收、發(fā)送數(shù)據(jù)和傳送指令。單片機(jī)可單獨(dú)處理數(shù)據(jù)和控制任務(wù),同時(shí)也將數(shù)據(jù)傳送給PC機(jī),由PC機(jī)對(duì)這些數(shù)據(jù)進(jìn)行處理或顯示。

本文介紹PC機(jī)和單片機(jī)通信在一種基于C8051F單片機(jī)的波形發(fā)生器中的應(yīng)用,在上位機(jī)上顯示正弦波的幅值和頻率,由上位機(jī)發(fā)送指令可以改變波形幅度及頻率。

1 硬件電路的設(shè)計(jì)

MCS251 單片機(jī)有一個(gè)全雙工的串行通訊口UART,利用其RXD和TXD與外界進(jìn)行通信,其內(nèi)部有2 個(gè)物理上完全獨(dú)立的接收、發(fā)送緩沖器SBUF,可同時(shí)發(fā)送和接收數(shù)據(jù)。所以單片機(jī)和PC機(jī)之間可以方便地進(jìn)行串口通訊。單片機(jī)串口有3條引線: TXD (發(fā)送數(shù)據(jù)) 、RXD (接收數(shù)據(jù))和GND(信號(hào)地) .因此在通信距離較短時(shí)可采用零MO2DEM方式,簡(jiǎn)單三連線結(jié)構(gòu)。IBM2PC機(jī)有兩個(gè)標(biāo)準(zhǔn)的RS2232串行口,其電平采用的是E IA電平,而MCS251單片機(jī)的串行通信是由TXD (發(fā)送數(shù)據(jù))和RXD (接收數(shù)據(jù))來(lái)進(jìn)行全雙工通信的,它們的電平是TTL電平;為了PC機(jī)與MCS251機(jī)之間能可靠地進(jìn)行串行通信,需要用電平轉(zhuǎn)換芯片,我們采用了MAXIM公司生產(chǎn)的專用芯片MAX232 進(jìn)行轉(zhuǎn)換。

電路如圖1所示。

介紹了MCS251單片機(jī)和PC機(jī)間的串口通信原理與通信協(xié)議

圖1 轉(zhuǎn)換芯片電路

2 系統(tǒng)軟件設(shè)計(jì)

軟件設(shè)計(jì)分上位機(jī)軟件設(shè)計(jì)和下位機(jī)軟件設(shè)計(jì)。這兩部分雖然在不同的機(jī)器上編寫和運(yùn)行,但它們要做的工作是對(duì)應(yīng)的:一個(gè)發(fā)送,另一個(gè)接收。

為了保證數(shù)據(jù)通信的可靠性,要制定通信協(xié)議,然后各自根據(jù)協(xié)議分別編制程序?,F(xiàn)約定通信協(xié)議如下: PC機(jī)和單片機(jī)都可以發(fā)送和接收。上位機(jī)和下位機(jī)均采用查詢方式發(fā)送控字符和數(shù)據(jù)、中斷方式接收控制字符和數(shù)據(jù)。采用RS2232串口異步通信,1位起始位, 8位數(shù)據(jù)位, 1位停止位,無(wú)奇偶校驗(yàn),波特率9 600 b / s.每次PC機(jī)向單片機(jī)發(fā)送數(shù)據(jù)時(shí),先發(fā)送握手信號(hào)"FF",下位單片機(jī)收到握手信號(hào)則發(fā)送應(yīng)答信號(hào)"EE"至PC機(jī),上位PC機(jī)收到應(yīng)答信號(hào)后即發(fā)送數(shù)據(jù)。同樣,當(dāng)單片機(jī)要向PC機(jī)發(fā)送數(shù)據(jù)時(shí),也先向PC機(jī)發(fā)聯(lián)絡(luò)信號(hào)"EB90",PC機(jī)收到聯(lián)絡(luò)信號(hào)后發(fā)應(yīng)答信號(hào)"EBOO",單片機(jī)收到應(yīng)答信號(hào)后則發(fā)送數(shù)據(jù)。

2.1 上位機(jī)通信程序設(shè)計(jì)

PC機(jī)的串口都采用的是INS8250芯片。PC機(jī)中有2個(gè)異步通信口,一個(gè)是COM1,其端口地址范圍是3F8H-3 FFH,另一個(gè)是COM2,其端口地址是2F8H-2FFH.其與MODEM配合可以實(shí)現(xiàn)遠(yuǎn)距離通信。其波特率是標(biāo)準(zhǔn)波特率(50-9 600) b / s。

8250內(nèi)部有10個(gè)寄存器端口,其中有一個(gè)除數(shù)鎖存器,可以通過(guò)編程除數(shù)的大小來(lái)確定異步通信的波特率。8250使用的頻率是2 MHz的基準(zhǔn)時(shí)鐘輸入信號(hào),所以必須用分頻的方法產(chǎn)生所需要的波特率(移位脈沖) .除數(shù)鎖存器的值必須在8250初始化時(shí)設(shè)置, 即把通信線路控制器的最高位(DLAB)置1,然后分兩次把除數(shù)鎖存器的高8位和低8位分別寫入端口地址3F8H和3F9H (COM1) ,8250傳送或接收串行數(shù)據(jù)時(shí)使用的時(shí)鐘信號(hào)的頻率是數(shù)據(jù)傳輸波特率的16 倍,即波特率= 16 ×除數(shù)/1 843 200.

在Windows平臺(tái)上的串行通信多使用其提供的AP I函數(shù)來(lái)實(shí)現(xiàn),這種方法使用起來(lái)需要許多底層設(shè)置,因而較為繁瑣,并且難以理解。Microsoft推出的ActiveX技術(shù)提供了另外一種實(shí)現(xiàn)串行通信的方法。這種方法不僅相對(duì)較為簡(jiǎn)單,而且非常實(shí)用。

尤其是Visual C + +這種可視化面向?qū)ο蟮木幊汰h(huán)境中,可以真正把串口看作一個(gè)對(duì)象,編程時(shí)只需簡(jiǎn)單的設(shè)置,理解起來(lái)也很容易。本文上位機(jī)通信程序使用VC + +提供的串行通信控件MSComm (Mi2crosoft Communication Control) ,主要步驟如下:打開VC + + 610集成開發(fā)環(huán)境,選擇菜單項(xiàng)File /New,在出現(xiàn)的對(duì)話框中選中Projects標(biāo)簽中的MFC App2Wizard ( exe) ,生成一個(gè)基于對(duì)話框的應(yīng)用程序。選擇菜單項(xiàng)Project/Add to p roject/Components andControls?,在彈出的對(duì)話框中選擇Registered Ac2tiveX Controls文件夾下的Microsoft CommunicationsControl, 選擇Registered ActiveX Controls 來(lái)注冊(cè)MSComm,將該控件從工具箱中拉到對(duì)話框中即可實(shí)現(xiàn)控件的插入。選擇ClassWizard為新創(chuàng)建的通信控件加入一個(gè)成員變量,將其命名為m_commute.

通過(guò)該成員變量便可以對(duì)串口屬性進(jìn)行設(shè)置。以下是通過(guò)設(shè)置控件屬性對(duì)串口進(jìn)行初始化:

BOOL CMyCOMMDlg: : OnlnitDialog( )

{

CDialog: : OnlnitDialog( ) ;

/ /此處為應(yīng)用框架自動(dòng)生成代碼

m_commute. SetCommPort(1) ; / /使用串口1

m_commute. SetSettings("9600,N, 8, 1") ; / /波特率為9600,無(wú)奇偶校驗(yàn), 8位數(shù)據(jù)位, 1位停止位

m_commute. SetRThreshold (10) ; / /每接收10個(gè)字符就觸發(fā)1次接收事件

m_commute. SetSThreshold (0) ; / /不觸發(fā)發(fā)送事件

m_commute. SetInputLen (10) ; / /每次讀操作從緩沖區(qū)中取10個(gè)字符

m_commute. SetInputMode (1) ; / /二進(jìn)制數(shù)據(jù)傳輸形式

m_commute. SetPortOpen ( TRUE) ; / /打開串口

return TRUE; / /返回

}

事件驅(qū)動(dòng)是處理串行端口交互作用的一種非常有效的方法。OnComm 事件的CommEvent屬性可以捕捉并檢查通信事件和錯(cuò)誤。發(fā)生通信事件或錯(cuò)誤時(shí),將觸發(fā)OnComm 事件, CommEvent屬性的值將被改變,應(yīng)用程序檢查CommEvent屬性值并作出相應(yīng)的反應(yīng)。雙擊對(duì)話框中CMSComm控件,添加OnComm事件的代碼:

if (m_commute. GetCommEvent( ) = = 2) / /判斷comEvReceive事件發(fā)生否

{

shortm_size =m_commute. GetinBufferCount( ) ;

if (m_size = = 11) / /緩沖區(qū)為11個(gè)字符為滿

{

m_commute. SetInputLen (L) ; / /讀取接收到的數(shù)據(jù)

VAR IANT vRep ly =m_commute. GetInput ( ) ; / /處理接收到的數(shù)據(jù)

}

}

2.2 下位機(jī)通信程序設(shè)計(jì)

在上位機(jī)與多片單片機(jī)通信中,要保證主機(jī)與從機(jī)間可靠的通信,必須保證通信接口具有識(shí)別功能。而單片機(jī)串行口控制寄存器SCON中的控制位SM2就是為了滿足這一要求而設(shè)置的。且SM2控制位只在MCS51單片機(jī)的串行工作方式2與方式3才起作用。在串行口以方式2或方式3接收時(shí),若SM2 =1,表示置多機(jī)通信功能位,這時(shí)出現(xiàn)兩種可能情況:接收到第9位數(shù)據(jù)為1時(shí),數(shù)據(jù)才裝入SBUF,并置R I = 1向CPU發(fā)出中斷請(qǐng)求;如果接收到第9位數(shù)據(jù)為0時(shí),則不發(fā)生中斷,信息被掉失。若SM2=0,則接收到的第9位數(shù)據(jù)無(wú)論是0還是1都產(chǎn)生R I =1中斷標(biāo)志,接收到的數(shù)據(jù)裝入SBUF中。根據(jù)上述情況MCS - 51多機(jī)通信過(guò)程安排如下:

(1)開始時(shí)設(shè)所有的從機(jī)SM2位為1 ,處于只接收地址幀的狀態(tài)(串行幀的第9位為1 ) ,對(duì)數(shù)據(jù)幀(串行口的第9位為0)則不做響應(yīng)。

(2)當(dāng)從機(jī)接收到主機(jī)發(fā)來(lái)的地址幀后,將所接收的地址與本機(jī)地址相比較,若地址與本機(jī)地址相符,便使SM2清零以接收主機(jī)隨后發(fā)來(lái)的數(shù)據(jù),對(duì)于地址不相符合的從機(jī),仍保持SM2 = 1狀態(tài),故不能接收主機(jī)隨后發(fā)來(lái)的數(shù)據(jù)信息。

(3)當(dāng)主機(jī)改為與另外從機(jī)聯(lián)系時(shí),可再發(fā)出地址幀來(lái)尋找其它從機(jī)。而先前被尋址過(guò)的從機(jī)在分析出主機(jī)是對(duì)其它從機(jī)尋址時(shí),恢復(fù)其SM2 = 1,等待主機(jī)的再一次尋址。

(4)從機(jī)要呼叫主機(jī)時(shí),可先發(fā)送握手信號(hào),主機(jī)檢測(cè)到有從機(jī)呼叫后,發(fā)出應(yīng)答信號(hào),從機(jī)接收到主機(jī)應(yīng)答后,便可發(fā)送數(shù)據(jù)給主機(jī)。主機(jī)通過(guò)該信號(hào)來(lái)判斷從機(jī)所處的狀態(tài),從而作出相應(yīng)的反應(yīng)。

設(shè)計(jì)單片機(jī)通信程序時(shí),必須充分發(fā)揮單片機(jī)的效率。由于單片機(jī)多應(yīng)用于實(shí)時(shí)性較強(qiáng)的控制場(chǎng)合,因此,應(yīng)將及時(shí)響應(yīng)和控制對(duì)象的動(dòng)作放在優(yōu)先考慮的位置,以盡量減少通信等輔助性操作所占用的CPU時(shí)間?;谏鲜隹紤],筆者在設(shè)計(jì)單片機(jī)通信程序時(shí),將通信程序分為接收中斷處理程序、發(fā)送中斷處理程序和通信處理程序3部分,并將這3部分程序巧妙地進(jìn)行組合,從而構(gòu)成整個(gè)單片機(jī)的通信程序。圖2給出了接收中斷處理子程序,圖3給出了發(fā)送中斷子程序。

介紹了MCS251單片機(jī)和PC機(jī)間的串口通信原理與通信協(xié)議

圖2 接收中斷處理程序

介紹了MCS251單片機(jī)和PC機(jī)間的串口通信原理與通信協(xié)議

圖3 發(fā)送中斷處理程序

3 結(jié)束語(yǔ)

本文給出了上位PC機(jī)與下位單片機(jī)之間進(jìn)行異步串行通信的解決方案,上位機(jī)通過(guò)友好的用戶界面,可給下位機(jī)發(fā)送控制指令。此方案在實(shí)際運(yùn)行過(guò)程中,運(yùn)行穩(wěn)定,效果良好,從而較好地解決了上位機(jī)與下位機(jī)之間的通信問(wèn)題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6037

    文章

    44569

    瀏覽量

    636121
  • PC
    PC
    +關(guān)注

    關(guān)注

    9

    文章

    2087

    瀏覽量

    154306
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7511

    瀏覽量

    88148
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MCS251PC機(jī)串口通信電路設(shè)計(jì)

    本文介紹PC 機(jī)單片機(jī)通信在一種基于C8051F 單片機(jī)的波形發(fā)生器中的應(yīng)用,在上位機(jī)上顯示正
    發(fā)表于 12-19 14:47 ?2040次閱讀
    <b class='flag-5'>MCS251</b>和<b class='flag-5'>PC</b><b class='flag-5'>機(jī)</b><b class='flag-5'>間</b>的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>電路設(shè)計(jì)

    MCS251PC機(jī)怎么實(shí)現(xiàn)串口通信電路?

    MCS251PC機(jī)串口通信電路設(shè)計(jì)
    發(fā)表于 11-04 02:20

    51單片機(jī)串口通信協(xié)議的特點(diǎn)是什么

    介紹51單片機(jī)串口通信協(xié)議,以下簡(jiǎn)稱串口。
    發(fā)表于 02-23 07:46

    單片機(jī)串口通信協(xié)議的實(shí)現(xiàn)實(shí)例分享

    調(diào)試和做一些簡(jiǎn)單人機(jī)交互的一種重要的通信方式,其原理網(wǎng)上有一大堆,這里就不再贅述,下面主要和大家分享一種我在實(shí)際項(xiàng)目中經(jīng)常用到的一個(gè)簡(jiǎn)單的串口通信協(xié)議和實(shí)現(xiàn)方式。下面以STM32F1
    發(fā)表于 01-20 07:35

    單片機(jī)PC機(jī)串口通信編程

    單片機(jī)PC機(jī)串口通信編程實(shí)驗(yàn)?zāi)康睦肞ROTUES仿真軟件、串口調(diào)試助手、虛擬
    發(fā)表于 02-16 07:00

    基于MCS2-51單片機(jī)的PS/2模擬鍵盤接口的設(shè)計(jì)研究

    摘 要:本文通過(guò)對(duì)標(biāo)準(zhǔn)PS/2鍵盤協(xié)議的分析,用MCS251單片機(jī)模擬鍵盤通信時(shí)序,實(shí)現(xiàn)單片機(jī)通過(guò)PS/2鍵盤接口與
    發(fā)表于 07-15 11:52 ?169次下載

    PC機(jī)與多MCS-51單片機(jī)的串行通信設(shè)計(jì)?

    【摘 要】 主要講解了IBM-PC機(jī)MCS-51單片機(jī)機(jī)系統(tǒng)的通信原理,給出了其硬件接口框圖
    發(fā)表于 05-16 19:43 ?1907次閱讀
    <b class='flag-5'>PC</b><b class='flag-5'>機(jī)</b>與多<b class='flag-5'>MCS</b>-51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>間</b>的串行<b class='flag-5'>通信</b>設(shè)計(jì)?

    PC機(jī)鍵盤通信協(xié)議及其在單片機(jī)應(yīng)用系統(tǒng)右的實(shí)現(xiàn)

    本文對(duì)標(biāo)準(zhǔn)鍵盤接口的通信協(xié)議及傳輸時(shí)序進(jìn)行了研究,全面介紹鍵 盤掃描碼、系統(tǒng)命令碼及鍵盤響應(yīng)碼,解決單片機(jī) 系統(tǒng)中應(yīng)用標(biāo)準(zhǔn)
    發(fā)表于 03-28 16:56 ?3次下載

    單片機(jī)PC機(jī)串口通信顯示

    單片機(jī)基礎(chǔ)學(xué)習(xí),串口學(xué)習(xí)。使單片機(jī)PC機(jī)串口通信,
    發(fā)表于 06-01 17:48 ?15次下載

    PC單片機(jī)串口通信協(xié)議

    PC單片機(jī)串口通信協(xié)議
    發(fā)表于 12-26 22:12 ?0次下載

    單片機(jī)C語(yǔ)言之串口通信協(xié)議

    本文首先介紹串口的基本結(jié)構(gòu),其次介紹串口通信方式
    發(fā)表于 05-22 12:37 ?4931次閱讀
    <b class='flag-5'>單片機(jī)</b>C語(yǔ)言之<b class='flag-5'>串口</b><b class='flag-5'>通信協(xié)議</b>

    單片機(jī):Modbus 通信協(xié)議介紹

    實(shí)用串口通信程序的時(shí)候,我們通過(guò)串口發(fā)給單片機(jī)三條指令,讓單片機(jī)做了三件不同的事情,分別是“buzz on”、“buzz off”和“sho
    發(fā)表于 11-13 20:51 ?11次下載
    <b class='flag-5'>單片機(jī)</b>:Modbus <b class='flag-5'>通信協(xié)議</b><b class='flag-5'>介紹</b>

    制定通信協(xié)議,實(shí)現(xiàn)單片機(jī)PC機(jī)通信

    單片機(jī)PC機(jī)串口通信編程實(shí)驗(yàn)?zāi)康睦肞ROTUES仿真軟件、串口調(diào)試助手、虛擬
    發(fā)表于 12-17 18:30 ?22次下載
    制定<b class='flag-5'>通信協(xié)議</b>,實(shí)現(xiàn)<b class='flag-5'>單片機(jī)</b>與<b class='flag-5'>PC</b><b class='flag-5'>機(jī)</b><b class='flag-5'>通信</b>

    如何利用MODBUS通信協(xié)議實(shí)現(xiàn)觸摸屏與單片機(jī)通信和控制

    講解如何利用MODBUS通信協(xié)議,實(shí)現(xiàn)觸摸屏與單片機(jī)通信和控審I。詳細(xì)介紹觸摸屏與單片機(jī)的硬
    發(fā)表于 08-02 09:50 ?18次下載

    單片機(jī)通信協(xié)議有哪些 單片機(jī)和wifi模塊怎么通信

    單片機(jī)和WiFi模塊通信的方法有以下幾種: 1. 串口通信:將單片機(jī)與WiFi模塊通過(guò)串口連接,
    的頭像 發(fā)表于 06-13 17:56 ?1.6w次閱讀