基于VC6.0的多臺MSP430單片機和PC機串口通訊實現方案
引言
在計算機控制系統中,不可避免的要采用多機系統進行通信。在由一臺PC 機(上位機) 和多臺單片機(下位機) 構成的分布式控制系統中,通過PC 機的串口與多臺單片機的通信是最方便的。在這樣的分布式控制系統中,單片機與微機之間的多路通信是整個系統的關鍵。
系統組成及通訊原理
系統構成
系統構成如圖1所示,由上位機(即計算機)、通訊接口和下位機3部分組成。上位機選用的是工控機 ,智能終端由單片MSP430F169和外圍傳感器放大電路等構成。要想與PC 串口連接或者其它帶有串口的終端連接,必須要進行EIA-RS-232C 與MSP430 電平和邏輯關系的轉換。本設計采用MAX3232芯片, 可完成3V~5V 電平與串口電平的雙向轉換。
![]() |
MSP430F169單片機屬于德州儀器公司MSP430F14X/16X FLASH 系列。該系列是一組超低功耗的微控制器,工作電壓范圍1.8~3.6V。由于具有16位RISC結構,16 位寄存器和常 數寄存器,MSP430 達到了最大的代 碼效率。數字控制的振蕩器提供快速從所有低功耗模式蘇醒到活動模式的能 力時間少于6ms。 MSP430F169 帶有兩個16 位定 時器(帶看門狗功能)、速度極快的8 通道12 位A/D 轉換器(ADC)(帶內部參考電壓、采樣保持和自動掃描功能)、一個內部比較器和兩個通用同步/異步發射接收器、48個I/O口(均可獨立控制)的微處理器結構。硬件乘法器提高了單片機的性能并使單片機在編碼和硬件上可兼容。
通訊原理
MSP430F169單片機支持兩種不同的串行協議,通用同步協議(USART協議)和同步協議(SPI協議),用控制寄存器UCTL(表1)中的控制位SYNC來選擇所需的模式。SYNC=0:選擇異步模式UART;SYNC=1:選擇同步模式SPI,在此選擇異步模式。
控制寄存器內的信息決定了USART的基本操作,如選擇通信協議、通信模式、字符長度和校驗位等。在此設定字符長度為8位:CHAR=1,停止位1位:SP=0,奇校驗:PEV=0。 MSP430的波特率發生器有一預分頻/分頻器和一個調整器的組合,即使晶振頻率不是波特率的整數倍,這一組合也能使MSP430 正常工作而且還可以使其通訊協議工作在最大的波特率。采用這一技術, 即使用手表晶振(32768Hz),波特率也可以達到4800 和9600,選擇波特率為9600,外部時鐘為ACLK。
![]() |
系統通訊協議
在PC機和多臺單片機的通訊中,確定一個明確而合理的通訊協議是關鍵,包括對數據格式、通訊方式、傳送速度、傳送步驟、檢糾錯方式以及控制字符定義等問題做出統一規定。為了區別不同的分機,必須為每個分機分配一個唯一的地址,此地址唯一區別各單片機。數據格式采用數據包的形式,一次傳輸一組數據。數據包格式如表2所示:
起始標志位:1 個字節
分機地址: 1 個字節
![]() |
命令/ 數據: 1 個字節
數據長度: 1 個字節
數據內容: n 個字節
和檢驗: 2 個字節
結束標志位: 1 個字節
數據格式中的地址位表示與PC 機通訊的單片機地址。操作命令則表示此次通訊要完成的操作。在單片機發送上位機接收的時候,協議規定命令FFH 為上報數據, 此時數據包中的數據長度、數據內容、和檢驗三個域便填充實際發送數據的個數、數據及和校驗;命令F0H - F3H 則表示單片機給PC機的反饋信息,此時數據包中的數據長度、數據內容和檢驗三個域為空,其中當命令為F0H 表示接收成功,F1H 表示接收失敗并要求重發,F2H 表示單片機有數據上報要求,F3H 表示單片機無數據上報要求。操作命令域在PC 機發送單片機接收的時候也相似的協議規定。
軟件設計
下位機程序設計
主要由數據發送和數據接收子程序組成。設計單片機通信程序時,必須充分發揮單片機的效率。由于單片機多應用于實時性較強的控制場合,因此, 應將及時響應和控制對象的動作放在優先考慮的位置,以盡量減少通信等輔助性操作所占用的CPU時間。基于上述考慮,在設計單片機通信程序時,將通信程序分為接收中斷處理程序和發送中斷處理程序2部分。
![]() |
主程序首先完成串行口的初始化、設置串口的工作方式、串口波特率,數據位、校驗位等。
(1) 接收子程序
在接收到上位機發送的地址后, 下位機響應中斷信號進入接收子程序。首先讀取上位機發送的地址數據, 檢查地址是否匹配,如果匹配, 準備接收其余的數據幀。在接收完上位機發送的數據后,判斷下位機是否發出中斷申請,如果有,則清除中斷申請信號。
(2) 發送子程序只有當發送緩沖區內有數據要發送并且置位發送中斷允許位時才調用。
發送的數據遵守通訊協議的數據幀格式:首先發送起始標志, 然后發送需要傳輸的數據,最后發送校驗和以及結束標志位。
上位機通訊
上位機程序設計采用VC ++ 6.0開發平臺來實現。應用MSComm控件,可以非常方便地創建串行通信應用程序,但其程序執行效率不夠高,并且無法應用串行通信的一些底層功能。CSerialPort類支持線連接的串口編程操作,編寫的程序在Windows98/2000/XP下可以很好的運行CSerialPort類是基于多線程的,它的工作過程及在本系統的應用如下
![]() |
1)設置通信對象、通信端口號以及配置通信格式(如起始位個數、數據位長度、校驗方式、停止位個數等) 和其他相關屬性;
2)設定通信協議;
3)打開通信端口,進行數據的傳輸;
m_Port.StartMonitoring();//開啟監視線程;
m_Port.WriteToPort((LPCTSTR)temp);//發送數據;
4)關閉通信端口,釋放系統資源。在完成串行通信操作后,應該將串行通信端口的資源歸還給操作系統;
m_Port.ClosePort();//關閉串口
上位機程序工作流程如下:首先設置好串口參數,再開啟串口監測工作線程,串口監測工作線程監測到串口接收到的數據、流控制事件或其他串口事件后,就以消息方式通知主程序,激發消息處理函數來進行數據處理,這是對接收數據而言;發送數據可以直接發送。
結束語
串 口通訊方式在計算機控制系統中有著廣泛的應用,本文設計的通訊協議經實踐證明穩定可靠,保證了單片機與PC之間數據傳輸的準確率,CSerialPort類簡化封裝了大部分通訊用API函數,同時簡化了編程操作在實際中有著廣泛的應用 。
單片機相關文章:單片機教程
單片機相關文章:單片機視頻教程
單片機相關文章:單片機工作原理
分頻器相關文章:分頻器原理 晶振相關文章:晶振原理
評論