摘要:本文介紹了一種用80C196KB單片機和PC機控制Modem進行遠程數(shù)據(jù)傳輸?shù)募夹g(shù),提出了一套自行設計的糾錯協(xié)議。本設計已成功應用于某供電局電網(wǎng)諧波實時監(jiān)測系統(tǒng)。
關鍵詞:80C196KB單片機 Modem 數(shù)據(jù)傳輸
在許多實時監(jiān)測系統(tǒng)中,經(jīng)常需要接收距離較遠的測控點數(shù)據(jù),如何快速可靠的實現(xiàn)數(shù)據(jù)的遠程傳輸是這些監(jiān)測系統(tǒng)必須解決的問題。在監(jiān)測現(xiàn)場,為了降低系統(tǒng)的成本,往往采用單片機系統(tǒng)作為數(shù)據(jù)采集和記錄單元;在中央控制中心,常常利用PC機來完成人機會話及與監(jiān)測現(xiàn)場的通信。數(shù)據(jù)的遠程傳輸目前經(jīng)常用調(diào)制解調(diào)器(Modem)通過電話線來進行。本文將介紹一套實用的主從式遠程通記系統(tǒng)。其下位機由16位單片機80C196KB承提,上位機的管理平臺則基于界面友好、功能強大的Visual Basic 6.0。
1 80C196與PC間的通訊方式
用80C196KB單片機的串行接口和調(diào)制解調(diào)器以及現(xiàn)有的電話線來實現(xiàn)遠程雙向通訊的系統(tǒng)方框圖如圖1所示。
在利用現(xiàn)有電話線進行數(shù)據(jù)傳輸?shù)拇型ㄓ崟r,必須把將要傳送的數(shù)據(jù)按先后順序,在公共信道上逐位傳送。
串行通訊對字符編碼、字符格式和傳輸速度都有具體規(guī)定,必須嚴格遵守。
異步串行通訊數(shù)據(jù)的傳送格式由四部分組成,即起始位、數(shù)據(jù)位、奇偶校驗位和終止位。通訊協(xié)議要求在發(fā)送端每傳送一個字符都必須要有起始位、數(shù)據(jù)位、奇偶校驗位和一個終止位的字符串;而在接收端,也要按照起始位、數(shù)據(jù)位、奇偶校驗位和一個終止位的字符串進行計數(shù)接收。
2 80C196KB與Modem間的接口
RS-232C的標準規(guī)定,邏輯“0”表示其電位應在+5~+15V之間,邏輯“1”表示其電位應在-5~-15V之間,而80C196KB單片機串口電閏為TTL電平,因此必須要通過電平轉(zhuǎn)換才能符合串行通訊標準。具體的接口電路如圖2所示。
電路中采用IN-TERSIL公司生產(chǎn)的只需+5V供電的串行收/發(fā)驅(qū)動器芯片ICL232來進行電平的轉(zhuǎn)換和驅(qū)動。當終端(196KB)處于操作規(guī)程狀態(tài)并可接收數(shù)據(jù)時,為了能將此信息傳送給MODEM,則必須使用管腳4上的數(shù)據(jù)終端就緒(DTR)信號;同樣地,為使終端設備(196KB)能夠?qū)?shù)據(jù)傳輸?shù)男畔⑼ㄖ{(diào)制解調(diào)器,就必須使用管腳7上的請求發(fā)送(RTS)信號。
由圖2可見,單片機DB(9芯)只給調(diào)制解調(diào)器的RS-232接口(9芯)提供三條信號線,即發(fā)送數(shù)據(jù)(TXD)、接收數(shù)據(jù)(RXD)和信號地SG。為了使數(shù)據(jù)鏈路能正常工作,可將調(diào)制解調(diào)器RS-232接口的4腳(DTR)和7腳(RTS)置高,以使之長期有效。
表1列出了RS-232的管腳及描述。表中的DTE為數(shù)據(jù)終端設備(Data Terminal Equipment)。本文中指下位機80C196KB和上位機PC,而DCE則表示數(shù)據(jù)通信設備(Data Communication Equipment)。本文中指調(diào)制解調(diào)器。
表1 RS-232各引腳描述
| 管腳編號 | 信號描述 | 通用縮寫 | 來自DCE | 至DTE |
| 1 | 載波檢測 | CD | X | |
| 2 | 接收數(shù)據(jù) | RD | X | |
| 3 | 發(fā)送數(shù)據(jù) | TD | X | |
| 4 | 數(shù)據(jù)終端就緒 | DTR | X | |
| 5 | 信號地 | SG | X | |
| 6 | 數(shù)據(jù)集就緒 | DSR | X | |
| 7 | 請求發(fā)送 | RTS | X | |
| 8 | 清除發(fā)送 | CTS | X | |
| 9 | 振鈴指示器 | RI | X |
3 波特率設置
為了實現(xiàn)與遠方中央控制計算機正確可靠地通訊,雙方波特率必須一致?紤]到所選信道為公用電話網(wǎng),為兼顧數(shù)據(jù)傳輸?shù)母咚傩院涂煽啃?文中將波特率定為9600bps。
3.1 下位機部分
80C196KB串行口的波特率取決于16位波特率寄存器的內(nèi)容。該寄存器應以連續(xù)2個字節(jié)進行裝載,低位字節(jié)優(yōu)先。寄存器的最高位用于選擇波特率發(fā)生器的輸入時鐘源,最高位為1,選用XTAL1(即晶體振蕩器)信號為源信號,否則選用自T2CLK引腳的信號為源信號。
80C196KB的內(nèi)部時鐘信號是經(jīng)2分頻獲得的。若以BAUD-REG表示波特率寄存器的裝載值,那么在同步模式0時,BUAD-REG=XTAL1/(2×波特率)-1或T2CLK/波特率;而在異步模式1、2和3時,其BAUD-REG=XTAL1/(16×波特率)-1或T2CLK/(8×波特率)。
80C196KB的通信方式設定為異步方式1時,可進行全雙工通訊,其格式為每10位構(gòu)成一串行幀,其中包括1位起始位,8位數(shù)據(jù)位和1位停止位。
在本系統(tǒng)中,80C196KB的晶振為12MHz,因此,為使波特率達到9600,需將波特率寄存器賦值為804EH。
表2列出了采用XTAL1作為時鐘源時,異步模式下一些常用波特率所對應的波特率寄存器值。應注意,表中所列的值是根據(jù)上述公式計算所得的值再加上最高位“1”后得到的。
表2 常用波特率對應的波特率寄存器值





