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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 語音數(shù)字記錄儀的電話接口

          語音數(shù)字記錄儀的電話接口

          作者: 時間:2009-04-09 來源:網(wǎng)絡 收藏

            電路與的通信通過四個信號線來實現(xiàn),分別是STB選通、ASW應答、DATA數(shù)據(jù)、CLK時鐘。這種通信可以從遠程模塊向單向發(fā)送數(shù)據(jù)。

          3 軟件控制流程

            主程序流程圖如圖7所示。

          系統(tǒng)一直監(jiān)測線路信號,在三次振鈴后接通。提示音通過8Ω電阻耦合到線路上后,就可以進行信號的通信。系統(tǒng)檢測線上的碼;同時檢測線路是否有忙音信號,判斷對方是否已掛機,若對方掛機則本地也掛機。在掛機后系統(tǒng)返回初始等待狀態(tài);如果主叫方三次密碼輸入錯誤,則通知電話查詢模塊主動掛機;主叫方在接通電話以后長時間沒有輸入需要查詢的記錄時間,電路也會主動掛機。

            軟件首先對所用到的寄存器和存儲器進行初始化,然后進入節(jié)電模式。

            如果有振鈴信號,則通過中斷方式進行響應。振鈴3次后接通電話;對于異常情況,如振鈴只響過一次對方就已經(jīng)掛機,則不響應。中斷處理程序中首先將中斷屏蔽掉(以避免同一次鈴流而產(chǎn)生幾次中斷),計時4s后打開中斷;如果超過8s仍然沒有下一次鈴流來觸發(fā)中斷,則清除計數(shù)器,跳轉(zhuǎn)到程序開始。累計振鈴3次后,關掉中斷,避免其他干擾信號打斷程序的正常運行。此后進入主程序。

            為了保證程序的實時性且不丟失數(shù)據(jù),主程序為一個主循環(huán)。循環(huán)中根據(jù)輸入和標志位來判斷是否有DTMF數(shù)據(jù)需要接收,是否有數(shù)據(jù)需要發(fā)送,是否需要掛機。而數(shù)據(jù)的接收檢測、發(fā)送和忙音檢測是在定時中斷中來做。

            有忙音時,M982的輸出是一個0.35s±0.05s的方波。此時對方已經(jīng)掛機,其他的任務已基本不需要占用時間,所以可以采取一種比較嚴格的檢測方法。本文在檢測到有忙音信號,即I/O3變低時,開始連續(xù)監(jiān)測,每隔100μs檢測一次,如果連續(xù)100ms中有85ms均為低電平,即檢測1000次中至少有850次為低,則認為檢測到一次方波的低電平部分,然后延時200ms后再開始檢測高電平。在檢測到高以后,同樣監(jiān)測100ms,然后再檢測低電平。一共檢測3個周期,如果檢測都通過,即認為收到一個合格的忙音信號,在掛機的同時通知記錄儀。

            在檢測到有DTMF信號時,即I/O4變?yōu)楦唠娖綍r,設置接收標志位,在主程序中接收數(shù)據(jù),并且緩存在RAM中。因為接收到的數(shù)據(jù)除了密碼,就是查詢時間,需要用FIFO的存儲方式,將順序輸入的數(shù)據(jù)發(fā)給記錄儀。在時鐘中斷服務程序中僅設置標志位,在主程序中讀取。

            如果有數(shù)據(jù)需要發(fā)送,電路首先在STB上給出信號;然后等待ASW線上的應答信號;在得到應答后,開始發(fā)送程序產(chǎn)生的時鐘信號,在時鐘信號的上升沿發(fā)送數(shù)據(jù)位,外圍電路在時鐘信號的下降沿接收數(shù)據(jù)。電路的傳送速率是100kbps。由于DTMF信號都只有四位數(shù)據(jù),所以數(shù)據(jù)發(fā)送時定義了一個前導碼,即三個‘0’,一個‘1’,然后是數(shù)據(jù)。

            這個電路經(jīng)過實際運行檢驗,具有電路可靠、使用靈活、成本低等特點。


          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();