單片機和MODEM接口及遠程數據傳輸設計
隨著自動化程度的不斷提高,對現場數據遠程采集與傳輸的要求也日益提高,在電話通訊網絡相當普及的今天,最方便最靈活的方法就是采用MODEM(調制解調器)并借助于現有的模擬公用電話交換網進行數據傳輸,經過幾年的研究,筆者開發了一種在單片機控制下通過公用電話交換機網絡做載體的數據傳輸系統,這種數據傳輸系統不受時間與地域的限制,并可隨時實時追蹤現場資料的變化情況,從而為遠程故障的診斷和排除提供了便利。
由于目前國內有關單片機和MODEM的接口資料很少,所以,本文主要就單片機和MODEM接口及如何利用AT命令來控制MODEM 做些介紹。
1 系統組成
圖1 所示為該遠程數據采集系統的系統組成圖,整個系統主要由現場數據采集器和監控中心兩部分組成,現場數據采集器負責將所采集到的數據進行預處理后打包, 并通過現場調制解調器MODEM、公用電話網和監控中心的MODEM 將數據發送到監控中心。然后監控中心將接收到的數據進行處理、顯示、存儲和分析,并根據需要向現場發送控制指令,由于監控中心采用計算機與MODEM 直接相連的方式, 因此硬件接口比較簡單, 而軟件編寫不是本文討論的重點,不再贅述。系統有兩種工作方式:即監控中心呼叫現場請求發送數據和現場呼叫監控中心主動發送數據。

圖1 系統組成圖
2 MODEM 命令
由于MODEM 是將數據通過公用電話網進行遠程發送和傳輸的橋梁,這里先將MODEM 的功能及用法做一介紹“MODEM 是“調制解調器”的英文縮寫,所謂調制,就是將“0”和“1”的數字信號變成不同的頻率信號,調制到載波頻率上,并利用電話線進行模擬信號的傳送, 解調是調制的反過程, 即將載波頻率上的頻率信號解調成與其對應的數字信號,傳送至終端控制器。
目前,我們在市場上所見到的MODEM 都用賀氏兼容的指令集來管理和設定MODEM 的各項操作和通訊功能,而一般這些指令皆以AT為前置碼,所以稱這些指令為“AT指令”。下面介紹幾個常見的MODEM 指令,這些指令都以回車(RETURN)結尾。
ATA:手動應答指令,強迫MODEM 摘機并檢測載波;
ATE0: 指令不回應,即向MODEM 發送的指令不在終端回顯;
ATV0: MODEM 以數字形式回應信息,即MODEM 收到指令后,以數字形式返回結果碼;
ATF:參數恢復為出廠值;
ATD0:忽略DTR信號;
ATS0:將DSR信號設定為ON;
ATD:發出撥號指令;
ATW0:將MODEM 目前的參數狀態存儲在參數表0 中;
ATY0:當MODEM 初始上電時,調用存儲的參數表0;
ATZ0: 復位MODEM 并啟用存儲的第0組參數表;
ATZ=X:將電話號碼X存儲在MODEM 的內部存儲器中;
ATDS:撥出MODEM 預存儲的電話號碼。
那么,單片機如何利用這些指令來操作MODEM呢?下面以發送指令ATA為例來加以說明,程序采用C51編寫,該程序只給出了相關的部分,
#include
#include P>
#define U8251_C XBYTE[0xfd00]
/* 定義8251 控制/狀態字地址*/
#define U8251_D XBYTE[0xfc00]
/*定義8251 數據緩沖區地址*/
unsigned char code ATA[4]={‘A’,‘T’,‘A’,0x0d};
/*0x0d為回車(return)控制符*/
void send-code (unsigned char code *send_addr,
unsigned char send_sum);
/*發送函數聲明,形式參數為發送
首地址和發送字符個數*/
void main()
{
……
send_code(ATA,4); /*發送ATA應答命令*/
……
}
void send_code(unsigned char code *send_addr,
unsigned char send_sum)
{
do{
while((U8251_c0x05)!=0x05);
U8251_D=*send_addr;
send_addr++;
}while(--send_sum);
}
為了單片機對MODEM 的控制和操作,對本系統設計中的MODEM 做了如下初始化:
ATFE0V0D0S0Y0W0
3 接口電路
圖2 為該現場數據采集系統中單片機和MODEM的接口電路圖, 單片機選用Winbord(華幫)公司生產的高性能低功耗單片機W78E52B,它采用80C31內核,在指令上與MCS-51完全兼容,內含8k的電可擦除MTP ROM(Multiple-Time Programmable ROM)。其內部串口能和其它有串口的通訊設備一起進行數據采集(這部分在圖2中沒畫出);

圖2 單片機和MODEM 的接口電路
考慮到所采集的數據較多,故擴展了一片8155 作為外部數據存儲器,并兼做并行數據采集接口,其內部14 位定時器作為分頻器使用;另擴展的一片8251 用來和MODEM 接口,8251的內部工作時序,發送器時鐘和接收器時鐘需要外部輸入,在設計中,單片機提供的ALE信號作為其外部輸入,因而無需單獨設計分頻器,由于在單片機訪問外部存貯器時, ALE要丟失一個周期,因而采用圖2所示的方法,可充分利用系統資源,根據接收時鐘輸入RXCLK和發送時鐘輸入TXCLK的不同,8251 的發送波特率和接收波特率可以不同,在本系統中,發送波特率和接收波特率相同,都由8155定時器分頻輸出TMROUT供給。發送數據可根據系統要求在主程序中完成,接收數據緩沖區請求輸出RXRDY經74LS02反向后接78E52B的中斷輸入INT0,接收數據采用中斷方式控制,系統設計時忽略了DSR信號, 因而在圖2 中將其直接接地;
RS232 接口電平轉換電路采用一片具有五對輸入和輸出的MSX238,它自帶電荷泵,采用單5伏電源,只用一片便可提供本系統所有RS232電平的驅動與轉換。
4 現場數據采集器的功能及原理
現場數據采集器有兩種工作方式, 即主叫方式和被叫應答方式。主叫方式就是現場數據采集器主動呼叫監控中心;被叫應答方式是在現場數據采集器收到監控中心的呼叫振鈴后響應應答指令。另外,現場數據采集器具有遠程設置主叫呼叫號碼的功能,其軟件編制流程圖如圖3 所示。

圖3 現場數據采集器的程序流程圖
4.1 通訊波特率
8251 的通訊波特率取決于RXCLK和TXCLK的時鐘輸
分頻器相關文章:分頻器原理












評論