<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 電源與新能源 > 設(shè)計(jì)應(yīng)用 > 單片機(jī)和MODEM接口及遠(yuǎn)程數(shù)據(jù)傳輸設(shè)計(jì)

          單片機(jī)和MODEM接口及遠(yuǎn)程數(shù)據(jù)傳輸設(shè)計(jì)

          作者: 時(shí)間:2011-12-23 來(lái)源:網(wǎng)絡(luò) 收藏

            隨著自動(dòng)化程度的不斷提高,對(duì)現(xiàn)場(chǎng)數(shù)據(jù)遠(yuǎn)程采集與傳輸?shù)囊笠踩找嫣岣?,在電話通?span id="lhjapcp" class=hrefStyle>網(wǎng)絡(luò)相當(dāng)普及的今天,最方便最靈活的方法就是采用MODEM(調(diào)制解調(diào)器)并借助于現(xiàn)有的模擬公用電話交換網(wǎng)進(jìn)行數(shù)據(jù)傳輸,經(jīng)過幾年的研究,筆者開發(fā)了一種在控制下通過公用電話交換機(jī)網(wǎng)絡(luò)做載體的數(shù)據(jù)傳輸系統(tǒng),這種數(shù)據(jù)傳輸系統(tǒng)不受時(shí)間與地域的限制,并可隨時(shí)實(shí)時(shí)追蹤現(xiàn)場(chǎng)資料的變化情況,從而為遠(yuǎn)程故障的診斷和排除提供了便利。

            由于目前國(guó)內(nèi)有關(guān)和MODEM的接口資料很少,所以,本文主要就及如何利用AT命令來(lái)控制MODEM 做些介紹。

            1 系統(tǒng)組成

            圖1 所示為該遠(yuǎn)程數(shù)據(jù)采集系統(tǒng)的系統(tǒng)組成圖,整個(gè)系統(tǒng)主要由現(xiàn)場(chǎng)數(shù)據(jù)采集器和監(jiān)控中心兩部分組成,現(xiàn)場(chǎng)數(shù)據(jù)采集器負(fù)責(zé)將所采集到的數(shù)據(jù)進(jìn)行預(yù)處理后打包, 并通過現(xiàn)場(chǎng)調(diào)制解調(diào)器MODEM、公用電話網(wǎng)和監(jiān)控中心的MODEM 將數(shù)據(jù)發(fā)送到監(jiān)控中心。然后監(jiān)控中心將接收到的數(shù)據(jù)進(jìn)行處理、顯示、存儲(chǔ)和分析,并根據(jù)需要向現(xiàn)場(chǎng)發(fā)送控制指令,由于監(jiān)控中心采用計(jì)算機(jī)與MODEM 直接相連的方式, 因此硬件接口比較簡(jiǎn)單, 而軟件編寫不是本文討論的重點(diǎn),不再贅述。系統(tǒng)有兩種工作方式:即監(jiān)控中心呼叫現(xiàn)場(chǎng)請(qǐng)求發(fā)送數(shù)據(jù)和現(xiàn)場(chǎng)呼叫監(jiān)控中心主動(dòng)發(fā)送數(shù)據(jù)。

            單片機(jī)和MODEM接口及遠(yuǎn)程數(shù)據(jù)傳輸設(shè)計(jì)

            圖1 系統(tǒng)組成圖

            2 MODEM 命令

            由于MODEM 是將數(shù)據(jù)通過公用電話網(wǎng)進(jìn)行遠(yuǎn)程發(fā)送和傳輸?shù)臉蛄?,這里先將MODEM 的功能及用法做一介紹“MODEM 是“調(diào)制解調(diào)器”的英文縮寫,所謂調(diào)制,就是將“0”和“1”的數(shù)字信號(hào)變成不同的頻率信號(hào),調(diào)制到載波頻率上,并利用電話線進(jìn)行模擬信號(hào)的傳送, 解調(diào)是調(diào)制的反過程, 即將載波頻率上的頻率信號(hào)解調(diào)成與其對(duì)應(yīng)的數(shù)字信號(hào),傳送至終端控制器。

            目前,我們?cè)谑袌?chǎng)上所見到的MODEM 都用賀氏兼容的指令集來(lái)管理和設(shè)定MODEM 的各項(xiàng)操作和通訊功能,而一般這些指令皆以AT為前置碼,所以稱這些指令為“AT指令”。下面介紹幾個(gè)常見的MODEM 指令,這些指令都以回車(RETURN)結(jié)尾。

            ATA:手動(dòng)應(yīng)答指令,強(qiáng)迫MODEM 摘機(jī)并檢測(cè)載波;

            ATE0: 指令不回應(yīng),即向MODEM 發(fā)送的指令不在終端回顯;

            ATV0: MODEM 以數(shù)字形式回應(yīng)信息,即MODEM 收到指令后,以數(shù)字形式返回結(jié)果碼;

            ATF:參數(shù)恢復(fù)為出廠值;

            ATD0:忽略DTR信號(hào);

            ATS0:將DSR信號(hào)設(shè)定為ON;

            ATD:發(fā)出撥號(hào)指令;

            ATW0:將MODEM 目前的參數(shù)狀態(tài)存儲(chǔ)在參數(shù)表0 中;

            ATY0:當(dāng)MODEM 初始上電時(shí),調(diào)用存儲(chǔ)的參數(shù)表0;

            ATZ0: 復(fù)位MODEM 并啟用存儲(chǔ)的第0組參數(shù)表;

            ATZ=X:將電話號(hào)碼X存儲(chǔ)在MODEM 的內(nèi)部存儲(chǔ)器中;

            ATDS:撥出MODEM 預(yù)存儲(chǔ)的電話號(hào)碼。

            那么,單片機(jī)如何利用這些指令來(lái)操作MODEM呢?下面以發(fā)送指令A(yù)TA為例來(lái)加以說(shuō)明,程序采用C51編寫,該程序只給出了相關(guān)的部分,

            #include P>

            #include P>

            #define U8251_C XBYTE[0xfd00]

            /* 定義8251 控制/狀態(tài)字地址*/

            #define U8251_D XBYTE[0xfc00]

            /*定義8251 數(shù)據(jù)緩沖區(qū)地址*/

            unsigned char code ATA[4]={‘A’,‘T’,‘A’,0x0d};

            /*0x0d為回車(return)控制符*/

            void send-code (unsigned char code *send_addr,

            unsigned char send_sum);

            /*發(fā)送函數(shù)聲明,形式參數(shù)為發(fā)送

            首地址和發(fā)送字符個(gè)數(shù)*/

            void main()

            {

            ……

            send_code(ATA,4); /*發(fā)送ATA應(yīng)答命令*/

            ……

            }

            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);

            }

            為了單片機(jī)對(duì)MODEM 的控制和操作,對(duì)本系統(tǒng)設(shè)計(jì)中的MODEM 做了如下初始化:

            ATFE0V0D0S0Y0W0

            3 接口電路

            圖2 為該現(xiàn)場(chǎng)數(shù)據(jù)采集系統(tǒng)中單片機(jī)和MODEM的接口電路圖, 單片機(jī)選用Winbord(華幫)公司生產(chǎn)的高性能低功耗單片機(jī)W78E52B,它采用80C31內(nèi)核,在指令上與MCS-51完全兼容,內(nèi)含8k的電可擦除MTP ROM(Multiple-Time Programmable ROM)。其內(nèi)部串口能和其它有串口的通訊設(shè)備一起進(jìn)行數(shù)據(jù)采集(這部分在圖2中沒畫出);

            單片機(jī)和MODEM接口及遠(yuǎn)程數(shù)據(jù)傳輸設(shè)計(jì)

            圖2 單片機(jī)和MODEM 的接口電路

            考慮到所采集的數(shù)據(jù)較多,故擴(kuò)展了一片8155 作為外部數(shù)據(jù)存儲(chǔ)器,并兼做并行數(shù)據(jù)采集接口,其內(nèi)部14 位定時(shí)器作為分頻器使用;另擴(kuò)展的一片8251 用來(lái)和MODEM 接口,8251的內(nèi)部工作時(shí)序,發(fā)送器時(shí)鐘和接收器時(shí)鐘需要外部輸入,在設(shè)計(jì)中,單片機(jī)提供的ALE信號(hào)作為其外部輸入,因而無(wú)需單獨(dú)設(shè)計(jì)分頻器,由于在單片機(jī)訪問外部存貯器時(shí), ALE要丟失一個(gè)周期,因而采用圖2所示的方法,可充分利用系統(tǒng)資源,根據(jù)接收時(shí)鐘輸入RXCLK和發(fā)送時(shí)鐘輸入TXCLK的不同,8251 的發(fā)送波特率和接收波特率可以不同,在本系統(tǒng)中,發(fā)送波特率和接收波特率相同,都由8155定時(shí)器分頻輸出TMROUT供給。發(fā)送數(shù)據(jù)可根據(jù)系統(tǒng)要求在主程序中完成,接收數(shù)據(jù)緩沖區(qū)請(qǐng)求輸出RXRDY經(jīng)74LS02反向后接78E52B的中斷輸入INT0,接收數(shù)據(jù)采用中斷方式控制,系統(tǒng)設(shè)計(jì)時(shí)忽略了DSR信號(hào), 因而在圖2 中將其直接接地;

            RS232 接口電平轉(zhuǎn)換電路采用一片具有五對(duì)輸入和輸出的MSX238,它自帶電荷泵,采用單5伏電源,只用一片便可提供本系統(tǒng)所有RS232電平的驅(qū)動(dòng)與轉(zhuǎn)換。

            4 現(xiàn)場(chǎng)數(shù)據(jù)采集器的功能及原理

            現(xiàn)場(chǎng)數(shù)據(jù)采集器有兩種工作方式, 即主叫方式和被叫應(yīng)答方式。主叫方式就是現(xiàn)場(chǎng)數(shù)據(jù)采集器主動(dòng)呼叫監(jiān)控中心;被叫應(yīng)答方式是在現(xiàn)場(chǎng)數(shù)據(jù)采集器收到監(jiān)控中心的呼叫振鈴后響應(yīng)應(yīng)答指令。另外,現(xiàn)場(chǎng)數(shù)據(jù)采集器具有遠(yuǎn)程設(shè)置主叫呼叫號(hào)碼的功能,其軟件編制流程圖如圖3 所示。

            單片機(jī)和MODEM接口及遠(yuǎn)程數(shù)據(jù)傳輸設(shè)計(jì)

            圖3 現(xiàn)場(chǎng)數(shù)據(jù)采集器的程序流程圖

            4.1 通訊波特率

            8251 的通訊波特率取決于RXCLK和TXCLK的時(shí)鐘輸

          分頻器相關(guān)文章:分頻器原理

          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();