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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于C8051F020和DTMF單元的電臺身份識別及語音自動

          基于C8051F020和DTMF單元的電臺身份識別及語音自動

          作者: 時(shí)間:2011-09-07 來源:網(wǎng)絡(luò) 收藏

            介紹一種基于C8051F單片機(jī),以DTMF編碼的方式識別電臺身份的系統(tǒng)。該系統(tǒng)使用簡單,在不改變電臺原有特性的基礎(chǔ)上,只需和電臺的擴(kuò)展口連接,便可實(shí)現(xiàn)對電臺身份的識別。即使對方破解了語音信號,還可通過地址編碼來分辨電臺的身份。該系統(tǒng)在保密性要求高的場所有一定應(yīng)用前景。

            2 系統(tǒng)組成與工作原理

            圖1為識別電臺身份系統(tǒng)結(jié)構(gòu)圖。單片機(jī)選用,選用MT8880雙音多頻器,語音存儲播放模塊采用ISD4004,另外還有顯示單元、存儲單元、鍵盤。

            


            電臺一般都預(yù)留擴(kuò)展接口:音頻輸入、音頻輸出、PTT發(fā)射控制、電源、地。該系統(tǒng)通過這些接口與電臺相連,如圖2所示。

            

            系統(tǒng)工作原理:作為發(fā)射機(jī)時(shí),電臺按下FTT鍵,PTT從高電平變?yōu)榈碗娖?,并將該信號送入單片機(jī),單片機(jī)的中斷程序?qū)⒈緳C(jī)的地址碼通過數(shù)據(jù)接口送至MT8880,經(jīng)MT8880調(diào)制后送入電臺的音頻輸入接口,伴隨語音信號一同發(fā)送。作為接收機(jī)時(shí)需分多種情況,如圖3所示。

            

          系統(tǒng)工作原理

            接收到語音信號后,判斷是否有DTMF信號輸入。如果有,MT8880解碼,解碼后的數(shù)據(jù)傳送給,C805117020再判斷此地址是否為預(yù)先規(guī)定的電臺地址碼。若是,此地址碼在LCD上顯示,否則顯示ERROR;若沒有DTMF信號而只有語音信號,則說明此信號非本網(wǎng)內(nèi)信號,操作者通過放音鍵回復(fù)事預(yù)先錄制好的一些語音信號迷惑對方。

            3 系統(tǒng)硬件設(shè)計(jì)

            整個系統(tǒng)根據(jù)功能可分為DTMF編/解碼和語音存儲播放兩部分。并由主控單元控制。由于該系統(tǒng)由電臺的蓄電池供電,所以選用低功耗器件。這里主控單元采用。它是完全集成的混合信號系統(tǒng)級芯片(SoC),具有與8051兼容的高速CIP-51內(nèi)核,與MCS-51指令集完全兼容。C8051F020的時(shí)鐘頻率可達(dá)25 MHz,含有64 KB片內(nèi)Flash程序存儲器,4 352 B的RAM、8個I/O端口、64根I/O線。

            3.1 DTMF編/解碼

            DTMF編/解碼器選用MT8880。MT8880C是一個帶有呼叫處理濾波器的單片DTMF信號收發(fā)器。該器件采用低功耗、高穩(wěn)定性的 ISO-CMOS技術(shù),內(nèi)置1個帶有可變增益的內(nèi)部放大器的高性能接收器,1個帶有脈沖計(jì)數(shù)器的發(fā)射器,以及1個可訪問MT8880內(nèi)部寄存器的標(biāo)準(zhǔn)微處理器接口。其內(nèi)部寄存器包括1個狀態(tài)寄存器、2個數(shù)據(jù)寄存器和2個控制寄存器,其電路如圖4所示。

            

            該系統(tǒng)采用單端輸入方式,IN-為運(yùn)放輸入端,R1與R2調(diào)節(jié)輸入信號增益。TDNE為音頻輸出,用于發(fā)送DTMF信號。OSCl為時(shí)鐘/振蕩器輸入端,OSC2為時(shí)鐘輸出端,MT8880采用3.579 5 MHz的工作時(shí)鐘。IRQ/CA為中斷請求信號,漏極開路輸出,當(dāng)有DTMF信號輸入時(shí),IRQ/CA向C8051F020發(fā)出中斷申請。D0~D3為微機(jī)數(shù)據(jù)總線,與TTL兼容,輸出測得的DTMF信號和輸入要發(fā)出的DTMF信號,與C8051F020 的I/O接口相連。12引腳CP2端為系統(tǒng)時(shí)鐘輸入,與讀寫控制端R/W配合完成MT8880的讀寫操作,RS0引腳為寄存器選擇,TTL電平兼容。地址碼可由0~9以及A~D組成。由于該系統(tǒng)應(yīng)用領(lǐng)域的特殊性,地址碼都經(jīng)加密算法。當(dāng)終端作為發(fā)射機(jī)時(shí),DTMF編/解碼部分把終端的地址碼經(jīng)一定算法加密后,調(diào)制成DTMF信號,再送入電臺,便于網(wǎng)內(nèi)其他電臺識別。當(dāng)終端作為接收機(jī)時(shí),DTMF編/解碼部分把所接收的DTMF信號解調(diào)成數(shù)字碼,再經(jīng)解密算法得到地址碼??紤]到該系統(tǒng)阻抗與電臺音頻I/O接口阻抗可能不匹配,應(yīng)在兩者間加入一個音頻變壓器。

            由于MT8880提供的標(biāo)準(zhǔn)微機(jī)接口和6800系列兼容,如果改用其他單片機(jī)控制。必須通過硬件或軟件的方式模擬其工作時(shí)序。筆者在使用 MT8880過程中發(fā)現(xiàn),關(guān)鍵是為MT8880提供接口時(shí)鐘信號CP2。其時(shí)鐘周期tCYC的典型值為250 ns,實(shí)際上tCYC在0.167~1 0 s(6 MHz~100 kHz)之間取值,MT8880也仍能正常工作,故tCYC取值范圍較寬,如圖5所示。因此,CP2的產(chǎn)生比較靈活。

            

          取值范圍

            該系統(tǒng)中,通過C8051F020的引腳P1.0與MT8880的引腳CP相連,模擬MT8880所需的工作時(shí)序。

            3.2 語音存儲播放

            語音存儲播放模塊選用ISD公司的ISD4004。該語音器件采用多電平直接模擬存儲(Chip Corder)專利技術(shù),聲音無需經(jīng)A/D轉(zhuǎn)換和壓縮,每個采樣值直接存儲在片內(nèi)的閃爍存儲器中,從而避免一般固體錄音電路量化和壓縮造成的量化噪聲和金屬聲。圖6為語音播放原理電路。語音輸人通過話筒(MIC)直接與ISD4004的引腳IN+、IN-連接差分驅(qū)動輸入。語音輸出端則是通過LM386放大后連接到電臺的語音輸出端。系統(tǒng)采用鍵控分段錄放音模式。通過錄音鍵可錄制10段不同的語音,每段錄音對應(yīng)鍵盤上一個按鍵,根據(jù)所接收到的語音信號,通過10個按鍵可播放不同的語音,使用方便、靈活。

            

            4 系統(tǒng)軟件設(shè)計(jì)

            系統(tǒng)程序基于匯編語言編寫,所有DTMF的收/發(fā)工作均由中斷服務(wù)程序完成。主程序只負(fù)責(zé)初始化程序和鍵盤掃描。圖7為主程序流程。圖8為接收中斷處理程序流程。圖9為發(fā)送中斷處理程序流程。

            

          主程序流程

            

          發(fā)送中斷處理程序流程

            5 結(jié)束語

            在某*項(xiàng)目研制中,成功利用上述系統(tǒng)實(shí)現(xiàn)了電臺及語音自動播放功能,實(shí)際使用情況證明,該系統(tǒng)接口簡單、可靠,取得令人滿意的效果。



          關(guān)鍵詞: C8051F020 DTMF單元 身份識別

          評論


          相關(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); })();