第一篇:串口通訊的工作方式
串口通訊的工作方式
由于 CPU 與接口之間按并行方式傳輸,接口與外設之間按串行方式傳輸,因此,在串行接口中,必須要有 “ 接收移位寄存器 ”(串→并)和 “ 發(fā)送移位寄存器 ”(并→串).1.在數(shù)據(jù)輸入過程中,數(shù)據(jù) 1 位 1 位地從外設進入接口的 “ 接收移位寄存器 ”,2.當 “ 接收移位寄存器 ” 中已接收完 1 個字符的各位后,數(shù)據(jù)就從 “ 接收移位寄存器 ” 進入 “ 數(shù)據(jù)輸入寄存器 ”.3.CPU 從 “ 數(shù)據(jù)輸入寄存器 ” 中讀取接收到的字符.(并行讀取,即 D7~D0 同時被讀至累加器中).“ 接收移位寄存器 ” 的移位速度由 “ 接收時鐘 ” 確定.1.在數(shù)據(jù)輸出過程中,CPU 把要輸出的字符(并行地)送入 “ 數(shù)據(jù)輸出寄存器 ”,2.“ 數(shù)據(jù)輸出寄存器 ” 的內容傳輸?shù)?“ 發(fā)送移位寄存器 ”
3,然后由 “ 發(fā)送移位寄存器 ” 移位,把數(shù)據(jù) 1 位 1 位地送到外設.“ 發(fā)送移位寄存器 ” 的移位速度由 “ 發(fā)送時鐘 ” 確定.接口中的 “ 控制寄存器 ” 用來容納 CPU 送給此接口的各種控制信息,這些控制信息決定接口的工作方式.“ 狀態(tài)寄存器 ” 的各位稱為 “ 狀態(tài)位 ”,每一個狀態(tài)位都可以用來指示數(shù)據(jù)傳輸過程中的狀態(tài)或某種錯誤.例如,用狀態(tài)寄存器的 D5 位為 “1” 表示 “ 數(shù)據(jù)輸出寄存器 ” 空,用 D0 位表示 “ 數(shù)據(jù)輸入寄存器滿 ”,用 D2 位表示 “ 奇偶檢驗錯 ” 等.能夠完成上述 “ 串 <--> 并 ” 轉換功能的電路,通常稱為 “ 通用異步收發(fā)器 ”(UART :Universal Asynchronous Receiver and Transmitter),典型的芯片有:Intel 8250/8251,16550
第二篇:串口通訊實驗報告
網(wǎng)絡編程與實踐實驗報告
實驗內容:串口通信編程 學號:S201502189 姓名:職榮豪 日期:2015-9-28
一、實驗要求
使用VS2010編寫基于對話框的MFC應用程序,兩個窗口分別使用兩個串口,使得這兩個窗口可以進行通信,包括數(shù)據(jù)的發(fā)送與接收。
二、實驗原理
本實驗使用Microsoft Communications Control控件,利用這個ActiveX控件,只需要編寫少量代碼即可輕松進行通信。
該控件相關的函數(shù)如下: put__CommPort:設置串口號
put_Settings:以字符串的形式設置波特率、奇偶校驗位(n-無校驗,e-偶校驗,o-奇校驗)、數(shù)據(jù)位數(shù)、停止位數(shù)
put_InputMode:設置接收數(shù)據(jù)的類型(0-文本類型,1-二進制類型)put_InputLen:設置從接收緩沖區(qū)讀取的字節(jié)數(shù),0表示全部讀取 put_InBufferSize:設置接收緩沖區(qū)大小 put_OutBufferSize:設置發(fā)送緩沖區(qū)大小
put_RThreshold:設定當接收幾個字符時觸發(fā)OnComm事件,0表示不產生事件,1表示每接收一個字符就產生一個事件
put_SThreshold:設定在觸發(fā)OnComm事件前,發(fā)送緩沖區(qū)內所允許的最少的字符數(shù),0表示發(fā)送數(shù)據(jù)時不產生事件,1表示當發(fā)送緩沖區(qū)空時產生OnComm事件
put_PortOpen:打開或關閉串口,傳入?yún)?shù)為true時打開串口,傳入?yún)?shù)為false時關閉串口 get_CommEvent:獲得串口上剛發(fā)生的事件,事件值為2表示接收到數(shù)據(jù)
get_InBufferCount:獲得緩沖區(qū)中的數(shù)據(jù)位數(shù)
get_Input:獲取緩沖區(qū)數(shù)據(jù),返回類型為VARIANT put_Output:發(fā)送數(shù)據(jù)
三、設計思路
需要添加一個Microsoft Communications Control控件,用于進行串口通信。由于要求同一程序可運行兩個窗口進行相互通信,需要兩個窗口開啟兩個不同串口,故需要添加一個Edit Control控件用于輸入串口號,并添加打開串口按鈕,在點擊該按鈕時對串口控件的參數(shù)進行設置并開啟串口。同時添加關閉串口按鈕,點擊后關閉串口并可以對串口號進行修改。
需要添加兩個Edit Control 分別用于顯示接收到的數(shù)據(jù)以及輸入要發(fā)送的數(shù)據(jù)。需要添加一個發(fā)送按鈕,點擊后發(fā)送輸入的數(shù)據(jù)。
四、實驗步驟
1.建立基于對話框的MFC應用程序 2.添加界面控件并設置ID與Caption 添加Microsoft Communications Control控件,用于進行串口通信 添加一個Edit Control控件,用于輸入串口號,ID設置為IDC_PORT 添加一個Static Text控件,用于標注端口號,將Caption設置為“串口號:”
添加兩個按鈕,分別用于打開串口、關閉串口。IDC分別設置為IDC_BTN_OPEN、IDC_BTN_CLOSE,Caption分別設置為“打開”、“關閉” 添加兩個Edit Control,分別用于顯示接收到的數(shù)據(jù)以及輸入要發(fā)送的數(shù)據(jù),ID分別設置為IDC_RECEIVE、IDC_SEND 添加兩個Static Text控件,用于標注接收區(qū)與發(fā)送區(qū),Caption分別設置為“接收區(qū)”、“發(fā)送區(qū)”
添加一個按鈕用于發(fā)送數(shù)據(jù),ID設置為IDC_BTN_SEND,Caption設置為“發(fā)送” 調整控件的大小與位置。
完成后如圖:
3.給控件綁定變量
右鍵單擊Microsoft Communications Control控件,選擇“添加變量”,變量名為m_com 打開類向導給控件添加變量:
給IDC_PORT綁定變量,用于存放輸入的端口號,數(shù)據(jù)類型為int,變量名為m_port 給IDC_RECEIVE綁定變量,用于存放接收到的數(shù)據(jù),數(shù)據(jù)類型為CString,變量名為m_strReceive 給IDC_SEND綁定變量,用于存放輸入的待發(fā)送的數(shù)據(jù),數(shù)據(jù)類型為CString,變量名為m_strSend
4.給控件添加事件響應函數(shù)
右鍵單擊Microsoft Communications Control控件,選擇“添加事件處理程序”,點擊“添加編輯”,生成響應函數(shù),此函數(shù)用于接收數(shù)據(jù)。
在函數(shù)中添加以下代碼:
UpdateData(TRUE);if(nEvent == 2){
} UpdateData(FALSE);//將m_strReceive的值顯示到控件中
//更新m_strReceive的值
//獲取事件值
//獲取緩沖區(qū)位數(shù)
//時間值為2,此時為收到數(shù)據(jù) int nEvent = m_com.get_CommEvent();int k = m_com.get_InBufferCount();if(k <= 0)//位數(shù)小于等于0時則返回 return;char* str =(char*)m_com.get_Input().parray->pvData;//獲取接收到數(shù)據(jù)的字*(str + k)= '