音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

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

出處:hxiang1012 發(fā)布于:2012-05-18 11:41:53

  摘 要 概述了PC機(jī)與單片機(jī)間進(jìn)行串行口通信的基本原理,介紹了PC機(jī)與下位機(jī)之間的通信協(xié)議,并詳述了在VisualC + +環(huán)境下上位機(jī)利用MSComm通信控件與單片機(jī)之間進(jìn)行RS232異步串行口通信的實現(xiàn),給出了實現(xiàn)通信的硬件設(shè)計、串行口屬性的初始化、與下位機(jī)進(jìn)行通信的控制代碼以及下位機(jī)的程序流程圖。

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

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

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

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

  電路如圖1所示。

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

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

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

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

  為了保證數(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位停止位,無奇偶校驗,波特率9 600 b / s.每次PC機(jī)向單片機(jī)發(fā)送數(shù)據(jù)時,先發(fā)送握手信號"FF",下位單片機(jī)收到握手信號則發(fā)送應(yīng)答信號"EE"至PC機(jī),上位PC機(jī)收到應(yīng)答信號后即發(fā)送數(shù)據(jù)。同樣,當(dāng)單片機(jī)要向PC機(jī)發(fā)送數(shù)據(jù)時,也先向PC機(jī)發(fā)聯(lián)絡(luò)信號"EB90",PC機(jī)收到聯(lián)絡(luò)信號后發(fā)應(yīng)答信號"EBOO",單片機(jī)收到應(yīng)答信號后則發(fā)送數(shù)據(jù)。

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

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

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

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

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

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

  BOOL CMyCOMMDlg: : OnlnitDialog( )

  {

  CDialog: : OnlnitDialog( ) ;

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

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

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

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

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

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

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

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

  return TRUE; / /返回

  }

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

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

  {

  shortm_size =m_commute. GetinBufferCount( ) ;

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

  {

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

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

  }

  }

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

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

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

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

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

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

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

圖2 接收中斷處理程序

圖2 接收中斷處理程序

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

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

  3 結(jié)束語

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

關(guān)鍵詞:MCS251單片機(jī)和PC機(jī)間的串口通信

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!