<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MCS251單片機(jī)和PC機(jī)間的串口通信

          MCS251單片機(jī)和PC機(jī)間的串口通信

          作者: 時(shí)間:2013-01-25 來(lái)源:網(wǎng)絡(luò) 收藏

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

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

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

             單片機(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電平,而單片機(jī)的串行通信是由TXD (發(fā)送數(shù)據(jù))和RXD (接收數(shù)據(jù))來(lái)進(jìn)行全雙工通信的,它們的電平是TTL電平;為了PC機(jī)與機(jī)之間能可靠地進(jìn)行串行通信,需要用電平轉(zhuǎn)換芯片,我們采用了MAXIM公司生產(chǎn)的專(zhuān)用芯片MAX232 進(jìn)行轉(zhuǎn)換。

            電路如圖1所示。

          MCS251單片機(jī)和PC機(jī)間的串口通信

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

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

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

            為了保證數(shù)據(jù)通信的可靠性,要制定通信協(xié)議,然后各自根據(jù)協(xié)議分別編制程序。現(xiàn)約定通信協(xié)議如下: PC機(jī)和單片機(jī)都可以發(fā)送和接收。上位機(jī)和下位機(jī)均采用查詢(xún)方式發(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位分別寫(xiě)入端口地址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) ,主要步驟如下:打開(kāi)VC + + 610集成開(kāi)發(fā)環(huán)境,選擇菜單項(xiàng)File /New,在出現(xiàn)的對(duì)話(huà)框中選中Projects標(biāo)簽中的MFC App2Wizard ( exe) ,生成一個(gè)基于對(duì)話(huà)框的應(yīng)用程序。選擇菜單項(xiàng)Project/Add to p roject/Components andControls?,在彈出的對(duì)話(huà)框中選擇Registered Ac2tiveX Controls文件夾下的Microsoft CommunicationsControl, 選擇Registered ActiveX Controls 來(lái)注冊(cè)MSComm,將該控件從工具箱中拉到對(duì)話(huà)框中即可實(shí)現(xiàn)控件的插入。選擇ClassWizard為新創(chuàng)建的通信控件加入一個(gè)成員變量,將其命名為m_commute.


          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞: MCS251 PC機(jī) 串口通信

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();