新聞中心

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

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

        作者: 時間:2013-01-25 來源:網(wǎng)絡(luò) 收藏
          通過該成員變量便可以對串口屬性進(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,無奇偶校驗(yàn), 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ī)間可靠的通信,必須保證通信接口具有識別功能。而單片機(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ī)通信過程安排如下:

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

          (2)當(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ī)的再一次尋址。

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



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

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 宣汉县| 沙坪坝区| 丽江市| 肥东县| 涿州市| 绥阳县| 珠海市| 定西市| 长沙市| 临城县| 海宁市| 商水县| 绥宁县| 安多县| 华池县| 桃园市| 富源县| 道孚县| 易门县| 屯昌县| 永嘉县| 通化市| 太原市| 东城区| 叙永县| 丹东市| 青龙| 广州市| 运城市| 德阳市| 锦州市| 永州市| 蛟河市| 腾冲县| 金秀| 射阳县| 郑州市| 武鸣县| 尼木县| 潞西市| 屏边|