摘 要: 介紹了一種基于AVR單片機(jī)Atmega8和調(diào)制解調(diào)芯片MSM7512設(shè)計的嵌入式Modem,,詳細(xì)地闡述了該Modem的硬件及軟件設(shè)計方法,。在設(shè)計中,鑒于單片機(jī)串口" title="串口">串口資源匱乏的問題,采用單片機(jī)上I/O口模擬UART口的技術(shù)予以解決,。上位機(jī)" title="上位機(jī)">上位機(jī)軟件用Delphi語言編寫,通過嵌入式Modem實(shí)現(xiàn)了計算機(jī)與遠(yuǎn)方設(shè)備之間的數(shù)據(jù)傳送,。
關(guān)鍵詞: 嵌入式Modem Atmega8 MSM7512B 模擬串口
隨著經(jīng)濟(jì)的發(fā)展,,遠(yuǎn)程監(jiān)控系統(tǒng)的應(yīng)用日益廣泛。其核心部分是遠(yuǎn)程信息交換, 即系統(tǒng)需要在地域分布廣泛的設(shè)備之間進(jìn)行信息的交換及協(xié)調(diào)工作,。對于某些采集點(diǎn)分散,、傳輸量不大、對速度要求又不高的信息交換系統(tǒng),,目前有兩種解決方案:一是采用Internet或現(xiàn)場總線技術(shù),,該方案鋪設(shè)網(wǎng)絡(luò)的費(fèi)用高,維護(hù)量大,;二是利用現(xiàn)有的電話網(wǎng)通過Modem進(jìn)行數(shù)據(jù)傳輸,,這樣不僅可以擺脫傳統(tǒng)的分布式總線系統(tǒng)繁瑣的布線、中繼,、放大以及運(yùn)行過程中維護(hù)量大等問題,,而且系統(tǒng)擴(kuò)展極為方便,基本不受設(shè)備地域的限制,該方案靈活實(shí)用且成本低廉,。
嵌入式Modem主要由單片機(jī)(或DSP)和調(diào)制解調(diào)芯片構(gòu)成,。與通用Modem相比,嵌入式Modem具有體積小,、易維護(hù),、外圍電路簡單、成本低廉等特點(diǎn),。在企業(yè)或住宅區(qū)中的遠(yuǎn)程監(jiān)控系統(tǒng)使用嵌入式Modem,,能夠節(jié)約大量的人力和財力,大大提高自動化水平,,因此具有較廣闊的應(yīng)用前景,。本文介紹一種基于Atmel公司AVR系列單片機(jī)Atmega8和OKI公司調(diào)制解調(diào)芯片MSM7512的嵌入式Modem。
1 嵌入式Modem的硬件設(shè)計
系統(tǒng)的原理框圖如圖1所示,,上位機(jī)為PC機(jī),,下位機(jī)是遠(yuǎn)方的嵌入式Modem和設(shè)備。PC機(jī)是數(shù)據(jù)終端,,通過嵌入式Modem與遠(yuǎn)方終端實(shí)現(xiàn)數(shù)據(jù)交換,;嵌入式Modem以Atmega8為中心,控制MSM7512芯片實(shí)現(xiàn)數(shù)據(jù)的發(fā)送與接收,,通過外圍電路實(shí)現(xiàn)振鈴檢測,、摘機(jī)、顯示信息,、呼叫遠(yuǎn)方Modem等,,它以RS232接口標(biāo)準(zhǔn)與上位機(jī)相連。
1.1 Atmega8單片機(jī)簡介
AVR單片機(jī)是美國Atmel公司生產(chǎn)的具有雙總線結(jié)構(gòu)的RISC單片機(jī)系列,,具有較短的指令周期和較快的運(yùn)行速度,。Atmega8是其于2002年推出的一款新型AVR高檔單片機(jī),工作在16MHz時能達(dá)到16MIPS,。該芯片內(nèi)部集成了8K字節(jié)Flash,、1K字節(jié)內(nèi)部SRAM及512字節(jié)的E2PROM,具有豐富強(qiáng)大的硬件接口電路(32個通用寄存器,,23個通用可編程I/O口,,三個計數(shù)器,三個PWM通道,,一個I2C的總線接口,,一個USART接口,一個SPI接口,,6通道的10位ADC及2通道的8位ADC),,并且支持在線編程(ISP)和在應(yīng)用編程(IAP),。由于采用了小引腳封裝(PDIP28和TQFP/MLF32)形式,所以其價格僅與低檔單片機(jī)相當(dāng),,因此Atmega8是一款性價比很高的8位單片機(jī),。
1.2 MSM7512簡介
MSM7512是日本OKI公司生產(chǎn)的一種價格低廉、功耗低,、性能良好的調(diào)制解調(diào)芯片,。該芯片滿足ITU-TV.23協(xié)議標(biāo)準(zhǔn),由單電源(3~5V)供電,采用FSK半雙工調(diào)制解調(diào)方式,通信速率為1200bps, 低功耗(典型值僅25mW),穩(wěn)定性好,,具有片內(nèi)回音消除電路,,模擬輸出可直接連入PSTN;并具有TTL接口,,其FSK輸出信號可直接驅(qū)動600Ω的通信電路,外圍電路簡單,,可方便地與數(shù)字系統(tǒng)及計算機(jī)系統(tǒng)相連,廣泛應(yīng)用于嵌入式Modem,、數(shù)據(jù)傳輸和家庭安防系統(tǒng)中,。圖2為該芯片的功能框圖,。
MSM7512有四種工作模式,由MOD1,、MOD2端口進(jìn)行控制。當(dāng)MOD1=0,、MOD2=0時,MSM7512工作于調(diào)制模式,,XD輸入為“0”或“1”的數(shù)字信號,AO端則對應(yīng)輸出頻率為“2100Hz”或“1300Hz”的FSK信號;當(dāng)MOD1=1,、MOD2=0時,MSM7512工作于解調(diào)模式,AI輸入頻率為“2100Hz”或“1300Hz”的FSK信號,RD則對應(yīng)輸出解調(diào)后的“0”或“1”數(shù)字信號,;當(dāng)MOD1=0、MOD2=1時,,MSM7512工作于環(huán)路自測模式,,用于檢測芯片工作是否正常;當(dāng)MOD1=1,、MOD2=1時,,MSM7512工作于節(jié)電模式,此時MSM7512功耗僅為0.1mW,,其它模式—般功耗為25mW,。在本設(shè)計中所使用的工作模式是FSK調(diào)制發(fā)送及接收模式。
在硬件設(shè)計中需要著重考慮的問題是:MSM7512是一塊串行調(diào)制解調(diào)芯片,,與單片機(jī)通過串口相連,,而單片機(jī)上的USART串口也需要與上位機(jī)進(jìn)行串行通信" title="串行通信">串行通信,但Atmega8只有這一個串口,,就出現(xiàn)了串口資源不足的問題,。如果僅僅為增加一個串口而使用可編程串行通信接口芯片8251,,無疑會增加設(shè)計的復(fù)雜性和成本。而利用Atmega8的兩個I/O口編程模擬一個UART串口的功能(即模擬串口),,可以很好地解決這個問題,。這將在軟件設(shè)計部分具體介紹。
1.3 振鈴檢測和撥號電路
振鈴檢測與撥號電路如圖3所示,。它的工作原理很簡單,,在此不再贅述。
2 嵌入式Modem的軟件設(shè)計
軟件部分的設(shè)計包括上,、下位機(jī)通信協(xié)議的制訂,、上位機(jī)程序和單片機(jī)程序的編寫。其中上位機(jī)程序以Delphi為開發(fā)工具,,單片機(jī)程序用ANSIC C編寫,。
2.1上位機(jī)與下位機(jī)通信協(xié)議的制訂
上位機(jī)與下位機(jī)之間的數(shù)據(jù)交換必須遵循一定的通信協(xié)議,通信雙方才能按照該協(xié)議解析所傳輸?shù)臄?shù)據(jù),。就本設(shè)計而言,,一臺PC機(jī)要對應(yīng)多個下位機(jī),屬于主從式結(jié)構(gòu),。所制訂的通信協(xié)議為:
前導(dǎo)碼使通信雙方保持同步,,目的地址和源地址就是各設(shè)備所對應(yīng)的電話號碼,當(dāng)PC機(jī)發(fā)送數(shù)據(jù)時,,先發(fā)送目的地址給所有下位機(jī),,如果某個從機(jī)被上位機(jī)尋址,它將接收主機(jī)接下來發(fā)出的數(shù)據(jù)幀" title="數(shù)據(jù)幀">數(shù)據(jù)幀,,而其它的從機(jī)則將忽略數(shù)據(jù)幀,;當(dāng)PC機(jī)接收數(shù)據(jù)" title="接收數(shù)據(jù)">接收數(shù)據(jù)時,同樣地,,下位機(jī)先發(fā)送源地址再發(fā)數(shù)據(jù)幀給上位機(jī),。CRC校驗(yàn)碼是為了防止傳輸出錯而設(shè)計的。為設(shè)計方便,,規(guī)定數(shù)據(jù)幀為32位,,其中功能碼為4位,參數(shù)為28位,。功能碼為0000時,,參數(shù)表示的是設(shè)備傳輸數(shù)據(jù);功能碼為1111時,,參數(shù)表示設(shè)備自檢數(shù)據(jù),。
2.2 上位機(jī)軟件的編寫
上位機(jī)是一個數(shù)據(jù)發(fā)送與接收的終端,上位機(jī)軟件的功能是:選擇并發(fā)送要呼叫的電話號碼,;使計算機(jī)與嵌入式Modem能夠通過RS232接口標(biāo)準(zhǔn)收發(fā)數(shù)據(jù),。由于Delphi是一種易學(xué)易用的面向?qū)ο蟮某绦蛟O(shè)計工具,,因而采用它來編寫上位機(jī)程序。在上位機(jī)程序中要能夠?qū)τ嬎銠C(jī)串行口的硬件進(jìn)行操作,。然而Delphi本身不提供串行通信組件,,因此需要調(diào)用Windows API函數(shù)建立一個串行通信組件TComm來對串口硬件實(shí)現(xiàn)控制,進(jìn)而使用該組件完成串行通信功能,。在設(shè)計中還需要使用其它一些組件如Button,、Memo、RadioGroup等來完成軟件界面的設(shè)計,。
2.3 單片機(jī)程序設(shè)計
根據(jù)設(shè)計中單片機(jī)的任務(wù)設(shè)置一個全局變量TransOrReceFlag(規(guī)定值為0時,,表示Modem處于接收狀態(tài);為1時,,Modem處于發(fā)送狀態(tài)),,主程序根據(jù)它的值跳轉(zhuǎn)到相應(yīng)的子程序中。下面分別介紹子程序的編寫過程,。
嵌入式Modem發(fā)送數(shù)據(jù):上位機(jī)按照通信協(xié)議通過串口向Atmega8先后發(fā)送目的地址(電話號碼)和數(shù)據(jù)幀,。單片機(jī)在USART接收完成中斷服務(wù)程序中,將MSM7512設(shè)置為調(diào)制模式并使MSM7512與電話線連通,,再控制雙音多頻信號發(fā)生器HT9200產(chǎn)生目的地址所對應(yīng)的DTMF信號,,送入MSM7512的外部信號輸入端EAI,經(jīng)內(nèi)部放大后從AO輸出端向電話線上發(fā)送所呼叫的電話號碼,,待與遠(yuǎn)方Modem建立起聯(lián)系后,,就可以通過模擬串口向MSM7512傳送接下來所收到的數(shù)據(jù)幀。
嵌入式Modem接收數(shù)據(jù):Atmega8外部計數(shù)口T1上有下降沿出現(xiàn)時,,表明電話線上有振鈴信號,可能有遠(yuǎn)方Modem要求和本地Modem進(jìn)行數(shù)據(jù)傳輸,。為防止誤撥,,規(guī)定了振鈴信號需要連續(xù)出現(xiàn)的次數(shù)。當(dāng)達(dá)到計數(shù)設(shè)定值時,單片機(jī)確認(rèn)有遠(yuǎn)方Modem要進(jìn)行數(shù)據(jù)傳輸,,于是將MSM7512設(shè)置為調(diào)解模式,,接通電話線,再通過模擬串口接收MSM7512傳來的數(shù)據(jù),,經(jīng)USART把數(shù)據(jù)傳給上位機(jī),。
單片機(jī)程序中一個重要的部分是模擬UART串口的實(shí)現(xiàn)部分。在設(shè)計中用定時/計數(shù)器0產(chǎn)生合適的波特率,使接收和發(fā)送的數(shù)據(jù)符合異步串行通信數(shù)據(jù)幀的格式,;一個普通I/O 口作為TXD′,,外部中斷0口T0作為RXD′;在內(nèi)存中開辟一塊緩沖區(qū)模擬串口的數(shù)據(jù)接收/發(fā)送緩沖器,。規(guī)定模擬串口中數(shù)據(jù)幀為1個起始位,,8個數(shù)據(jù)位,,1個停止位,波特率為9600bps,。下面就接收和發(fā)送兩個過程介紹模擬串口的實(shí)現(xiàn),。
模擬串口接收數(shù)據(jù):串行通信中數(shù)據(jù)幀都是從一個下降沿開始的。當(dāng)T0口上有下降沿出現(xiàn)并觸發(fā)中斷時,,表明MSM7512已經(jīng)接收到遠(yuǎn)方傳來的數(shù)據(jù),,單片機(jī)需要對所接收到的數(shù)據(jù)進(jìn)行采樣。在中斷服務(wù)程序中初始化數(shù)據(jù)位計數(shù)器和定時/計數(shù)器0,,設(shè)定其第一次定時時間為1.5位,,因?yàn)閺钠鹗嘉恍枰訒r1.5位才能進(jìn)行數(shù)據(jù)位D0的采樣(1.5位=1起始位+0.5D0位),如圖4所示,。接下來的8次采樣的間隔一樣,,所以在定時器第一次計時溢出后,在每次溢出中斷服務(wù)程序中重新裝載的定時時間均為1位,。采樣后將所得數(shù)據(jù)存入緩沖區(qū)再送給上位機(jī),。圖5是模擬串口接收數(shù)據(jù)的程序流程圖。
模擬串口發(fā)送數(shù)據(jù):與接收數(shù)據(jù)過程相比,,發(fā)送數(shù)據(jù)要簡單些,。因?yàn)椴恍枰蓸樱瑤兴形坏臅r間長度是一樣的,,所以定時/計數(shù)器0的定時時間為固定值,,即1位的時間。送出的第一位數(shù)據(jù)是起始位,,通知接收方準(zhǔn)備接收數(shù)據(jù),,然后從最低有效位LSB到最高有效位MSB,數(shù)據(jù)被一位一位地移出,,在最末的是停止位(即邏輯1),,用來讓接收方區(qū)分發(fā)送的數(shù)據(jù)字節(jié)。
由于在上位機(jī)程序中集成了選擇發(fā)送電話號碼的功能,,所以本文所介紹的嵌入式Modem能夠靈活方便地與遠(yuǎn)方設(shè)備進(jìn)行數(shù)據(jù)傳輸,。它還具有體積小、外圍電路簡單,、易維護(hù),、成本低廉等特點(diǎn),具有較大的應(yīng)用價值,。
參考文獻(xiàn)
1 馬 潮,,詹衛(wèi)前,耿德根.Atmega8原理及應(yīng)用手冊[M]. 北京:清華大學(xué)出版社,2003:1~298
2 沈 文.AVR單片機(jī)C語言開發(fā)入門指導(dǎo)[M]. 北京: 清華大學(xué)出版社,2003:116~228
3 張俊峰,,馬 翔,,江秉文.基于MSM7512b的數(shù)據(jù)通信技術(shù)[J].自動化儀表,,2002;23(12):28~31
4 Atmega8 Data Sheet[Z]. Atmel Corporation, 2002:1~166
5 Half Duplex Interrupt Driven Software UART[Z]. Atmel Corporation Application Note 306,2001:1~25
6范逸之,陳立元.Delphi與RS-232串行通信控制[M].北京:清華大學(xué)出版社,2002:158~304