亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用于蜂窩式無線電收發(fā)機系統(tǒng)的自診斷系統(tǒng)的制作方法

文檔序號:7564983閱讀:312來源:國知局

專利名稱::用于蜂窩式無線電收發(fā)機系統(tǒng)的自診斷系統(tǒng)的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及到一種用于檢驗蜂窩式無線電收發(fā)機系統(tǒng)的所有功能的自診斷系統(tǒng)。本發(fā)明特別涉及諸如美國專利第4,658,096號和4,737,975號所公開的蜂窩式接口系統(tǒng)。本文包括了上述專利所公開的系統(tǒng)以作為參考。在上述專利的系統(tǒng)中,一接口裝置將標準的電話機、傳真機、調(diào)制解調(diào)器或其它通信設備連接于蜂窩或蜂窩式無線電收發(fā)機,該接口裝置能使上述通訊設備經(jīng)由無線電收發(fā)機作正常的操作。所說的接口裝置還可將DTMF或脈沖式撥號信號轉(zhuǎn)換成數(shù)字格式以便傳遞給無線電收發(fā)機,因此,通過該無線電收發(fā)機可利用所撥的號碼來呼叫無線電系統(tǒng)范圍內(nèi)的號碼。本發(fā)明的系統(tǒng)可檢測上述適配器接口裝置的所有功能的正常運轉(zhuǎn)以及其它特征,如無線電收發(fā)機的功率輸出或該無線電收發(fā)機正在使用時的頻率等,來自無線電收發(fā)機的信號或來自無線電網(wǎng)絡的信號可以改變上述功率輸出,而無線電收發(fā)機或蜂窩式網(wǎng)絡則可有選擇地改變前述頻率。本發(fā)明的診斷與檢測系統(tǒng)可用于諸如純蜂窩系統(tǒng)之類的任何蜂窩式系統(tǒng)或者諸如ISDN(綜合業(yè)務數(shù)字網(wǎng)絡)及其它個人通信系統(tǒng)之類的蜂窩式系統(tǒng),在上述蜂窩式系統(tǒng)中設置有一蜂窩式適配器或接口裝置以便將DTMF或脈沖式撥號信號轉(zhuǎn)換成數(shù)字格式從而傳遞給與該蜂窩式系統(tǒng)相聯(lián)的蜂窩式無線電收發(fā)機。已知提供有用于整個蜂窩系統(tǒng)的診斷與檢測設備。還已知提供有可自檢測的機載裝置。該機載裝置公開于Rogers的美國專利第5,016,269號,此專利公開了一種蜂窩式電話的應急電話亭,本文包含了該專利以作為參考。上述專利公開了由電話亭自身執(zhí)行的自診斷程序。該專利的電話亭中帶有自診斷程序并定期性地將所檢查到的作業(yè)狀態(tài)經(jīng)由蜂窩式網(wǎng)絡報告給總局。Rogers公開了一種蜂窩式便攜式手機和無線電收發(fā)機以及相關(guān)的自動診斷系統(tǒng),該系統(tǒng)用于對所說的蜂窩式系統(tǒng)進行檢查并報告給總局。但是,該專利未公開對諸如上述美國專利第4,658,096號和第4,737,975號中所使用的DTMF轉(zhuǎn)換器的監(jiān)控與自診斷功能,而且,Rogers也未說明從總局產(chǎn)生回鈴以便對系統(tǒng)的適當作業(yè)進行檢查。除純蜂窩系統(tǒng)以外,可使用本發(fā)明的蜂窩式系統(tǒng)是這樣一些系統(tǒng),它們一般涉及到無線數(shù)字個人通信系統(tǒng)(這些系統(tǒng)帶有多個智能基地臺和智能便攜式手機終端,每個基地臺和手機均具有預定的無線電信號覆蓋面積),具體地說,它們涉及到數(shù)字無線電電話式個人通信系統(tǒng)(PCS),這種系統(tǒng)帶有一全ISDN接口裝置,從而便于PCS呼叫業(yè)務經(jīng)由ISDN接口裝置及公共電話交換網(wǎng)或任何交換網(wǎng)的連接和轉(zhuǎn)換,所說的個人通信系統(tǒng)其有聲音/數(shù)據(jù)/圖像(或它們的組合形式)以及雙路全雙工呼入呼出能力,并且可充分加以使用,同時可與任何所選定的調(diào)制方法相兼容,而且與通過在軟件中實現(xiàn)的分布式邏輯電路所設置的蜂窩間協(xié)議切換相兼容,所說的軟件則駐留在便攜式智能手機、智能基地臺以及配備有PCS服務控制數(shù)據(jù)庫的公共電話交換網(wǎng)(或任何交換網(wǎng))中。在過去十年內(nèi),移動式及便攜式通信日益增加的可用性使商業(yè)及住宅用戶正在擺脫完全有線的電信網(wǎng)絡的束縛。具體地說,蜂窩式通信系統(tǒng)連同尋呼及其它附加業(yè)務第一次使得電信業(yè)務有了真正的可移動性。移動與便攜技術(shù)以及諸如無線電信數(shù)字傳輸之類新技術(shù)方面的重大技術(shù)進步業(yè)已顯著地增加了使用用戶可以利用的無線電頻譜的無線電信服務的數(shù)量和類型。這些未來的服務包括但不局限于蜂窩式電話服務的高級形式、高級數(shù)字式無線電話服務、便攜式傳真服務、無線交換臺、無線專用支局服務以及無線局域網(wǎng)服務,并且,可以通過現(xiàn)有的公共交換網(wǎng)或通過可替代的局部有線網(wǎng)(如電纜電視)來使用上述未來的服務。因此,數(shù)字或個人通信系統(tǒng)可獨立于有線局域網(wǎng)而存在,也可與有線局域網(wǎng)共存,從而填補了當前通信系統(tǒng)中的空白,并且,還能形成新的市場,這些市場中的多數(shù)是尚未明朗化的。PCS的出現(xiàn)通過顯著地改進所有電信網(wǎng)的靈活性與功能,從而對它們的開發(fā)與結(jié)構(gòu)產(chǎn)生巨大的影響。所以,PCS的供應商能在全國范圍內(nèi)以經(jīng)濟和快捷的方式獲得并服務于現(xiàn)有及新的市場。用于用戶日益增加的流動性,美國個人通信的要求正在隨著對即時通信的需求的增加而迅速改變。PCS的優(yōu)點之一在于這種系統(tǒng)能用單一的通信設備在任何時間、任何地點與任何人進行聯(lián)系。PCS會促進用戶日益增加的流動性和靈活性,這是因為,這種方法能解決與用戶進行穩(wěn)定通信中所存在的潛在問題。PCS的無線化能使得用戶不會錯過重要的呼叫,并且減小回話時的時間和費用。PCS將無線電的功能與公共電話交換網(wǎng)(PSTN)技術(shù)和基本設施結(jié)合起來并且能提供無線電蜂窩間的全雙工能力(雙向呼出)以及切換(從而使得用戶在不中斷通話的情況下自由地從一個無線電蜂窩移至另一個無線電蜂窩)。注意到以下實事是很重要的對于新型PCS設施和用于多種(有時是相矛盾的)應用即無線電專用交換支局、小型輕質(zhì)蜂窩式便攜電話、便攜式傳真機、多通路無繩電話以及目的在于便于與特定個人用戶進行聯(lián)絡(而不是與特定電臺進行聯(lián)絡)的輔助設施的需求正在持續(xù)地增加。目前所提供的無線電設備及相關(guān)的設施(即無繩電話、無線電尋呼以及蜂窩式無線電話)無法完全滿足對上述新型PCS設施的要求。例如,無繩電話只能在家庭或辦公室內(nèi)及周圍使用并且只能處理非常少的信道(10個左右),這些信道擁擠在一起并只限于在與它們相聯(lián)的基地臺附近使用。無線電尋呼設施僅僅是單向的并且容量有限。蜂窩式及專門的移動式無線電設施無法滿足所有對PCS的預期要求。隨著時間的推移,PCS會具有標準化的設備,這種設備在硬件方面帶有通用的組件,從而能在不受外部信號源瞬時干擾的相關(guān)設備方面提高了可靠性,并且,PCS帶有自動通話登記、自動通話發(fā)送、語音郵件、傳真能力、方便的漫游特征、遠程數(shù)據(jù)傳送、增加了的保密性/主叫用戶的ID/分級設施、增加了的電池壽命以及通用協(xié)議。為了能最佳地實現(xiàn)這種市場授權(quán),數(shù)字式PCS是一種必需的設備。無線PCS最終會不需要有用于通訊的用硬電纜相連的建筑設施。一般地說,PCS會簡化帶有輔助特征的通信設備。數(shù)字式PCS會便于改進技術(shù)性的通信設備、系統(tǒng)與裝置。所以,本發(fā)明可在設置有蜂窩式適配器或接口插板的ISDN或其它PCS系統(tǒng)中使用,所說的適配器或接口插板通過將DTMF或脈沖信號轉(zhuǎn)換成可發(fā)送給PCS無線電收發(fā)機的數(shù)字格式或者通過提供所述系統(tǒng)專用的其它功能,從而允許在系統(tǒng)內(nèi)使用標準的陸用電話機或其它通信設備。例如,在無線電收發(fā)機只能進行呼出的專用報警系統(tǒng)中,接口裝置不必提供響鈴、忙音或類似的信號。另外,在只需呼入的系統(tǒng)中,接口裝置不必將撥號的DTMF或脈沖信號轉(zhuǎn)換成數(shù)字格式。正如美國專利第4,658,096號和第4,737,975號所述的蜂窩接口插板那樣,PCS-蜂窩適配器還提供諸如產(chǎn)生撥號音、振鈴或類似信號之類的全部所需的其它功能。發(fā)明概要所以,本發(fā)明的基本目的是提供一種自診斷系統(tǒng),這種系統(tǒng)用于檢測帶有蜂窩式接口裝置的蜂窩式無線電收發(fā)系統(tǒng)的所有功能,所說的接口裝置將標準的陸用電話機或其它通信設備連接于蜂窩無線電收發(fā)機或者連接于諸如蜂窩式PCS或ISDN無線電收發(fā)機,并且,所說的接口裝置還將DTMF或脈沖式撥號信號轉(zhuǎn)換成數(shù)字式以便傳送給蜂窩或蜂窩式無線電收發(fā)機,從而,可以使用在陸用電話機或與其相當?shù)脑O備上所撥叫的號碼去呼叫上述蜂窩或蜂窩式系統(tǒng)范圍內(nèi)的號碼。本發(fā)明不僅能監(jiān)控和檢測蜂窩或蜂窩式無線電收發(fā)機及相關(guān)電源和類似設備的適當功能,而且會監(jiān)控和檢測蜂窩或蜂窩式接口裝置。本發(fā)明的檢測設備能與接口裝置相連,此接口裝置則將通信設備連接于無線電收發(fā)機,以便通過該收發(fā)機呼入或接收呼叫,所說的檢測設備帶有自身的診斷程序,從而能監(jiān)控并報告接口裝置的適當功能。上述檢測設備還可將診斷程序連接于接口裝置,該診斷程序模擬諸如陸用通信電話、傳真機、調(diào)制解調(diào)器以及類似設備之類的通信設備所執(zhí)行的功能,以便在接口裝置內(nèi)產(chǎn)生各種相應的應答,從而確定該接口裝置是否在正常的操作。上述檢測設備還會對接口裝置產(chǎn)生摘機信號,并檢測接口裝置因響應摘機信號而產(chǎn)生的撥號音信號是否出現(xiàn)。上述檢測設備還生成DTMF信號并將該信號傳送給接口裝置,并且檢測接口裝置因響應所生成的DTMF信號而輸出的DTMF信號。上述檢測設備還會對接口裝置產(chǎn)生掛機信號,并且在接口裝置正在生成振鈴信號時對該接口裝置產(chǎn)生摘機信號,以便確定接口裝置在應答電話呼入時能適時地斷開振鈴信號。上述檢測設備還能在接口裝置連接于無線電收發(fā)機時通過電話網(wǎng)產(chǎn)生電話呼出并送回給該無線電收發(fā)機,從而,所說的診斷程序會使得收發(fā)機呼叫自己,并且,該診斷程序檢測收發(fā)機因響應上述呼叫而產(chǎn)生的忙音信號。參照附圖將很容易地理解本發(fā)明,在附圖中圖1A和圖1B顯示了本發(fā)明的自檢測所包含的步驟的總體流程圖;圖2是顯示本發(fā)明的自檢測摘機子例程所包含的步驟的流程圖;圖3是顯示本發(fā)明的自檢測撥號音生成子例程所包含的步驟的流程圖;圖4是顯示本發(fā)明的自檢測DTMF音生成子例程所包含的步驟的流程圖;圖5A至圖5C顯示了本發(fā)明的自檢測振鈴生成子例程所包含的步驟的流程圖;圖6是顯示本發(fā)明的自檢測應答振鈴過程子例程所包含的步驟的流程圖;圖7A與圖7B是顯示本發(fā)明的通話檢測子例程所包含的步驟的流程圖,該子例程檢查適當?shù)耐ㄔ挋z測以及對呼入的應答。圖8A和圖8B顯示了本發(fā)明的出錯碼生成子例程;圖9是顯示本發(fā)明的重置子例程的流程圖;圖10是本發(fā)明的系統(tǒng)的框圖;圖11至圖14是顯示用于通過模擬所需檢測的事件而檢測蜂窩或蜂窩式接口及收發(fā)機的各種電路的概略圖。發(fā)明的詳細公開本發(fā)明的自動診斷維護系統(tǒng)可用于諸如美國專利第4,658,096號和第4,737,975號所公開的蜂窩或蜂窩式接口插板及系統(tǒng)。此外,本發(fā)明的自診斷維護系統(tǒng)還可以供諸如IMTS之類的其它無線電收發(fā)機系統(tǒng)使用,在這類系統(tǒng)中,提供了基地臺與主控臺之間的無線通訊,并且,無線電收發(fā)機與諸如美國專利第4,658,096和第4,737,975號所公開的適配器接口插板相連,這種接口插板則將諸如陸用通訊電話、傳真機、調(diào)制解調(diào)器或類似設備之類的通信器材連接于所說的無線電收發(fā)機并使這些通信器材正常地發(fā)揮功能。上述接口裝置根據(jù)預定的用途而提供多種功能。例如,在無線電收發(fā)機只進行呼出的專用報警系統(tǒng)中,接口裝置就不必向通信設備產(chǎn)生振鈴、產(chǎn)生忙音信號以及類似的信號。另外,在只需要有呼入的系統(tǒng)中,接口裝置不必將撥號的DTMF或脈沖信號轉(zhuǎn)換成數(shù)字格式。依照本發(fā)明,提供了一種軟件,這種軟件與美國專利第4,658,096號和4,737,975號所公開的蜂窩接口插板或其它無線電收發(fā)機接口插板的微處理器相通訊,這種軟件可人工或自動地啟動以便啟動本發(fā)明的自動診斷接口插板,并且,這種軟件可以診斷上述專利的整個系統(tǒng)內(nèi)所包括的全部軟件和硬件系統(tǒng)的適當功能??梢詸z測每個單一的項目。例如,對接口插板來說,可以檢測DTMF轉(zhuǎn)換器,與兩線路接頭相連的四線路接口、忙音軟件以及接口的其它功能。此外,還會檢測無線電收發(fā)機、電池以及接口的其它方面。本發(fā)明的維護系統(tǒng)能在蜂窩或蜂窩式網(wǎng)絡范圍內(nèi)呼叫中心臺或基地臺的預定電話號碼,然后,中心臺可發(fā)回一個回音或者撥叫接口系統(tǒng)的當前號碼以獲得忙音信號。這種情況被看做是一次檢測。本發(fā)明還能在蜂窩或蜂窩式系統(tǒng)的范圍內(nèi)發(fā)送另一個電碼號碼以呼叫相同或不同的中心臺,因而,該中心臺可發(fā)回一個1000Hz的精確單音,從而,本發(fā)明的軟件會比較上述1000Hz的單音與其自身預定的配置,以便確定線路是否接通以及蜂窩或蜂窩式系統(tǒng)是否在正確地運行。這是一種特別有用的系統(tǒng),因為,即使最終用戶認為電話有問題,該系統(tǒng)也能使該用戶使用電話。然后,這種檢測會通知電話公司是蜂窩系統(tǒng)的中心局有錯還是最終用戶的基本裝置有問題。依照本發(fā)明,有兩種不同的組件,第一種是遙測維護(telemaintenance)電路,第二種是遙測計費(teletariff)電路。遙測維護電路進行將如以下詳細說明的復合檢測,該復合檢測包括對預定的號碼進行電話呼叫。遙測維護電路將檢測的結(jié)果報告給上述特定的號碼。此外,遙測維護電路還能撥叫自己的號碼以便確認所述基本裝置通過接收忙音信號而正在進行接收和傳輸。用戶按下位于基本裝置一側(cè)的按鈕可以啟動上述的成組的檢測。在按下按鈕時,按鈕附近的LED(發(fā)光二級管)會持續(xù)地閃爍以表示檢測正在進行。如果在檢測結(jié)束時LED仍繼續(xù)閃亮,這就表示所述的基本裝置有問題。上述檢測活動一般最多不超過40秒鐘。另一方面,如果LED停止閃亮并且關(guān)閉,就表示檢測成功并且基本裝置在檢測所檢查的項目方面處于適當?shù)墓ぷ鳡顟B(tài)。作為一種可選擇方案,如果傳輸介質(zhì)允許的話(即無線電收發(fā)機處于工作狀態(tài)以接收電話號碼),那么,前述軟件和硬件就能使得用一外部號碼來進行所說的檢測。第二種電路的功能包括它使用來自蜂窩或蜂窩式系統(tǒng)的計費信號并產(chǎn)生用于標準的臺式電話或付費電話的相應的計費脈沖。這種設備判讀來自蜂窩或蜂窩式的信號并且不作任何的局內(nèi)計費。這種電路以與產(chǎn)生長音相類似的方式運行,并且可供能發(fā)送計費信號的任何蜂窩或蜂窩式系統(tǒng)使用。對遙測維護程序組件流程的說明用戶可以通過按下自診斷按鈕而激活檢測工作程序。當被調(diào)用時,按口插板的控制權(quán)被轉(zhuǎn)交給用于進行自動檢測的遙測維護組件的主自診斷子例程。圖1A和圖1B顯示了DO_TEST例程或主自診斷例程。對各種檢測過程進行多次調(diào)用。每一過程之后都檢查出錯標識。在有任何出錯的情況下都停止檢測程序。然后,對其狀態(tài)進行編碼并按如下所述那樣將結(jié)果通過四個LED顯示給用戶。參照圖1A,在步驟1中,檢測工作程序以初始化變量和標識開始。在步驟2中,程序調(diào)用Hook_Test子例程。在Hook_Test子例程中,用戶的電話與塞尖和塞環(huán)(TIP及RING)線是斷開的,而遙測維護組件(TelemaintenanceModule,以下將予以詳細說明)則在適當位置處與諸如美國專利第4,658,096號和第4,737,975號所公開的接口插板相連以準備進行檢測。步驟3檢查Hook_Test中所檢測到的任何錯誤。如果發(fā)現(xiàn)有任何一種錯誤,該檢測程序就會停止,程序會進入圖1B中的步驟14。但是,如果未檢測到錯誤,程序就會在步驟4中調(diào)用Dial_Tone測試例程。步驟5檢查任何的撥號者錯誤。如果發(fā)現(xiàn)有任何一種錯誤,該檢測程序就會停止,程序會進入圖1B中的步驟14。但是,如果未檢測到錯誤,程序就會在步驟6中調(diào)用下一個檢測例程即步驟6的DTMF_Test例程。程序在圖1B的步驟7處繼續(xù),在該步驟處,檢查任何一種DTMF_Tone例程。如果發(fā)現(xiàn)有任何一種錯誤,該檢測程序就會停止,程序會進入步驟14。但是,如果來檢測到錯誤,程序就會在步驟8中調(diào)用下一個檢測例程即步驟8的Ring_Test例程。步驟9檢查任何的振鈴錯誤。如果發(fā)現(xiàn)有任何一種錯誤,該檢測程序就會停止,程序會進入步驟14。但是,如果未檢測到錯誤,程序就會在步驟10中調(diào)用下一個檢測例程即Ring_Answer_Test例程。步驟11檢查任何的振鈴應答錯誤。如果發(fā)現(xiàn)有任何的錯誤,該檢測程序就會停止,程序會進入步驟14。但是,如果未檢測到錯誤,程序就會在步驟12中調(diào)用下一個檢測例程即步驟12中的Make_Call_Test例程。步驟13檢查任何的呼出錯誤。如果發(fā)現(xiàn)有任何一種錯誤,該檢測程序就會停止,程序會進入步驟14。但是,如果未檢測到錯誤,程序就會在步驟15調(diào)用下一個檢測例程即步驟15的Fin_Self_Test例程。如果在執(zhí)行任一子例程的過程中發(fā)現(xiàn)有任何的錯誤,程序就會轉(zhuǎn)至步驟14。在步驟14中,程序會調(diào)用Error_Acc例程。最后,檢測程序在步驟15清除了所有的變量和標識之后結(jié)束,從而將控制權(quán)交還給電話機并且繼續(xù)接口的正常操作。以下對圖2至圖9的解釋對應于并且詳細說明了上述各個檢測例程。參照圖2,Hook_Test例程(圖1A的步驟2)在步驟16處開始于對變量和標識的初始化。在步驟17中,程序清除LED的任何輸出。在步驟18中,使用戶的電話與接口板的TIP和RING線相斷開,而在步驟19中,本發(fā)明的遙測維護組件則替代電話而被連接。步驟20進行延時以便上述連接有足夠的反應時間。在步驟21中,本發(fā)明的遙測維護組件模擬并產(chǎn)生摘機。步驟22進行延時以便有足夠的時間進行上述摘機。在步驟23中,程序檢查接口插板的叉簧狀態(tài),而接口板則與遙測維護組件相連。步驟24對摘機進行檢測。如果未檢測到摘機,則程序進入步驟25,在該步驟中設置ERROR_FLAG并將MATN_FLAG_ERROR置為1。但是,如果未檢測到錯誤,程序就會進入到步驟26,在該步驟中,啟動撥號音以便進行圖3所示的下一步檢測。最后,Hook_Test例程結(jié)束,程序返回至圖1A和圖1B中的主例程DO_Test。參照圖3,Dial_Test例程在步驟27處開始于對變量及標識的初始化。步驟28進行延時以便有足夠的時間產(chǎn)生撥號音。步驟29對撥號音進行檢測。如果撥號音出錯,則程序進行步驟30,在步驟30中設置ERROR_FLAG并將MAIN_FLAG_ERROR置為3。但是,如果未檢測到錯誤,程序就會進入步驟31,在該步驟中,程序循環(huán)返回至步驟29以檢測撥號音至少711毫秒。711毫秒結(jié)束后未檢測到錯誤,Dial_test例程結(jié)束,程序返回至圖1A和圖1B的主例程Do_Test。參照圖4,用于檢測接口板將適當?shù)腄TMF轉(zhuǎn)換成數(shù)字數(shù)據(jù)的DTMF_Test例程通過關(guān)閉來自前一個檢測例程的撥號音而在步驟32開始。步驟33將第一個DTMF音置為0。在步驟34中,遙測維護組件送出與上述值相對應的DTMF音。步驟35進行延時以便使上述DTMF音延續(xù)足夠的時間。步驟36斷開DTMF音。步驟37進行延時以使得接口裝置檢測DTMF音的脈沖。在步驟38中,接口裝置讀取DTMF音。步驟39檢查所接收到的DTMF音。如果所送出的DTMF音不等于接收到的DTMF音,或者未接收到DTMF音,那么,程序就會進入步驟40,在該步驟中設置ERROR_FLAG并且將MAIN_FLAG_ERROR置為4。但是,如果上述兩個DTMF音是相同的,則程序進入步驟41并選定下一個DTMF數(shù)字。在步驟42中,程序檢驗是否已檢測了所有的DTMF音,如果沒有,則程序循還返回以檢測下一個DTMF數(shù)字。最的,在已檢測了所有的DTMF音之后,DTMF_Test例程結(jié)束,程序返回至圖1A和圖1B中的主例程DO_Test。參照圖5A和圖5B,它們顯示了Ring_Test例程。Ring_Test例程檢測接口插板振鈴電路所產(chǎn)生的振鈴的兩個脈沖的定時。參照圖5A,Ring_Test例程在步驟43處開始于對變量和標記的初始化。在步驟44中,遙測維護組件進行一次掛機。步驟45進行延時以便接口裝置檢測上述掛機。在步驟46處,設置接口裝置以確認正在進行呼入,所以,該接口板產(chǎn)生振鈴。步驟47至步驟53的目的是驗證振鈴開始于以后的兩秒鐘內(nèi)并且未檢測到摘機。在步驟47中,將計時器清零。步驟48對摘機進行檢測。如果檢測到摘機,則停止檢測,程序轉(zhuǎn)至圖5C中的步驟49以顯示錯誤。但是,如果檢測到掛機,則程序進入步驟51,在該步驟中,遙測維護組件檢查振鈴的被激勵。步驟52檢測振鈴是否已開始。如果已開始振鈴,則程序進入圖5B的步驟54。但是,如果尚未開始振鈴,則程序會在步驟53中檢查計時器。如果該計時器的時間小于兩秒,則程序循環(huán)返回步驟48直至振鈴開始。但是,如果上述兩秒鐘的計時器已完成計時,則檢測就會停止,程序轉(zhuǎn)至圖5C中的步驟49以指示錯誤。參照圖5B,步驟54進行延時。步驟55至步驟59的目的是檢驗振鈴持續(xù)至少一次,長度為1.3秒,并且檢驗未檢測到摘機。在步驟55中,將計時器清零。步驟56對掛機進行檢測。如果檢測到摘機,則檢測停止,程序轉(zhuǎn)至圖5C中的步驟49以指示錯誤,但是,如果檢測到掛機,則程序進入步驟57,在該步驟中,遙測維護組件檢查被激勵的振鈴。步驟58檢測振鈴是否已停止。如果振鈴已停,則程序進入圖5B中的步驟49。但是,如果振鈴尚未停止,則程序在步驟59內(nèi)檢查計時器。如果計時器小于1.3秒,則程序循環(huán)返回至步驟56直至振鈴停止。但是,如果計時器完成計時,則檢測停止,程序轉(zhuǎn)至圖5C中的步驟49。步驟60至步驟62的目的是檢驗振鈴持續(xù)不超過2.5秒。在步驟60中,遙測維護組件檢查振鈴是否是被激勵的。步驟61檢測振鈴是否已經(jīng)停止。如果振鈴停止,則程序轉(zhuǎn)至圖5C中的步驟63。但是,如果振鈴尚未停止,則程序在步驟62中檢查計時器。如果計時器小于2.5秒,則程序會循環(huán)返回步驟60直至振鈴停止。但是,如果計時器完成了計時,則檢測停止,程序轉(zhuǎn)至圖5C中的步驟49。參照圖5C,步驟63至步驟65的目的是檢驗在兩秒鐘的時間內(nèi)未檢測到摘機。在步驟63中,將計時器清零。步驟46對掛機進行檢測。如果檢測到摘機,則檢測停止,程序在步驟49處繼續(xù)以指示錯誤。但是,如果未檢測到摘機,則程序在步驟65中檢查計時器。如果計時器小于兩秒,則程序會循環(huán)返回步驟64直至振鈴開始。但是,如果計時器完成了計時,則程序在步驟66處繼續(xù),在該步驟中,程序檢測本子例程業(yè)已進行了多少次檢測振鈴循環(huán)。如果只對振鈴檢測了一次,則程序在步驟64處繼續(xù),在該步驟中,設置標識Ring_Second。此后,程序循環(huán)返回至步驟47以便第二次檢測振鈴。但是,如果已對振鈴檢測了兩次,則本例程結(jié)束,程序返回至主例程Do_Test。如果在Ring_Test例程的任何一部分中檢測到錯誤,則程序會轉(zhuǎn)至步驟49。步驟49清除呼入狀態(tài),所以,振鈴停止。然后,程序在步驟50處繼續(xù),在該步驟中,設置ERROR_FLAG并將MAIN_FLAG_ERROR置為5。然后,本例程結(jié)束,程序返回至主例程Do_Test。參照圖6,它顯示了Ring_Answer_Test例程。當應答呼入的電話時,本例程檢測在振鈴期間將摘機信號傳給接口插板時該接口板的響應。步驟68至步驟69的目的是檢驗振鈴將在以后的兩秒鐘內(nèi)開始并且未檢測至摘機。在步驟68中,將計時器清零。步驟69對掛機進行檢測。如果檢測到摘機,則檢測停止,程序轉(zhuǎn)至步驟73。但是,如果檢測到掛機,則程序繼續(xù)并且振鈴是處于被激勵的。步驟71檢測是否已開始振鈴。如果已開始振鈴,則程序進入步驟74。但是,如果尚未開始振鈴,則程序會在步驟72處檢查計時器。如果計時器少于兩秒,則程序循環(huán)返回至步驟69以等待振鈴開始。但是,如果上述的兩秒計時器已完成了計時,則檢測停止,程序轉(zhuǎn)至步驟73。在步驟74中,遙測維護組件產(chǎn)生一次摘機。步驟75進行延時以便使接口板檢測上述摘機。在步驟76中,接口板檢查叉簧的狀態(tài)。如果在步驟77中未檢測到摘機,則檢測停止,程序轉(zhuǎn)至步驟73。但是,如果接口板檢測到摘機,則程序在步驟78處繼續(xù)。如果在Ring_Answer_Test例程的任何一部分中檢測到了錯誤,則程序轉(zhuǎn)至步驟73,在該步驟中,設置ERROR_FLAG并且將MAIN_FLAG_ERROR置為6。然后,程序在步驟78處繼續(xù)。在步驟78中,清除呼入狀態(tài),所以,接口插板會使振鈴停止。此后,本例程結(jié)束,程序返回到主例程Do_Test。參照圖7A和圖7B,它們顯示了Call_Test例程。該例程按下述方式檢測與接口板相連的蜂窩或蜂窩式無線電收發(fā)機首先檢查電源,然后產(chǎn)生一個呼叫自身的電話號碼。參照圖7A,步驟79檢查收發(fā)機的電源是否“接通”,如果電源是“斷開”的,則在步驟81中將MAIN_FLAG_ERROR置為1,然后程序轉(zhuǎn)至圖7B中的步驟93。但是,如果電源是“接通”的,則程序進入步驟82,在該步驟中,接口板請求并獲取收發(fā)機所指定的電話號碼。步驟83進行延時以提供用于收發(fā)機的應答時間。在步驟84中,接口板對自己進行電話呼叫。步驟85進行延時以便接通蜂窩或蜂窩式網(wǎng)絡與無線電收發(fā)機。在步驟86中,接口板向收發(fā)機請求INUSE(使用中)狀態(tài)。步驟87檢查呼叫的狀態(tài)。如果該狀態(tài)不是INUSE,則在步驟88中將MAIN1_FLAG_ERROR置為4,然后程序轉(zhuǎn)至圖7B中的步驟93。但是,如果收發(fā)機處于INUSE狀態(tài),則程序進入圖7B的步驟89。在圖7B中,遙測維護組件在步驟89中檢查。如果在步驟90中檢測到忙音,則程序轉(zhuǎn)至步驟93以指示所有的裝置均在正確運行。但是,如果未檢測到忙音,則程序進入步驟91,在該步驟中檢查計時器。如果計時器少于18.2秒,則程序循環(huán)返回步驟86。這就使蜂窩或蜂窩式網(wǎng)絡有更多的時間返回忙時向應。但是,如果計時器結(jié)束了計時,則程序進入步驟92,在該步驟中將MAIN_FLAG_ERROR置為3。在步驟93中,接口板向收發(fā)機發(fā)送一呼叫END(結(jié)束標志)。然后,遙測維護組件在步驟94中向接口板提供一掛機信號。最后,Call_Test例程結(jié)束,程序返回至主例程Do_Test。圖8A和圖8B的目的是以能通過LED在以后輸出其結(jié)果的方式根據(jù)前述錯誤標識來生成一個ERROR_CODE。參照圖8A,此例程開始于檢查兩個錯誤標識中的一個即MAIN_FLAG_ERROR。步驟95檢查MAIN_FLAG_ERROR是否等于1或叉簧SLIC錯誤(HookSlicError)。如果相等,則在步驟96中將ERROR_CODE置為1,然后程序返回主例程Do_Test。但是,如果不相等,則程序在步驟97處繼續(xù)。步驟97檢查MAIN_FLAG_ERROR是否等于2或叉簧振鈴錯誤(Hook_RingError)。如果相等,則在步驟98中將ERROR_CODE置為2,然后程序返回至主例程Do_Test。但是,如果不相等,則程序在步驟99處繼續(xù)。步驟99檢查MAIN_FLAG_ERROR是否等于3或撥號音錯誤(Dial_Tone_Error)。如果相等,則在步驟100中將ERROR_CODE置為3,然后程序返回至主例程Do_Test。但是,如果不相等,則程序在步驟101處繼續(xù)。步驟101檢查MAIN_FLAG_ERROR是否等于4或DIMF單音錯誤(DTMFToneError)。如果相等,則在步驟102中將ERROR_CODE置為4,然后程序返回至主例程Do_Test。但是,如果不相等,則程序在步驟103處繼續(xù)。步驟103檢查MAIN_FLAG_ERROR是否等于5或振鈴檢測錯誤(Ring_Detection_Error)。如果相等,則在步驟104中將ERROR_CODE置為5,然后程序返回至主例程Do_Test。但是,如果不相等,則程序在步驟105處繼續(xù)。步驟105檢查MAIN_FLAG_ERROR是否等于6或振鈴應答錯誤(Ring_Answer_Error)。如果相等,則在步驟106中將ERROR_CODE置為6,然后程序返回主例程Do_Test。如果不相等,則程序轉(zhuǎn)向圖8B的步驟107。在圖8B中,例程開始于檢查第二個出錯標識的值即MAIN1_FLAG_ERROR。步驟107檢查MAIN1_FLAG_ERROR是否等于1,或功率射頻錯誤(Power_RadioError)。如果相等,則在步驟108中將ERROR_CODE置為7,然后程序返回至主例程DoTest。但是,如果不相等,則程序在步驟109處繼續(xù)。步驟109檢查MAIN1_FLAG_ERROR是否等于2或乎叫錯誤(CallError)。如果相等,則在步驟10中將ERROR_CODE置為8,然后程序返回至主例程Do_Test。但是,如果不相等,則程序在步驟111處繼續(xù)。步驟111檢查MAIN1_FLAG_ERROR是否等于3或忙音錯誤(Busy_ToneError)。如果相等,則在步驟123中將ERROR_CODE置為9,然后程序返回至主例程Do_Test。但是,如果不相等,程序就在步驟113處繼續(xù)。步驟113檢查MAIN1_FLAG_ERROR是否等于4或“使用中”錯誤(“InUse”Error)。如果相等,則在步驟114中將ERROR_CODE置為10,然后程序返回至主例程Do_Test。如果不相等,程序就會在步驟115處繼續(xù)。步驟115檢查MAIN1_FLAG_ERROR是否等于5或1000Hz錯誤(1000HzError)。如果相等,則在步驟116中將ERROR_CODE置為11,然后程序返回至主例程Do_Test。如果不相等,程序就會返回至主例程Do_Test。參照圖9的FIN_SELF例程,該例程的目的是將接口板重置為正常的功能并通過使LED閃亮四次而表示檢測結(jié)束。FIN_SELF例程始于步驟117,在該步驟中,遙測維護組件產(chǎn)生一次掛機。在步驟118中,將所有的變量和錯誤標識均清零。步驟119關(guān)掉所有的LED。步驟120進行延時。步驟121接通所有的LED。步驟122進行延時。步驟123循還返回步驟119從而使LED閃亮四次。最后,步驟124關(guān)掉所有的LED,然后程序返回至圖1A和圖1B的主例程Do_Test。以下說明本發(fā)明的操作情況,然后說明用于進行上述自檢測的各個電路,再說明用于進行本文所述之操作的軟件程序。參照圖10,它顯示了遙測維護電路組件的框圖,該組件總的用標號10表示。遙測維護電路組件10安裝在諸如美國專利第4,658,096號和第4,737,975號所公開的蜂窩或蜂窩式適配器系統(tǒng)內(nèi),并被設計成能根據(jù)按鈕的啟動或根據(jù)每隔約12小時的自動檢測而從電話用戶的設備開始執(zhí)行上述圖1A至圖9中流程圖詳細說明的自動檢測。自檢測的最終結(jié)果通過安裝在蜂窩或蜂窩式適配器右側(cè)壁面上的橙黃色發(fā)光器(LED)提供給用戶。遙測維護電路組件10能將檢測的結(jié)果報告給遠距離服務中心。這種報告是通過自動呼叫預定的服務中心號碼而實現(xiàn)的。這一功能要求服務中心配備有進行通信所需的硬件和軟件并能判讀接收到的報告。本發(fā)明的自診斷檢測能檢驗蜂窩或蜂窩式適配器,包括其組件如接口卡的基本電路、無線電臺設備與接口間的數(shù)據(jù)電纜、傳輸線、天線、蜂窩或蜂窩式無線電收發(fā)機、計費電路以及電源等的正確操作。遙測維護電路被配置成能夠呼叫分配給正在進行檢測的適配器收發(fā)機的相同號碼。對自診斷電路編程以便將忙音和占線信號作為表示可以進行通話且傳輸電路正在正確運轉(zhuǎn)的信號而加以檢測。遙測維護電路組件10設計成能在蜂窩或蜂窩式適配器裝置中使用,以便在無需使技術(shù)人員到安裝有設備的現(xiàn)場的情況下檢驗適配器裝置是否在正確地運轉(zhuǎn)。所說的蜂窩或蜂窩式接口板能直接地提供遙測維護電路組件10。高級的遙測維護電路不是自激電路(autonomousCircuit)。其操作取決于從蜂窩或蜂窩式接口板內(nèi)的審查程序(auditor)中所接收的控制信號。審查程序?qū)z測的結(jié)果與系統(tǒng)運行程序的參數(shù)作比較。遙測維護電路組件10的自診斷電路進行下列檢測應答錯〔錯誤號〕,用兩種可替代的方法來進行上述檢測;振鈴電壓,自診斷電路進行一次呼叫并檢測接口插板所產(chǎn)生的振鈴電壓的出現(xiàn);呼叫應答,驗證一旦進行了應答就使振鈴停止;撥號音,驗證撥號音的出現(xiàn);MFTO操作,確保接口插板能適當?shù)貦z測收到的MFTO(多頻率聲音檢測器)單音;無線電收發(fā)機檢測;接收電路檢測;傳輸電路檢測;計費電路檢測,驗證以12KHz產(chǎn)生的脈沖的頻率特征;收發(fā)機電源;電源系統(tǒng)的性能。在對圖1A至圖9的說明中已詳細敘述了這些檢測活動。遙測維護電路組件10可通過一具有20個位置的插接式連接器而與通常的蜂窩或蜂窩式接口插板相連。通過一安裝在適配器箱右側(cè)的手動開關(guān)可以啟動檢測例程。當發(fā)現(xiàn)電話操作不正常時,例如拿起聽筒時聽不到撥號音,用戶可轉(zhuǎn)向適配器箱并按下被適當標識的檢測鈕。遙測維護電路組件10會斷開用戶電話與蜂窩或蜂窩式接口插板的聯(lián)系并進行一系列如前所述的自診斷檢測。還對遙測維護電路組件10進行編程以便從接通蜂窩或蜂窩式接口插板開始每隔約12小時就自動地啟動檢測例程。在自動啟動檢測時,并不產(chǎn)生檢測呼出的程序。通過進一步的研制開發(fā),可從遙控中心激活自診斷檢測的啟動功能。遙測維護功能可對接口插板的正在運行的軟件進行調(diào)整并可對遙測維護中心的硬件和軟件進行輔助開發(fā)。啟動自檢測例程時,橙黃色發(fā)光指示器(LED)會閃亮以告知用戶正在進行檢測。維護電路每完成一種檢測,指示器的閃亮就暫停約一秒鐘。全部的檢測約持續(xù)40秒鐘。結(jié)束檢測時,發(fā)光指示器保持發(fā)光以表示檢測成功。在這種情況下,存在的問題可能涉及到線路或者是與蜂窩或蜂窩式接口插板相連的電話設備。只要發(fā)光指示器連續(xù)地發(fā)光,則蜂窩或蜂窩式接口插板就會返回至正常的操作狀態(tài)。當通過檢測而發(fā)現(xiàn)蜂窩或蜂窩式接口插板有故障時,發(fā)光指示器會長時間地熄火。這告知用戶蜂窩或蜂窩式適配器內(nèi)存在問題。一旦檢測例程結(jié)束,蜂窩或蜂窩式接口插板就會在與所檢測到的故障無關(guān)的情況下返回至正常操作狀態(tài)。盡管檢測到的故障會引起限制,但用戶仍可以繼續(xù)使用適配器。蜂窩或蜂窩式接口插板的電路中使用了四個發(fā)光指示器(LED)以便標識檢測到的故障。這種方法對能接近適配器箱內(nèi)部以確認可能的故障特性的維修技術(shù)人員來說是有幫助的?!伴_”、“關(guān)”LED的組合可以表示檢測中所檢測到的主要故障。一旦檢測結(jié)束,這種組合將保持發(fā)光60秒。以下給出了用蜂窩或蜂窩式接口插板的LED所表示的可能的故障代碼表。在完成了自檢測時,如果已檢測到了故障,則對遙測維護中心發(fā)起呼叫。一旦建立起了聯(lián)系,就報告所檢測到的故障。這種遙測功能將為每一個裝置都建立一個數(shù)據(jù)庫。如果是通過按鈕而人工啟動檢測,則不管是否檢測到了故障,所完成的檢測的全部結(jié)果均會報告給遙測維護中心。以下是LED組所顯示的代碼表錯誤類型LED5LED4LED3LED2無故障關(guān)關(guān)關(guān)關(guān)循環(huán)錯關(guān)關(guān)關(guān)開循環(huán)錯關(guān)關(guān)開關(guān)撥號音關(guān)關(guān)開開MFTD檢測器關(guān)開關(guān)關(guān)振鈴檢測器關(guān)開開開呼叫應答關(guān)開開關(guān)收發(fā)機饋送關(guān)開開開發(fā)送器(呼叫)開關(guān)關(guān)開聽筒(占用)開關(guān)關(guān)關(guān)以12KHz的單音檢測開關(guān)開開來自電源的饋送開關(guān)開關(guān)“NOSERVICE”開開開開傳輸電路開開開關(guān)不確定開開關(guān)開不確定開開關(guān)關(guān)自檢測的順序如下。遙測維護電路所進行的第一項工作是斷開用戶的設備。然后模擬“應答用戶的電話”的狀態(tài)。在這種狀態(tài)下,可以檢查對循環(huán)閉合的正確檢測,從而產(chǎn)生撥號音。然后,在最小的頻率和強度范圍內(nèi)確認正確地產(chǎn)生了撥號音。再次,開始對MFTD的復合頻率音檢測器進行檢測。這包括遙測維護電路組件的自診斷插卡產(chǎn)生完全連續(xù)的16種MFTD單音、將該單音發(fā)送給蜂窩或蜂窩式適配器的通常的蜂窩或蜂窩式接口插板并且確認已正確地檢測到了這些聲音。隨后,進行檢測以確認振鈴發(fā)生器正在正確地起作用。產(chǎn)生振鈴電流以便在預定的最小范圍確認其頻率和強度。然后。再次模擬應答電話或呼叫應答的狀態(tài)以便檢查振鈴電路的功能(振鈴電路在應答電話之前應是停用的)。就蜂窩或蜂窩式適配器付費電話而言,隨后的檢測將檢查計費電路的容量以在最小的頻率和強度范圍按12KHz產(chǎn)生脈沖。遙測維護電路組件10內(nèi)的精密脈沖檢測器以周知的方式檢測計費插卡所產(chǎn)生的上述脈沖。對不帶有計費組件的蜂窩或蜂窩式適配器系統(tǒng)來說,用分離的跨接線形成蜂窩或蜂窩式接口插板的連接器J1.3。而跨接線則安裝在帶有計費組件的裝置內(nèi)。以后的檢測是驗證蜂窩或蜂窩式收發(fā)機的功能。首先,檢驗對收發(fā)機的供電情況。這項檢測是通過檢查來自收發(fā)機的數(shù)據(jù)連接器的+12VDC(+12V直流電壓)而進行的。第二,檢驗收發(fā)機以使得它處于能進行蜂窩或蜂窩式接入服務的狀態(tài)。這種狀態(tài)是由不存在“NOSERVICE”信號來表示的?!癗OSERVICE”信號的出現(xiàn)被認為是一種故障。這種情況可能是由覆蓋故障引起的,而不僅僅是蜂窩或蜂窩式收發(fā)機的故障。然后,通過蜂窩或蜂窩式網(wǎng)絡呼叫用戶所擁有的號碼。由于收發(fā)機正在呼叫自身,所以,按這樣的方式檢查收發(fā)機的功能,即在從系統(tǒng)中接收到忙音信號的情況下對收發(fā)機進行檢測。在發(fā)現(xiàn)網(wǎng)絡被占用的情況下,就將“PATHENGAGED”狀態(tài)報告給收發(fā)機。然后,收發(fā)機產(chǎn)生一占線(忙)音。正常的收發(fā)機功能將這種聲音看做與忙音信號相同。只有在用按鈕啟動前述例程時才進行上述檢測。在自動啟動前述過程的組件中不進行上述檢測。還檢查系統(tǒng)電源的電壓。如果電壓小于13.5VDC,則會檢測到該電源中的故障。在圖10中,主遙測維護組件10與標準的蜂窩或蜂窩式適配器或接口插板14相連。該遙測維護組件內(nèi)有多個用于進行上述自我診斷檢測的獨立電路。這些電路是忙音信號檢測器16,此檢測器在對適當?shù)亟邮盏暮艚羞M行檢測時使用,而所說的呼叫則是由遙測維護組件在參照圖7A所述的回叫自檢測期間進行;12,000次循環(huán)檢測器電路18,此電路用于計費檢測,它檢驗以12KHz所產(chǎn)生的脈沖的頻率特征;MFTD發(fā)生器電路20,此電路產(chǎn)生由蜂窩或蜂窩式接口插卡所轉(zhuǎn)換的DTMF信號,如以上參照圖4所述;振鈴信號檢測器電路22,此電路用于在振鈴檢測和振鈴應答例程中檢測由蜂窩或蜂窩式適配器接口插板所產(chǎn)生的振鈴信號,如以上參照圖5A至圖6所述;撥號者檢測器電路24,此電路檢測由蜂窩或蜂窩式適配器接口板14所適當產(chǎn)生的撥號音,如以上參照圖3所示;電壓檢測器電路28,此電路用于檢測收發(fā)機和整個系統(tǒng)的電源;以及遙測維護控制器30,此遙測維護控制器是控制單元并用于呼叫并將自檢測的結(jié)果并報告給中心報告臺。圖11至圖14顯示了上述每個電路的實際結(jié)構(gòu),以下對每個電路的結(jié)構(gòu)予以詳細說明。參照圖11至圖14,它們顯示了用于在整個自檢測過程中進行上述模擬檢測的硬件電路。參照圖11,它顯示了遙測維護電路組件10的互連電路。圖11中標號為“A”的部分顯示了遙測維護電路與通常的蜂窩或蜂窩式適配器接口插板的塞尖及塞環(huán)(TIP及RING)線相連接的位置。標號為“繼電器1”(“RELY1”)的繼電器用于在維護操作檢測時斷開用戶電話與蜂窩或蜂窩式接口的聯(lián)系。相反,遙測維護電路也可在該繼電器處連接于塞尖和塞環(huán)以便進行所說的檢測。當把“ENABLE_TEST”信號置為HI時,晶體管Q3被迫進入飽和狀態(tài)并激勵繼電器1,從而將維護電路連接于塞尖和塞環(huán)。圖11中標號為“B”的部分顯示了用戶電話的掛機連接器,在該部分中,用戶電話可以按兩種可能的方式掛接于接口插板。J1是通常RJ11電話插座P1的雙端頭式連接器。圖11中標號為“C”的部分是音頻接口電路,此電路用作塞尖和塞環(huán)線與音頻之間的接口。T1是電話匹配用變壓器。其功能是在接收和傳輸音頻信號時保持電話的相類似的交流與直流電流特征。齊納二級管D1和D2用于在電壓高于±4.5V時截除任何的信號。還包括有一光隔離器(opto-isolator)SSR1,此器件連同晶體管Q4提供了用于閉合塞尖和塞環(huán)電路的機制。在把“Conn_Loop”信號置為HI時,晶體管Q4被迫進入飽和狀態(tài),然后啟動SSR1從而閉合上述電路并且掛機。圖11中標號為“D”的部分是振鈴檢測電路,該電路包括兩個主要的部分振鈴檢測器集成電路U2,以及帶有光隔離器的U9,所說的光隔離器提供適當?shù)腃MOS信號電平輸出。當塞尖和塞環(huán)線上出現(xiàn)振鈴電壓時,U2的接頭4與接頭7之間會產(chǎn)生用作輸出信號的電流。光隔離器U9對上述電流進行變換,然后將一個有效的LOW信號提供給I/O。圖11中標號為“E”的部分顯示了環(huán)路電流檢測器,該檢測器包括一用于所檢測到的環(huán)路電流的光隔離器。當檢測被起動(在A部分中“Enable_Test”信號為HI)并且正在進行摘機(在C部分中“Conn_Loop”信號為HI)時,塞尖和塞環(huán)線成為閉合電路以便提供摘機電流。U17將摘機電流轉(zhuǎn)換成提供給I/O的有效的Low信號。圖11中標號為“F”的部分是輸入-輸出音頻電路,該電路包括U1的1/4以及一個運算放大器集成電路。上述電路的主要功能是隔離并預先放大呼入的音頻信號。這一電路的輸出稱為“音頻-入”(“Audio-In”)。而且,在這一部分中將本發(fā)明的遙測維護電路所產(chǎn)生的DTMF輸出送至塞尖和塞環(huán)線。DTMF信號被標記為“單音-出”(“Tone-Out”)。參照圖12,標號為“G”的部分是DTMF音發(fā)生器,它包括一個DTMF音發(fā)生器U4以及用作輸出放大器的U1的1/4。為了能產(chǎn)生DTMF單音,首先將一個四位的代碼提供給U4中標號為“DTMF0-OUT”、“DTMF1-OUT”、“DTMF2-OUT”和“DTMF4-OUT”的輸入接頭。其次,在保持上述四位代碼的同時將標號為“DTMF-OUT”的啟動信號從Low電平轉(zhuǎn)換為HI電平,從而能產(chǎn)生DTMF單音。在按U∶C而放大了音頻之后,將音頻在“單音-出”(“TONE-OUT”)處輸出。為了使DTMF單音停止,使“DTMF-OUT”信號返回至低電平即可。圖12中標號為“H”的部分是輸入/輸出端口,即標號為U8的I/O端口集成電路。蜂窩或蜂窩式接口插板的微控制器使用這一集成電路去讀取輸入的數(shù)據(jù)并控制遙測維護組件的所有輸出。端口A和C均為輸入口,而端口B則為輸出口。轉(zhuǎn)接器J4是一個選擇器,它用于按可選擇的12或24小時來進行的自動定期檢測。J5用于使對“自動應答”的呼叫啟動。圖12中標號為“I.1”和“I.2”的部分是電源、數(shù)據(jù)以及控制連接器并且包括一個2×10的凸頭連接器,該連接器用于導電以及向I/O端口發(fā)送或接收數(shù)據(jù)。上述部分還包括一個接頭連接器,它用于顯示檢測狀態(tài)的外部LED;以及一個外部按鈕,用此按鈕可手工地啟動所說的檢測。圖12中標號為“J”的部分是穩(wěn)壓器,并且?guī)в幸?V的固定正壓穩(wěn)壓器,該穩(wěn)壓器向前述數(shù)字電路提供所需的電壓。遙測維護組件10包括六個單個的單音檢測器,它們用于檢測正在接收的ROH音、撥號音、忙音及占線音的音頻路徑、頻率和定時韻調(diào)(timingcadence)。每個單音檢測器均包括一運算放大器以及一單個的單音檢測器集成電路。運算放大器的輸入端與“音頻-入”線相連。位于接頭5與6之間的晶體管以及接頭6與地線之間的電容可調(diào)節(jié)檢測頻率。當一個真實的單音與由RC所規(guī)定的單音相匹配時,就使得單音檢測器的輸出接頭從HI轉(zhuǎn)換成Low。圖12中標號為“k”的部分顯示了撥號音檢測器電路。當在U3的輸入端出現(xiàn)真實的撥號音時,“撥號-檢測”(“DIAL-DETECT”)線變?yōu)長ow。圖12中標號為“L”的部分顯示了忙音檢測器電路。當在U6的輸入端出現(xiàn)真實的忙音時,“BUSY-DETECT”線變?yōu)長ow。圖13中標號為“M”的部分顯示了一個400Hz單音檢測電路。當在U14的輸入端出現(xiàn)真實的400Hz的單音時,“400-DETECT”線變?yōu)長ow。圖14中標號為“N”的部分顯示了一個800Hz單音檢測電路。當在U13的輸入端出現(xiàn)真實的800Hz的單音時,“800-檢測”(“800-DETECT”)線變?yōu)長ow。標號為“0”的部分顯示了一個1020Hz聲音檢測器電路。當在U16的輸入端出現(xiàn)真實的1020Hz的單音時,“1020-檢測”(“1020-DETECT”)線變?yōu)長ow。標號為“P”的部分顯示了一個12KHz的單音檢測器電路。當在U12的輸入端出現(xiàn)真實的12KHz的單音時,“12KHz-檢測”(“12Hz-DETECT”)線變?yōu)長ow。圖13中標號為“Q”的部分顯示了一個DTMF單音解碼器,它包括一個DTMF單音檢測器U11以及用作輸入預放大器的U1的1/4。當在輸入接頭(IN-)處出現(xiàn)真實的DTMF單音時,控制線“DTMF-選通”(“DTMF-STROBE”)變?yōu)長ow,同時集成電路進行解碼。在對單音進行解碼之后,將四位代碼輸出給U11中標號為“DTMF0-IN”、“DTMF1-IN”、“DTMF2-IN”以及“DTMF4-IN”的接頭。然后,控制線“DTMF-選通”再次恢復成HI。標號為“R”的部分是一個交流監(jiān)控器,它帶有一個4.5V的欠壓檢測器U10。電阻R17和R33構(gòu)成了一分壓器,此分壓器可使U10感知13V以下的電壓而不是4.5V的電壓。該電路在這樣的前提下進行工作當電壓來自電源時,在遙測維護電路組件的輸入端存在有14V的電壓。在交流電源出現(xiàn)故障的情況下,該電壓會降至不超過13V的后備電池的電平。所說的電路會檢測到這種電壓降落,并且,U10會使標號“AC-檢測”(“AC-DETECT”)的線路變?yōu)長ow。以下是實現(xiàn)本發(fā)明的源代碼<prelisting-type="program-listing"><![CDATA[SnopinosbdbnogenomonoprepSnolistSinclude(reg252.pdf)Slist;***************************************************************;;MaxjackbyAlexisV.TorresforCodecomRuralComm.Inc.;(C)CopyrightCodecomRuralComm.Inc.1993;Telephone/cellularinterfacc;Mainprogramwiththemaintenanceboard;;11-29-92maint.asm;;************************************************************************;Thesearetheuniversallandlinephonekeycodes.zeroequ0ah;[O]keycodestarequ0bh;[*]keycodepoundequ0ch;[#]keycode;BufferareapointersfortheHSdisplayandtheTRUmessages.dspbuf_startequ80h;Startof16byteLCDdisplaybufferdspbuf_endequ90h;EndofLCDdisplaybuffermsgbuf_startequ90h;StartofTRU(etc)msgbuffermsgbuf_endequ0h;EndofTRUmsgbuffermain_flagequ0b0h;useindirectaddressfortestflag;hook_slic1;dial2;dtmf_3;ring_test4;ans_test5main_flag_errorequ0b1h;hook_slic_error1;hookerror;hook_ring_error2;hookerror;dial_error3;dialtoneerror;dtmf_error4;dtmferror;ring_test_error5;ringerror;ans_test_error6;ringanswererrormainl_flagequ0b2h;ditto;power_radio1;powerradioerror;call_test2;callerror;call_tone3;callaudioerrormainl_flag_errorequ0b3h;ditto;power_radio_error1;spare;call_test_error2;callspareerror;call_tone_error3;callaudiospareerror;inuse4;inuseerror;1000hz5;1000hzerrorerror_codeequ0b4h;finalindicationLEDindication;hook_slic_error1;hook;hook_ring_error2;hook;dial_error3;dial;dtmf_error4;dtmf;ring_test_error5;ring;ans_test_error6;ringanswer;power_radio_error7;radiopower;call_test_error8;call;call_tone_error9;callaudio;inuse10;inuse;1000hz11;1000hzceroequ00hunoequ08hdosequ04htresequ0chcuatroequ02hcincoequ0ahseisequ06hsieteequ0ehochoequ01hnueveequ09hestrellaequ0dhlibraequ03h;*************************************************;;InternalRamvariabledefinitions;;*************************************************;Registersoccupybytes00h-07h(reg.bank0);r0storagepointer(alsoaddresspointerforI/Oexpander);r1pointertostorageofdatafromTRU;r2digitcount;r3delayloopforbustimer;r4delayloopforbustimer;r5usedinrohtonetimer;r6usedinsendtime;r7usedinrohtonetimer;Variablestoragelocationstime_off1data10h;Measuresoff-hooktimetime_off2data11h;Measuresoff-hooktimetime_off3data12h;Measuresoff-hooktimetime_on1data13h;Measureson-hooktimetime_on2data14h;Measureson-hooktimepulse_digitdata15h;Valucofpulsedialeddigitin_use_off_timcrdata16h;Checksfor2secafterinuselamp;goesouttodocpdring_timerdata17h;Timercheckstimebetweenringsbell_timerdata18h;Timergenerates20hzforringerbell_timer2data19h;Timerforringergndstart_timer1data1ah;ReleasesGSlineifnoconnectinlsecgndstart_timer2data1bh;Sameasabove;highpointdata1ch;Storesdphfortonetables;lowpointdata1dh;Storesdplfortonetableshighpointdata35h;Storesdphfortonetableslowpointdata36h;Storesdplfortonetablestest_mindata1eh;freedata1fh;*****************************************************************;;TheRamarea20hthru29hisreservedforusebythemain;modulecitherasdataBYTEsorindividualBITs;;****************************************************************flagsDATA20h;Thisbytecontainsthefollowingflags;asindividuallyaddressablebitsfhookbit00h;Offhookflagsetbycomingoffhook,;clearedwhenprocessedfsendbit01h;Sendflagfflashbit02h;Flashflagfhangbit03h;Hangupflagftimebit04h;40secondtimerflagfdigitbit05h;Flagforpulsediginputfonhookbit06h;Onhookflagset700msec;Afterhup,clearedbycomingoff-hookfdtmfinbit07h;DtmfinputflagindsDATA21h;Indicators-thisbytecontainsthe;followingbitsroambit08h;Roamindicatornoservbit09h;Noserviceindicatorlockbit0ah;Lockindicatorrdisbit0bh;Resetdigitdisplayhornbit0ch;Hornindicatorf_initbit0dh;SetbyTRUonly!(1=initsdone)f_startbit0eh;1=onhookintsdisabledfor500mstest_enablebit0fh;autotest;afterfirstoffhooktodeglitchthe;contactbouncesindascDATA22b;Indicators&amp;audioswitchcontrolthis;bytecontainsthefollowingbitsinusebit10h;Inuseindicatorap1bit11h;Audiopathap2bit12h;Audiopathtest_endbit13h;not_errorbit14h;noerrorflagforselftestreturn_ringbit15herror_flagbit16h;selftesterrorring_secondbit17hio_statusDATA23h;Bits18h-1fhstrobebit1chflags2DATA24h;Bits20h-27hfdig_readybit20h;Digitreadyflagfanswerbit21h;Ringanswerflagfsendtimerbit22h;Flagtosendafter4secondsf_inuseofftimingbit23h;Flagshowstimerisrunningtocheck;2secwithinuselampofffunlocktimerbit24h;Flagtounlockafter4secondsfdtonebit25h;FlagshowsDTisonfdecoder_busybit26h;Flagshowsdtmfdecoderhasnot;clearedyetfbellsoundbit27h;Flagsringerissoundingpx1_tempDATA25h;Input/outputbufferforportpx1-;containsthesebitsmitelq1bit28h;Fromdtmfdecodermitelq2bit29h;Fromdtmfdecodermitelq3bit2ah;Fromdtmfdecodermitelq4bit2bh;Fromdtmfdeeoderpower_holdbit2ch;Maintainpowerafterpowerfailureto;turnoffTRUspare1bit2dh;SpareI/Opinspare2bit2eh;SpareI/Opinno_ringbit2fh;SpareI/Opinpx2_tempDATA26h;I/Obufferforportpx2(30h-37h)loopswitch_bit30h;Lowclosesloopring_bit31h;Lowturnsonringpsmutebit32h;Muterxaudioroh_boostbit33h;Increasegainforrohtonesw_sendtimerbit34h;Jumperingives4secsendoptionsw_dialtonebit35h;Jumperin=diffdialtoneforroa;outmeansmaintenancemodulesw_gndstartbit36h;IN=loopstart,OUT=groundstartsw_databit37h;Jumperinprevents,outallowsdigit;datatoTRUaftersend(toallow;featuresfromcell.switch)lamps_tempDATA27h;Containsthesebits;freebit38h;Notreallylamps--thesestorethe;freebit39h;currentstatusofindicators;freebit3ah;freebit3bhroamlampbit3chnoservlampbit3dhlocklampbit3chinuselampbit3fhflags3DATA28h;Moreflags-thisbytecontainsthe;followingindividuallyaddressable;bitsfrohtimeoutbit40h;Setwhenrohtonehasbeenon1minutefcallbit41h;Setwhencallincoming,clearifnotf_one_secbit42h;Setwhenoffhookforonesecso;changeininuselampwon′tcause;remotehangupifphonetakenoff;hookquicklyafterlocalhanguproh_onbit43h;Turnsrohtoneon&amp;offfspec1bit44h;FlagforspeeialusewithspecificTRU;processedinupdate_displaysevery;71.1ms,callsspec1fspec2bit45h;FlagforspecialusewithspecificTRU;processedinon-oroff-hooktimers;every277.8usec,callsspec2fremote_hupbit46h;Indicatesremotehupfor700msec;delayflocktimerbit47h;Flagtolockafter2seconds;****************************************************************;;ImplementedTRUtasks;;****************************************************************f_cmdsDATA29h;OptionalTRUspecifictasknumbers;TRUtasksareforcallsfromthemainintotheTRUmodule.;Task1;a.)PowerlosscheckforNEC3700(seenae01);b.)SendchangeinhookswitchstatustoOKIandalsosendinitialCLR;fortheMotorola(seeoee02andmae04);c.)CallrdbusroutinetoreadindicatorstatusintheAudiovoxTRUs;(seetae01andtbe01);d.)MonitorforsilentalertmodeinAudiovoxCTX-3100Aandset;silentalertmodeifnecessary(seetbe01);;Task2;a.)DualNAMswitchingforNEC3700(seenae01);;Task3;a.)PowerlosscheckforNEC3700(seenae01);b.)SeadanychangeinhookswitchstatustoOKIandMotorola;(seemae04andoee02);c.)CallrdbusroutinetoreadindicatorstatusintheAudiovox;TRUs(seetae01andtbe01);d.)MonitorforsilentalertmodeinAudiovoxCTX-3100Aandset;silentalertmodeifnecessary(seetbe01);;Task4;a.)CallrdbusroutinetoreadindicatorstatusintheAudiovox;TRUs(seetae01andtbe01);b.)MonitorforsilentalertmodeinAudiovoxCTX-3100Aandset;silentalertmodeifnecessary(seetbe01);****************************************************************;;TheRamarea2Ahthru2dhisreservedforusebytheTRUmodules;eitherasDATAbytesorindividualBITvariables.;;****************************************************************;TRU_bits1data2ah;Bit50hthrough57h;TRU_bits2data2bh;Bit58hthrough5fh;TRU_bits3data2ch;Bit60hthrough67h;TRU_bits4data2dh;Bit68hthrough6fh;;Usedforthemaintanenceboard!checkthetruroutine!io_m_bdata2eh;Bit70hthrough77htd0bit70htd1bit71htd2bit72htd3bit73hdtmf_outbit74henable_testbit75henable_tonebit76henable_tone_inbit77hio_m_cdata2fh;Bit78hthrough7fhext_ledbit78henabble_specialbit79henable_busybit7ahenable_16hbit7bhconn_loopbit7ch;*************************************************************;;Moreinternal(BYTEaddressable)ramvariables;;*************************************************************looptest_timerdata30h;Delayslooptestfor2msafterloopswlooptest_timer2data31h;closestoallowSLICtoresponddisplay_delaydata32h;Delaysdisplayupdatetoevery71.1msdsp_ptrdata33h;HandsetLCDdisplaybufferpointermsg_ptrdata34h;TRUmessagebufferpointer;*****************************************************************;;ThefollowingbytesarereservedfortheTRUmodulesforuse;onlyasDATAbytes(notBITaddressable);;****************************************************************;TRU_byte0data38h;TRU_byte1data39h;TRU_byte2data3ah;TRU_byte3data3bh;TRU_byte4data3ch;TRU_byte5data3dh;TRU_byte6data3eh;TRU_byte7data3fh;Stackoccupiesbytes40h-5fh;**************************************************************;;Digitsdialedarestoredinbytesfrom60hto7fhpermitting;atotalof32,includingtheSNDcodeusedasaterminator.;;**************************************************************prefixdata60h;Onlyor[1]arevalid,elseFFhfirst_digitdata61h;Firstthreelocationsinthedigitsecond_digitdata62h;buffer(emergencynumbers,areacodethird_digitdata63h;startof7digitnumber,etc.);****************************************************************;8051port1&amp;port3bitdefinitions,(commontoallunits);****************************************************************io_selectbitp1.2dt_pwmbitp1.4;Dialtonepwmtwenty_hz_pwmbitp1.5;20hzpwmforringer;power_fail_bitp1.6;Input,0=powersupplyisfailingIc_bitp3.2;Loopcurrentsense,(ExtInt0)ring_ground_bitp3.4;Inputshowsgroundonringlead;strobebitp3.5;InputdigitreadyfromDTMFdecodera0bitp1.6a1bitp3.5;****************************************************************;Powerupentrypoint,andinterruptroutinevectors;****************************************************************org0000h;Resetvectorjmpinitorg0003h;ExtInt0servicevectorjmpoffhook_edge;Offhook,flash,&amp;pulsedialdb0ffh,0ffh,0ffh,0ffh,0ffh;FillforEpromandemulatororg000bh;Timer0(t10)svcvectorjmponhooktimer;Tokeeptrackofhowlongonhookdb0ffh,0ffh,0ffh,0ffh,0ffhorg0013h;ExtInt1servicevectorjmpint1_service;UsuallytoreaddatafromTRUdb0ffh,0ffh,0ffh,0ffh,0ffhorg001bh;Timer1(th0)svcvectorjmpoffhook_timer;Forperiodictimerintsdb0ffh,0ff,0ffh,0ffh,0ffhorg0023h;Serialportsvcvectorjmpser_port_service;UsuallytoreaddatafromTRUdb0ffh,0ffh,0ffh,0ffh,0ffhorg002bh;Timer2/ex12svcvectorjmptimer2_servicedb0ffh,0ffh,0ffh,0ffh,0ffhorg0033h;PCAservicevectorjmppca_service;Forpuisewidthmodulatorsdb′(c)CopyrightCodecom′db′1992.′Sinclude(main.msg)Sinclude(tru.msg)init%set(intmask,0);Normallytwointerruptlevelsunless;intmasksettootherthanzeroin;TRUsection(TAE01_ASMAudiovox)movsp,#3fh;Stackstartsat40hclrrs0;Selectregisterbank0clrrs1;Dittomova,#0;Tofullramwithzeromovr0,#0;Pointtofirstramfill_rammov@r0,a;Onelocationatatimeincr0;Pointtonextlocationcjner0,#0,fill_ram;Fillupendofram(FFh)clrp1.2movr1,#main_flagmov@r1,#0;readsecondflagincr1mov@r1,#0incr1mov@r1,#0incr1mov@r1,#0callreset_iom;resetthemaintanenceboardmovio_m_b,#0;disablemodulecallwrite_io_m_bmovio_m_c,#0;disablemodule  callwrite_io_m_c  callreset_io;reseti/oexpaudedto#13  movp2,#0f8h;Setp2todriveportexpander  movpx1_temp,#11111111b;Initializeincludingpower_holdon  callwrite_px1  movpx2_temp,#11110011b;Initializeloopswopen,notringing  callwrite_px2  callread_px2;Readoptionswitches  novtmod,#00000011b;Timer0istwotimers,andtimer1can ;bebaudrategen  movip,#01001010b;Setintpriorities  movie,#11001011b;EnablePCA,Timer1,Timer0,Ext0 ??;Tmr/Ext2,SerFort,Ext1byTRUinits  setbit0;ExtInt0isedgetrig′d  setbit1;ExtInt1isedgetrig′d  movcmod,#80h;Counteroffduringidle,clock/12movch,#0;Loadhighcounter  movcl,#0;Loadlowcounter  movccap01,#0ffh;Lowbytefortimercomparator  movccap0h,#0;Highbytefortimercomparator  movccapm0,#049h;PCA0softwaretimer  movccapm1,#0;PCA1(DialTone)offfornow  movccapm2,#0;PCA2(20hzpwm)isoffnow  clrtr1;Off-hookinttimernotrunningyet  clrtr0;On-hooktimernotrunning;Initializebytevariables  movtime_on1,#0;Initializeonhookinterrupttimers  movtime_on2,#0  movtime_off1,#0;Initializeoffhookinterrupttimers  movtime_off2,#0  movtime_off3,#0  movflags,#0;Clearalltheflags  movflags2,#0;Clearalltheflags  movflags3,#0;Clearalltheflags  movinds,#0tfh;Initialvals  movindasc,#0ffh;Initialvals  movpulse_digit,#0;0=nopulsedigit(s)availablenow  movf_cmds,#0;0=noTRUtaskcommanded;Initializebitvariables  clrtest_enable  clrtest_end  clrerror_flag  clrreturn_ring  setbfonhook;1=Assumephoneonhookon  powerup  clrf_init;0=TRUinitnotcompletedyet  clrfremote_hup  clrfcall;0=Noincomingcall(ALERT)yet   callclr_dsp;ClearhandsetLCDdisplaybuffer  callclr_msg;ClearTRUmessagesbuffer  callspecific_inits;DoTRUspecificinitializations  movccap41,#Offh;Lowbyteforwatchdogmatchword  movccap4h,#Offh;Highbyteforwatchdogmatchword  movccapm4,#48h;PCA4Enablecomparator&amp;interrupt  orlcmod,#40h;Enablewatchdogtimer  setbcr;StartPCAcounter  setbtr0;Startonhooktimer;Wait2.55secondforTRUtowakeup.Clearthedialeddigitslocation,;thenpointROtodigitsbufferstart(60h),andclearR2(dialeddigits;count).time_wakeup callwatchdog  mova,time_on2;Getelapsedtimecjnea,#2.55,time_wakeup;Waithere2.55secfortruwakeup  movc,sw_gndstart;CheckGS-LSjumper,0=LS1=GS  movloopswitch_,c;Savestartmode  cirno_ring  callwrite_px2  jmpstartSinclude(tru.asm);TRUmodulehere,soINTMASK-canbe;evaluatedatassemblytime;****************************************************************;;Start,andRe-Entrypointfollowinghangup;****************************************************************start  movr0,#60h;Pointtodigitbufferstart  mova,#0ffh;Fillwithnon-digitsclr_digbuf  mov@r0,a;Onelocationatatime  incr0;Pointtonextlocation  cjner0,#80h,clr_digbuf;Through7fh  movr0,#60h;Pointtobufferstart  movr2,#0;Initializedigitcount  setbf_start;1=enablehook_switchdeglitching  clrie0;Clearoffhookintjustincase  setbex0;Enableoffhookintincasedisabled;Endlessloopuntilweeitherdetectanincomingcallorwelift;thehandsettodialout.hookchk  callwatchdog  jbtest_enable,do_teat;ifautotestactivated  movf_cmds,#1;LoadcommandID  calltrucmd;Dotask1forTRU,ifneeded  jbfhook,first1;Brifoffhook  jnbfanswer,hookchk;Backiinoincomingringdetected  jmpring_answer;Answerring,wewentoffhookduring ??;anALERT(incomingcall)state!first1  jmpfirstdotestmovr1,#main_flag_errormov@r1,#0;setthetoneerrorbusyor1000hzmovr1,#main1_flag_errormov@f1,#0;setthetoneerrorbusyor1000hzclrtestendclrerrorr_flagclrerror_flag  movr1,#main_flag  mova,@r1;readfirstflag  anla,#00000001b;checkifhookwasdone  callstarthooktest;hooktesttest_hook  jberror_flag,rou_error  calldial_test;dialtesttest_dial  jberror_flag,rou_error  callstart_dtmf;dtmftesttest_dtmf  jberror_flag,rou_error  callstart_ring_test;ringtesttest_ring  jberror_flag,rou_error  callstart_ring_ans_test;ringanswertesttest_ring_a  jberror_flag,rou_error  callmake_call;calltest  jberror_flag,rou_error  jmpumtil_fin_tim;exitwithouterrorsrou_error  callerror_acc;loaderrorvariable;jmpwait_enduntil_fin_tim  setbtest_end  clrtr0  movtime_on2,#0;Every10msecwhileonhook  movtime_on4,#0;Resetfornext36  movtest_min,#0;10msec×255=2.55sec  setbtr0wait_end  callwatchdog;behereuntil1minexpire  mova,test_min  cjnea,#23,wait_end;255×236=60.18  callfin_self;returntonormal  jmphookchk;returntonormal;************************************************;start_hook_test-starthooktest;************************************************start_hook_test  movr1,#main_flag;readmainflag  mova,@r1  orla,#00000001b  mov@r1,a;settheoff-hookflag  setbenable_test;disconnectthetelephone  clrconn_loop  callwrite_io_m_b;andconnectmodule  callreset_io_m;resetthemaintanenceboard  callwrite_io_m_b  callwrite_io_m_ccirloopswitch_;Othcrsidehasdisconnccted  callwritc_px2tcst_hup  setbfrcmotc_hup  callhup  movlamps_temp,#0  callwrite_io_c;updatetheLEDS  movr6,#10nose  push6  movr6,#0ffh;delaymodule  loop_m  movr7,#0ffh  djnzr7,S  callwatchdog  djnzr6,loop_m  movr6,#0ffh;delaymoduleloop_ma  movr7,#0ffh  djnzr7,S  callwatchdog  djnzr6,loop_ma  movr6,#0ffh;delaymoduleloop_mb  movr7,#0ffh  djnzr7,S  callwatchdog  djnzr6,loop_mb  movr6,#0ffh;delaymoduleloop_mc  movr7,#Offh  djnzr7,S  callwatchdog   djnzr6,loop_mc  pop6  djnzr6,nosetest_hup2  clrfanswer  clrfhook;Cleartheflag  jnbfhook,not_hook_det;nooff-hookdet.ok  ;off-hookdetectederror  jmphook_errornot_hook_det;testoff-hook  setbfonhook  setbconn_loop;presentoffhooktothe  callwrite_io_m_c;interfacemovr6,#0ffh;delayoffhookloop_m_off  movr7,#0ffh  djnzr7,S  callwatchdog  djnzr6,loop_m_off  movr6,#0ffh;delayoffhookloop_m_off2  movr7,#0ffh  djnzr7,S  callwatchdog  djnzr6,loop_m_off2  movr6,#0ffh;delayoffhookloop_m_off3  movr7,#0ffh  djnzr7,S  callwatchdog  djnzr6,loop_m_off3  movr6,#0ffh;delayoffhookloop_m_off4  movr7,#0ffh  djnzr7,S  callwatchdog  djnzr6,loop_m_off4  movr6,#0ffh;delayoffhookloop_m_off5  movr7,#0ffh  djnzr7,S  callwatchdog  djnzr6,loop_m_off5test_fhook  jbfhook,detected_hook;ifhookdetectedok?。籲otoff-hookdeterror  jmphook_errordetected_hook   clrex0;Disableoffhookinttildialtoneto ?。籶reventdialingduetobounce  clrhookswout;Showoff-hooktoTRU  setbhookswout_;Ditto  clrfhook;Cleartheflagdt_delayl  callwatchdog  jnblc,still_off_hook  jmphook_error;failoffhookstill_off_hook  jbf_start,dt_delayl;Willbesetafter500msdeglitching   cirie0;Clearoffhookintflagjustincase  setbex0  setbfdtone;1=theDialToneison  calldtone;EnabletheDialTone  ret;exitfromhooktesthookerror  movr1,#main_flag_error  mov@r1,#1;hookslicerror  setberror_flag  ret;*************************************************;dial_testcheckthedialtone;*************************************************dial_test  movr1,#main_flag;readmainflag  mova,@r1  orla,#00000010b  mov@r1,a;setthedialtoneflag  movr6,#0ffh;delayoffhookdelay_dial  movr7,#0ffh  djnzr7,S  callwatchdog  djnzr6,delay_dial  movr6,#0ffh;delayoffhookdelay_dial2  movr7,#0ffh  djnzr7,S  callwatchdog  djnzr6,detay_diai2  clrtrl;wait711msectodetectdial  movtime_off1,#0  movtime_off2,#0  setbtr1verify_dial  callread_io_m_a;checkdialtone  anla,#00000001b  cjnea,#00000001b,dial_ok;if0dialok  callwatchdog  mova,timeoff2;dialisnotdetected  cjnea,#10,verify_dial;wait711msecsifbusynotdetected ?。籨ialtonefail  movr1,#main_flag_error  mov@r1,#3;dialerror  setberror_flag  retdial_ok;noerror  ret;*************************************************;start_dtmf-startthedtmf;*************************************************start_dtmf  clrfdtone  movccapm1,#0anlio_m_b,#0f0h  orlio_m_b,#cero;send0   callsend_dtmf  calldelay_dtmf  calldisable_dtnf  calldelay_dtmf  callget_testtest_cero  cjnea,#0h,dtmf_error_flag;verify0  anlio_m_b,#0f0h  orlio_m_b,#uno;send1  callsend_dtmf  calldelay_dtmf  calldisable_dtmf  calldelay_dtmf  callget_testtest_1  cjnea,#1h,dtmf_error_flag;verify1  anlio_m_b,#0f0h  orlio_m_b,#dos;send2  callsenddtmf  calldelay_dtmf  calldisable_dtmf  calldelay_dtmf  callget_testtest_2  cjnea,#2h,dtmf_error_flag;verify2  anlio_m_b,#OfOh  orlio_m_b,#tres;send3  callsend_dtmf  calldelay_dtmf  calldisable_dtmf  calldelay_dtmf  callget_testtest_3  cjnea,#3h,dtmf_error_flag;verify3  anlio_m_b,#0f0h  orliom_b,#cuatro;send4  callsend_dtmf  calldelay_dtmf  calldisable_dtmf  calldelay_dtmf  callget_testtest_4  cjnea,#4h,dtmf_error_flag;verify4  jmpgo_to_5dtmf_error_flag  jmperror_dtrnfgo_to_5  anlio_m_b,#OfOh  orlio_m_b,#cinco;send5  callsend_dtmf  calldelay_dtmf  calldisable_dtmf  calldelay_dtmfcallgct_testtest_5  cjnca,#5b,dtmf_error_flag;verify5  anlio_m_b,#0f0h  orlio_m_b,#seis;send6  callsend_dtmf  calldelay_dtmf  calldisable_dtmf  calldelay_dtmf  callget_testtest_6  cjnea,#6h,dtmf_error_flag;verify6  anlio_m_b,#0f0h  orlio_m_b,#siete;send7  callsend_dtmf  calldelay_dtmf  calldisable_dtmf  calldelay_dtmf  callget_testtest_7  cjnea,#7h,dtmf_error_flag;verify7  anlio_m_b,#0f0h  orlio_m_b,#ocho;send8  callsend_dtmf  calldelay_dtmf  calldisable_dtmf  calldelay_dtmf  callget_testtest_8  cjnea,#8h,dtmf_error_flagl;verify8  anlio_m_b,#0f0h  orlio_m_b,#nueve;send9  callsenddtmf  calldelay_dtmf  calldisable_dtmf  calldelay_dtmf  callget_testtest_9  cjnea,#9h,dtmf_error_flagl;verify9  anlio_m_b,#0f0h  oftio_m_b,#05h;senda  callsend_dtmf  calldelay_dtmf  calldisable_dtmf  calldelay_dtmf  callget_testtest_a  cjnea,#Oah,dtmf_error_flagl;receivea  anlio_m_b,#0f0h  orlio_m_b,#Odh;esb  callsend_dtmf  calldelay_dtmf  calldisable_dtmf  calldelay_dtmf  callget_testtest_b  cjnea,#Obh,dtmf_error_flagl  jmpgo_to_cdtmf_error_flagl  jmperror_dtmfgo_to_c  anlio_m_b,#OfOh  orlio_m_b,#O3h;es3  callsend_dtmf  calldelay_dtmf  calldisable_dtmf  calldelay_dtmfcallget_testtest_c  cjnea,#Och,dtmf_error_flag1  anlio_m_b,#0f0h  orlio_m_b,#0bh;esd  callsend_dtmf  calldelay_dtmf  calldisable_dtmf  calldelay_dtmf  callget_testtest_d  cjnea,#0dh,dtmf_error_flagl  anlio_m_b,#0f0h  orlio_m_b,#07h;es7  callsend_dtmf  calldelay_dtmf  calldisable_dtmf  calldelay_dtmf  callget_testtest_e  cjnea,#0eh,dtmf_error_flagl  anlio_m_b,#0f0h  orlio_m_b,#0fh;esf  callsend_dtmf  calldelay_dtmf  calldisable_dtmf  calldelay_dtmf  callget_testtest_f  cjnea,#0fh,dtmf_error_flag1  ret;exitwithouterrorserror_dtmf  movr1,#main_flag_error  mov@r1,#4;dtmferror  setberror_flag  ret;*************************************************;start_ring_test-starttheringtest;*************************************************start_ring_test;inittheringingmovr1,#main_flag;readmainflag  mova,@r1  or1a,#00001000b  mov@r1,a;settheringtestflag  clrring_second  clrconn_loop;presentanonhook  callwrite_io_m_c  setbfremote_hup  callhup  movr6,#6loop_ring_wait  push6  movr6,#0ffh;delaymoduleloop_mbb  movr7,#0fh  djnzr7,S  callwatchdog  djnzr6,loop_mbb  movr6,#0ffh;delaymoduleloop_mcc  movr7,#0ffh  djnzr7,S  callwatchdog  djnzr6,loop_mcc  pop6  djnzr6,loop_ring_wait ??;incomingcall  clrap1;initanincomingcal  jblc_,loop_ring_off  jmpring_flagloop_ring_off;loophereuntilringstartor  clrtr0;2secexpire  movtime_on2,#0  movtime_onl,#0  setbtr0wait_2_sec  callwatchdog  jnbfanswer,not_answer  jmpring_flag;answeroccurrederrornot_answer  callread_io_m_a  anla,#00000100b  cjnea,#00000100b,ring_starts;if0ringstarted  mova,time_on2;checkif2secondexpire  cjnea,#200,wait_2_sec;wait2sectostopthedtmf  jmpring_flag;2secexpire,errorring_starts  movr6,#0ffh;delaymoduleloop_mbbc  movr7,#Offhdjnzr7,S  callwatchdog  djnzr6,loop_mbbc  movr6,#0ffh;delaymoduleloop_mccd  movr7,#0ffh  djnzr7,S  callwatchdog  djnzr6,loop_mccdring_start;checkforring1.3scontinuity  clrtr0  movtime_on2,#0  movtime_on1,#0  setbtr0wait_130msec;checkringduring1.3sec  callwatchdog  jnbfanswer,not_answerl  jmpring_flag;answeroccurederrornot_answer1  callread_io_m_atest_130  anla,#00000100b;shouldbelowduring1.3sec  cjnea,#00000100b,ring_expire  jmpring_flag;ringfailwithin1.3secring_expire  mova,time_on2  cjnea,#90,wait_130msec;wait130msecwait_250msec;theringshouldstopafter1.5s  callwatchdog;butwewillwait2.5stocheckif  callread_io_m_a;itstoptest_250  anla,#00000100b;shouldbelowduring2secmore  cjnea,#00000100b,ring_not_expiretest_stop  jmpring_stop_;ringstopbefore2.5sring_not_expire  mova,time_on2;after1.5secitshouldbehigh  cjnea,#250,wait_250msec;wait250msectest_flag  jmpring_flag;ringdidnotstopwithin2.5serrorring_stop_;wait2.55s  clrtr0  movtime_on2,#0  movtime_on1,#0  setbtr0wait_2_seca  callwatchdog  jnbfanswer,not_answer2  jmpring_flag;answeroccurrederrornot_answer2  mova,time_on2cjnea,#255,wait_2_seca;wait2.55stostopthedtmf ??;secondloop  jbring_second,ring_stop1  setbring_second;chcckring2times  jmploop_ring_off;startagainring_flag  setbap1;clearincomingcall  movr1,#main_flag_error  mov@r1,#5;ringerror  setberror_flagring_stop1test_timbre  ret;exitwithouterror;*************************************************;start_ring_ans_test-answerthering;*************************************************start_ring_ans_test ??;inittheringing  movr1,#main_flag;readmainflag  mova,@r1  orla,#00010000b  mov@r1,a;settheringtestflagloop_ring_off2;waithereuntilringstartagain  clrtr0  movtime_on2,#0  movtime_on1,#0  setbtr0wait_2_sec2  callwatchdog  jnbfanswer,not_answera;ifringanswerexit  jmpans_flagnot_answera  callread_io_m_a  anla,#00000100b  cjnea,#00000100b,ring_present;ifceroringpresent  mova,time_on2  cjnea,#200,wait_2_sec2;wait2sectostop  jmpans_flag;2secexpirering_present  setbconn_loop;answerthering  callwrite_io_m_c  movr7,#0ffh;delaytoallowtimetosetfanswerwait_ans  movr6,#0ffh  djnzr6,S  callwatchdog  djnzr7,wait_ans  movr7,#0ffhwait_ansamovr6,#0ffh  djnzr6,s  callwatchdog  djnzr7,wait_ansatest_ans  jbfanswer,ok_ring;ifanswer,ringansok  jmpans_flag;didn′tanswererrorans_flag  movr1,#main_flag_error  mov@r1,#6;ringerror  setberror_flag  setbap1  clrfanswer  retok_ring;exitwithouterrortimbre  clrfanswer  setbap1;clearincomingcall  ret;************************************************;make_call-makeacalltotesttheradio;***************************************make_call  movr1,#main1_flag;readmain1flag  mova,@r1  orla,#00000001b  mov@r1,a;setthecalltestflagtest_mute  jnbpower_,power_is_ok;ifradiooklineshouldbelow(0)  movr1,#main1_flag_error  mov@r1,#1;setthepowerlineerror  setberror_flag  jmppre_onhookpower_is_ok  mova,#func;functiontoreadthephonenumber  callwrbus  mova,#7  callwrbus  callclr_dsp  mova,#star  callwrbus  movr7,#0ffh;delaytoallowtimetosendnumberwait_min;tointerface  movr6,#0ffh  djnzr6,S  callwatchdog  djnzr7,wait_min  movr7,#0ffhwait_mina  movr6,#0ffhdjnzr6,S  callwatchdog  djnzr7,wait_mina  mova,#9h  callwrbus  mova,#0ah  callwrbus  ;generateacalltoitsphonenumber  mova,#dspbuf_start;Getcurrentpointer  adda,#3  movr1,a  mova,@r1;Readmsginbuffer  anla,#0fh  callwrbus  incr1  mova,@r1;Readmsginbuffer  anla,#0fh  callwrbus  incr1  mova,@r1;Readmsginbuffer  anla,#0fh  callwrbus  incri  nova,@r1;Readmsginbuffer  anla,#0fh  callwrbus  incr1  mova,@r1;Readmsginbuffer  anla,#0fh  callwrbus  incr1  mova,@r1;Readmsginbuffer  anla,#0fh  callwrbus  incr1  mova,@r1;Readmsginbuffer  anla,#0fh  callwrbus  setbfsend;Setsendflag  mova,#send;makeacall  callwrbus  setbenable_special;enableQ4  callwrite_io_m_ctest_mute1  clrmute;donotmute  callwrite_px2cirtr1;delaytocheckinuse  movtime_off1,#0  movtime_off2,#0  setbtr1delay_call  mova,timeoff2  callwatchdog  cjnea,#80,delay_call;wait1?secondstest_mute2;testbusytone  clrtr1  movtime_off1,#0  movtime_off2,#0  movtime_off3,#0  setbtr1cont_waiting  jnbinuse,still_inuse  movr1,#main1_flag_error  mov@r1,#4;settheinuseerror  jmpcall_error;ifiubedisapearseterrorstill_inuse  callread_io_m_a;checkdialtone   anla,#00000001b   cjnea,#00000001b,busy_ok;if0busyok  callread_io_m_a;checkdialtone  anla,#00001000b  cjnea,#00001000b,t1000hz;if1000khzbusyok  mova,time_off3;busyisnotdetected  callwatchdog  cjnea,#1h,cont_waiting;wait18.2secsifbusynotdetected  movr1,#main1_flag_error  mov@r1,#3;setthetoneerrorbusyor1000hzcall_error  mova,#end1;makeacall  callwrbus  setberror_flag;presentandonhook  jmppre_onhookt1000hz;950hz-1100hztonedetectedbusy_ok;400hz-620hztonedetected  mova,#end1;makeacall  callwrbuspre_onhook  clrconn_loop;presentandon-hook  callwrite_io_m_b;andconnectmodule  callhup  ret ?。?***********************************************;error_acc-settheerrorcode;************************************************error_acc  movr1,#main_flag_error  mova,@r1cjnca,#1,check_hook_ring  movr1,#error_codc;hookslicerror  mov@r1,#1  jmpexit_errorcheck_hook_ring  cjnea,#2,check_dial_flag  movr1,#error_code;hookringerror  mov@r1,#2  jmpexit_errorchcck_dial_flag  cjnea,#3,check_dtmf_flag  movr1,#error_code;dialerror  mov@r1,#3  jmpexit_errorcheck_dtmf_flag  cjnea,#4,check_ring_flag  movr1,#error_code;dtmferror  mov@r1,#4  jmpexit_errorcheck_ring_flag  cjnea,#5,check_ring_ans_fiag  movr1,#error_code;ringdetectionerror  mov@r1,#5  jmpexit_errorcheck_ring_ans_flag  cjnea,#6,check_power_flag  movr1,#error_code;ringanswererror  mov@r1,#6  jmpexit_errorcheck_power_flag;checkcallsflag  movr1,#main1_flag_error  mova,@r1  cjnea,#1,check_call_test  movr1,#error_code;powerradioerror  mov@r1,#7  jmpexit_errorcheck_call_test  cjnea,#2,check_busy_test  movr1,#error_code;xxxerror  mov@r1,#8  jmpexit_errorcheck_busy_test  cjnea,#3,check_inuse_test  movr1,#error_code;busytoneerror  mov@r1,#9  jmpexit_errorcheck_inuse_test  cjnea,#4,check_1000_test  movr1,#error_code;inuseerror  mov@r1,#10  jmpexit_errorcheck_1000_test  cjnea,#5,exit_error  movr1,#error_codc;1000hztoneerror  mov@f1,#11jmpexit_errorexit_error  ret;************************************************;fin_self-returntonormal;************************************************fin_sell  clrconn_loop;presentonhooktothe  callwrite_iom_c;interface  callhup  clrenable_test;connectthethetelephone  callwrite_io_m_b;anddisconnectmodule  ctrtest_enable;initmainttest  ctrtest_end;finishtest  ctrerror_flag;errorflag  jnberror_flag,turn_on_led  clrext_led;turnoffexternalledwhiletesting  callwrite_io_m_c;turnon/offtheexternalled  callloop_badturn_on_led  setbext_led;turnoffexternalledwhiletesting  callwrite_io_m_c;turnon/offtheexternalled  callloop_bad  clrext_led;turnoffexternalledwhiletesting  callwrite_io_m_c;turnon/offtheexternalled  callloop_bad  setbext_led;turnoffexternalledwhiletesting  callwrite_io_m_c;turnon/offtheexternalled  callloop_bad  clrext_led;turnoffexternalledwhiletesting  callwrite_io_m_c;turnon/offtheexternalled  callloop_bad  setbext_led;turnoffexternalledwhiletesting  callwrite_io_m_c;turnon/offtheexternalled  callloop_badtest_4on  clrext_led;turnoffexternalledwhiletesting  callwrite_io_m_c;turnon/offtheexternalled  callloop_bad  retloop_bad  movr7,#0ffh;delaytoallowtimetosetfanswerwait_emb  movr6,#0ffh  djnzr6,S  callwatchdogdjnzr7,wait_emb  movr7,#0ffhwait_emba  movr6,#0ffh  djnzr6,S  callwatchdog  djnzr7,wait_embs  ret;Getherewhenweliftedthehandsettodial.first  callctr_msg;ClearpreviousTRUmessages  ctrex0;Disableoffhookinttildialtoneto  ;preventdialingduetobounce  clrhookswout;Showoff-hooktoTRU  setbhookswout;Ditto  clrfhook;Cleartheflagdt_delay  callwatchdog  movf_cmds,#4;NOTEINT0&amp;TIMER0havebeensuspended ?。籥tthispoint-donotuseanytru ??;specificfunctionwhichrelieson  ;theseinterrupts.  calltrucmd;PerformanyTRUspecificcommands   jbf_start,dt_delay;Willbesetafter500msdeglitcting  clrie0;Clearoffhookihtflagjustincasetest_lc  jnblc_,alert_check;Brifstilloffhookafter500mstest_Ic1  callhup;Phoneputbackonhook=500msec  jmpstartalert_check  setbex0;Reenableoffhookint(DTisonnow)  jbinuse,make_dt;BrffnotINUSE,wearereadytodial  jmpwait;IfalreadyINUSEprobablyanswered ??;anincomingcallbycomingoffhook;Weareoffhookfor500msletsgenerateadialtone.makedt  setbfdtone;1=theDialToneison  calldtone;EnabletheDialTone  callget;Getacharacterorexitifhangup  jbinuse,check_prefix  clrfdtone  movccapm1,#0  jmpwaitcheck_prefix  jblock,prefix_0;BrifTRUisn′tlocked  cjnea,#pound,nosend;Briflocked,only#(unlock)isvalidprefix_0  cjnea,#zero,prefix_1;Brifnota  jmpstore_it;Gotostoreasprefixprefix_1  cjnea,#1,no_prefix;Brifnota[1]either  jmpstore_it;Gotostore[1]asprefixno_prefix  incr0;Leaveprefixslotunchanged(FFh)  incr2;Butupthedigitcount;Storecurrentdigitandgetanotheroneuntiltimetosendthemout.storeit  cjner0,#7fh,do_store_it;Brifdigitbufferisnotfullyet  jmpcheck_number_;Brifbufferisfull,w/ostoringdo_store_it  mov@r0,a;Storethedigit  incr0;Advancedigitbufferpointer;Checktheentereddigitsandanalyzethemforvalidsequences.check_number  clrfsendtimer;Assureitisoff  mova,first_digit;Pointto1stdigitslot  cjnea,#0ffh,check_one;Briffirstdigitentered  jmpcheck_send;Elsecheckiftimetosendcheck_one  cjnea,#pound,check_send;Brifnot[#](lock,unlock,etc.)  mova,second_digit;Pointto2nddigititfirstis[#]  cjnea,#0ffh,check_two;Brifseconddigitentered  jmpcheck_send;Elsecheckiftimetosendcheck_two  cjnea,#pound,check_nam;Brifnot[#][#](lockorunlock)  mova,third_digit;Two#′smightbelockorunlock  cjnea,#pound,check_unlock;Three#′smeanlocking  jnblock,nosend;Donotlockifalreadylocked  jmplock_it;[#][#][#]meanslockingcheck_nam  cjnea,#star,check_send;Abortifnot[#][*]sequence  mova,third_digit;Elsegetthethirddigitalso  cjnea,#0ffh,check_naml;Brifthirddigitentered  jmpcheck_send;Elsecheckiftimetosendcheck_nam1  movf_cmds,#2;Loadfunctionnumber,thengoto  calltrucmd;SwitchtoalternateNAM,Abortoninvalidnumber(dial)sequences.nosend  cirfunlocktimer;Turnoffunlocktimer#signsetitsctbfonhook;Asifonhook  sctbic0;GotoExtlnt0service  jmpstart;justlikeoffhookagaincheck_unlock  cjnea,#0ffh,unlocking_it;Brifanydigitwasdialedafter##  jmpcheck_send;Elsegotocheckiftimetosendunlocking_it  setbfunlocktimer;Willsendafter2secw/oSNDcode  jmpget_nex1;toavoidunlockcodebeingsentfikc ?。籥validnumber;Gethereifthedigitsequenceentereddidnotqualifyasany;ofthespecialfunction(lock,unlock,dualNAM,etc)options.checksend  jbsw_sendtimer,chcck_intl;Brifsw7=1,interntnlcallsenabled  setbfsendtimer;Enablesendingafter4secffsw7=0  jmpget_next;Andbackfornextdigitcheck_intl  mova,preftx;Testforprefixinacc  cjnea,#zero,check_op;Brffnot  mova,first_digit;Elsegetthefirstrealdigit  cjnea,#1,check_op;Brifnot[1],maybeoperatorcall  setbfsendtimer;Internationalcall!Startswith01-  jmpget_next;Backformore,onlytimersendsnow!check_op  mova,prefix;Getprefixdigitagain  cjnea,#10,check_service;Brifprefixisnot0  cjner2,#0,check_service;Brffdigit(s)alsoweredialed  setbfsendtimer;Elseitmaybeacalltooperatorcheck_service  cjner2,#3,checkdistance;Brifnot3digits  mova,second_digit;Elseifemergency,inform.etc.  cjnea,#1,checkdistance;Brifseconddigitis1  mova,third_digit;Getthirddigit  cjnea,#1,check_distance;Brffthirddigitisnot1  jmpsend_it;Itmustbeanemerg.,senditcheck_distance  cjner2,#10,check_local;Tendigitwasdialed?  jmpsend_it;Sendon10thunlessinternationalcheck_local  cjner2,#7,get_next;Brfflessthensevendigitwasdialed  setbfsendtimer;Preparetosendin4sec  mova,second_digit;Get2nddigit  subba,#1;Isita#1?  jzget_next;Brffso,couldbeareacode,orlocal  mova,second_digit;Get2nddigitagainsubba,#10;Isita0?  jzget_next;Brifso,maybeareacode,maybelocal  ctrfsendtimcr;Don′twantanother,send5seclater  jmpsend_itget_next  incr2  callget;Getanewdigit  jmpstore_it;Doallthecheckswiththenewdigit;*************************************************;;Dialingdone,sendthenumberout;;************************************************;CheckiftheTRUislocked,andabortifnounlockcodewasentered.sendit  jblock,send1;BrifTRUisnotlockedlocked  mova,third_digit;Getthirddigit  cjnea,#0ffh,send1;Brifanydigitentered  jmpnosend;Don′tsendifnounlockcodeentered;Senddialeddigit.send1  setbmute;Muterxaudio  callwrite_px2  mov@r0,#send;Putsendatendofdigits  mova,#clear;Clearcode  callwrbus;Putclearcodefirsttoclearany ?。籨igitsfromTRUmemoryincase ??;handsethasenteredsomefirst  movr0,#60h;Resetpointertoshowstorage mova,@r0;Putpreftxinacc cjnea,#0ffh,out incr0;Skipprefixifitisffoutmova,@r0 callwrbus;Writetothebus jnbfhang,send_oktest_lc2 callhup;Abortdumpifhangup jmpstartsend_ok incr0 cjnea,#send,out;KeepontilSNDcode setbfsend;Setsendflag clrmute;Unmuterxaudio  callwrite_px2;Dialingdone,conditionallyechodigittoTRU,thenwaitfor;furtherpossibledigits(extension,ctc.),orlettheinterrupts;takeovertheshow.waitcallget;CheckforanydigitsfromMJphone  jnbsw_data,wait;Discardifdataaftersndisdisabled  callwrbus;ElsesenddatatoTRU  jmpwait;Looptilweorotherpartyhangsup;*************************************************;;DialToneGenerator;;*************************************************;Thisroutineselectsandgeneratestheproperdialtone,;correspondingtoourcurrent(roam,holler,etc)status.dtonepushpsw  jblock,serv_check  movdptr,#table_350;350hzforlock  jmptone_outserv_check  jbnoserv,roam_check  movdptr,#table_620;620hztoneforno-serv  jmptone_outroam_check  jbsw_dialtone,normal;Ifoptionswisclosed(=0)makea ?。籨iffdialtoneforroam  jbroam,normal  movdptr,#table_roam;440-620hzforroam  jmptone_outnormalmovdptr,#table_dt;350-440hz(normalDT)tone_out  movlowpoint,dpl;Rememberwherethetablestarts  movhighpoint,dph  movccapm1,#01000010b;Enablethetone  poppsw  ret;*************************************************;;Getadigitfromthehandsetkeypad;;*************************************************;;Thisroutineprocessesthedigitinputand/orprocessflags.;Onreturn-returnsdatainaccget  pushpswget1  movf_cmds,#3;Flagindicateswhichfunctionsapply  calltrucmd;PerformanyTRUspecificcommands  callwatchdog;Waitforapulse.Ifthepulsewasnotflaggedasapulscdialinput  ;byFXTINTO(Off_Hook_Service),wecheckforaDTMFdigitinput.Ifit ??;wasapulsedialinputthenwecontinuecountingpulses,until250ms  ;haspassedafterreceivingthelastpulse.Atthatpointweconsider ?。籥ssemblingthepulsedialdigitcompleted,sowecopyitintotheacc, ??;andsetthefdig_readyflag.  get_pulse  jnbfdigit,get_dtmf  clrfdtone;Cleardialtoneflag  movccapm1,#0;Turnoffdialtone  mova,#2;Iftherewasaninput  ctrc;Clearcarryforsubtraction  subba,timeoff2;Seeif213.3msec(3×71.1ms)passed  jncget_dtmf;Ifnotyet,thendigitnotcomplete  mova,#1B1  clfc;Clearcarryforsubtraction  subba,time_off1;Seeifadditional36.7msec ??;(132×277.8usec)haspassed(total ?。籺imeof250msec)  jncget_dtmf;Ifnotyet,thendigitnotcomplete  mova,pulse_digit;Putdigitina  movpulse_digit,#0;Clearfornextdig  setbfdig_ready;Toshowadigitready  clrfdigit;Cleartheflag;IfaDTMFdialdigitisready,copyitintotheacc.Checkforspecial;conditions,flash,hangupetc.Branchonspecialconditions,orcontinue;checkingformorepulse(s),and/orcompleteddigits.get_dtmf  jnbfdtmfin,hang  clrfdtone;Cleardialtoneflag  movccapm1,#0;Turnoffdialtone  cirfdtmfin;Cleardtmfinputflag  mova,px1_temp;Putdigitinacc  anla,#0fh;Keeponlylow4bits  setbfdig_ready;Toshowadigitready;Checkforhangup(pulseφ700ms).hangjnbfhang,gflash;Ifnohanguppoppswtest_lc3  callhup  decsp;Correctstackpointer  decsp;Leavingsubroutwithoutret  jnbfremote_hup,no_remote;Brifnoremotehupoccured  clrfremote_hupno_remote  jmp.start;Exit,somebodyhungup;Checkforflash(230=pulse=700ms).gflashjnbfflash,time;Ifnoflash   clrfflash;Clearflashflag  movccapm1,#0;Turnoffdialtone  jbfdtone,just_flash;Ifdialtoneonjustasendforlast  ;numberredial  jbfsendjust_flash;Ifsendflagissetdon′tputdigits, ?。籮ustasend  clrfdtone;Cleardialtoneflag  poppsw  decsp;Correctstackpointer  decsp;Leavingsubroutwithoutret  jmpsend_it;Outputalldigits+send;TransmitonlyaSENDcode,butnotthedigits,if;eithertheDialToneortheSendflagishigh.just_flash  clrfdtone;Cleardialtoneflag  movf_cmds,#5  calltrucmd  mova,#send;Sendcode  callwrbus  setbfsend;Sendflag  poppsw;Restoreflags  decsp;Correctstackpointer  decsp  jmpwait;Backfordigit(s),hangupetc.;Ifwedidnotdialacompletephonenumberyet,and40secondpassed;sincethelastkeypunch,thenwestarta1minutehollertone.timejnbftime,send_time;Ifnotimeout  poppsw  decsp;Correctthestackpointr  decsp;Leavingsubroutwithoutret  jmprohtone;Thennorohtone;Checkifittimetosend(4secexpiredsincelastkey.)send_time  jnbfsendtimer,unlock_time  movr6,time_off2;71.1mstimerinr6  cjner6,#56,unlock_time;Checkfor4sec(56×71.1ms=3.98sec)  chrfsendtimer  poppsw  decsp;Correctstackpointer  decsp;Leavingsubroutwithoutret  jmpsend_it;Outputdigitsandsend;Checkifunlockwasrequested.unlock_time  jnbfunlocktimer,lock_time  movr6,time_off2;71.4mstimerinr6cjner6,#28,1ook;Checkfor(28×71.4ms=)2sec  clrfunlocktimer  poppsw  decsp;Correctstackpointer  decsp;Leavingsubroutwithoutret  jblock,no_unlock;Donotunlock,ifalreadyunlocked  jmpunlock_itno_unlock  setbfonhook;Asifonhook  setbie0;GotoExtInt0service  jmpstart;Justlikeoffhookagain;Flocktimeraddedtoallowlocktotimeoutonlessthan4digits.Go_lock;labelmustbeaddedtoTRUandalsosettingofflocktimer(ifnecessary).lock_time  jnbflocktimer,look;Brifnot  movr6,time_off2;71.4mstimerinr6  cjner6,#28,look;Checkfor(28*71.4ms=2sec)  clrflocktimer  poppsw  decsp;CorrectSP  decsp  jmpgo_lock;Checkifwegota(complete)digit.lookjbfdig_ready,got_a_digit  jmpget1;Lookagainifnodigitin;Wegotadigit(pulseorDTMF),returnitintheacc.got_a_digit  clrfdig_ready;Clearthedigitreadyflaggot_inuse  movtime_off1,#0;Restarttimersoneverydigitinput  movtime_off2,#0  movtime_off3,#0  poppsw  ret;*************************************************;;Getadigitfromthehandsetkeypad;;*************************************************;Thisroutineprocessesthedigitinputand/orprocessflags.;Onreturn-returnsdatainaccget_test  pushpsw;IfaDTMFdialdigitisready,copyitintotheacc.Cheekforspecial;conditions,flash,hangupetc.Branchonspecialconditions,orcontinue;checkingformorepulse(s),and/orcomplctcddigits.get_dtmf_teat  jnbfdtmfin,no_dtmf_test  ctrfdtone;Cleardialtoneflag  movccapm1,#0;Turnoffdialtone  clrfdtmfin;Cleardtmfinputflag  mova,px1_temp;Putdigitinacc  anla,#0fh;Keeponlylow4bits  setbfdig_ready;Toshowadigitreadyno_dtmf_test  clrfdig_ready;Clearthedigitreadyflag  movtime_off1,#0;Restarttimersoneverydigitinput  movtime_off2,#0  movtime_off3,#0  poppsw   ret;**********************************************************************;send_dtmf-sendadialtone;**********************************************************************send_dtmf  callwatchdog  clrdtmf_out;enablethedtmftone  callwrite_io_m_b  setbdtmf_out;enablethedtmftone  callwrite_io_m_b  ret;**********************************************************************;clr_dtmf-sendadialtone;**********************************************************************disable_dtmf  clrdtmf_out;enablethedtmftone  callwrite_io_m_b  retdelay_dtmf;delaytheDTMFtone  clrtr1  movtime_off2,#0  movtime_off1,#0  setbtr1wait_until_dtmf  mova,time_off2  callwatchdog  cjnea,#4,wait_until_dtmf;wait40msectostopthedtmf  ret;*************************************************;;ROHtonegenerator;;*************************************************;40sechaspassedafterweliftedthehandsetw/odialinganydigits,;orsincewehavedialedthelastdigit.WeshallgenerateanROHtone;(interruptedat80msecintervals)for1minuteoruntilwehang_up,;whicheverhappensfirst.rohtone  clrftime;Cleartheflag  clrfdtone;Cleardialtoneflagsochangesin ??;indicatorswon′tchangerohtone  movdptr,#table400  movhighpoint,dphh;Remembertablelocation  movlowpoint,dpl  setbroh_boost;Boosttheaudio  callwrite_px2rohtone_on  movccapm1,#01000010b;Turnonthetone;Loopherefor1minute,oruntilhang_up.check_hangup  callwatchdog;Refreshwatchdogwhilewaitinghere  jnbfhang,check_timeout;Brifstilloffhooktest_lc4  callhup;Doorderlyhangupifbackonhook  jmpstart;Brandnewstartcheck_timeout  jbfrohtimeout,roh_timeout;BrifROHtimedout(after1minute)  jbroh_on,rohtone_on  movccapm1,#0;Turnoffthetone  jmpcheck_hangup;Thislooptogglesrohonandoffroh_timeout  movccapm1,#0;Turnoffthetone  clrroh_boost;Unboosttheaudio  setbloopswitch_;Opentheloop  callwrite_px2;Outtotheporttest_le5  callhup;Dohanguproutine  jnbsw_gndstart,looptest;Dolooptestifloopstart  jmplooptest_end;Nolooptestifgroundstart,just ??;leaveloopopentilringground;GethereifweareinLoopstartmode.looptest  movb,#40;Setup2secdelay(40×50ms)loopt1  moa,time_on2;Getcurrentonhooktime  adda,#5;Add50mstopresenttimeIoopt2  callwatchdog;Refreshwatchdog  cjnea,time_on2,loopt2;Minordelayis50msdjnzb,loopt1;Wait2sectotal  clrloopswitch_;Closeloopinevery2sectocheck  callwrite_px2;ifphonewasputbackonhook  movlooptcst_timer2,#215;Load2.22msecdelay(8×277.8usec)loopt3  movlooptest_timer,#0fth;ToallowenoughtimefortheSLIC  djnzlooptest_timer,S;chiptoindicatethehookstatus  callwatchdog;Refreshwatchdog  djnzlooptest_timer2,loopt3  jblc_,looptest_end;Brifnoloopcurrent(backonhook)  setbloopswitch_;Openloopswitchagain  callwrite_px2  jmplooptest;Waithereuntilhunguplooptest_end  clrfrohtimeout;0=hasbeenhungup,orinGSmode  movtime_on1,#0;Resetonhooktimers  movtime_on2,#0  jmpstart;Startnew;*************************************************;;Subroutineforhangup;;*************************************************hup  callwatchdog   clrex0;DisableExtInt0(offhook,LC_)  clrfdigit;Incasehangupwhileptlsedialing  movpulse_digit,#0;Incasehupduringpulsedigitinput  clrfdig_ready;Incasehupduringpulse/dtmfinput  clrfdtmfin;Incasehupduringdtmfdigitinput  clrflocktimer;Incasehupduringlocking  clrfunlocktimer;Incasehupduringunlocking  jnbsw_gndstart,hupl;Brifloopstart  setbloopswitch_;Openloopswfor750msffgroundstart  callwrite_px2;tosimulatehup  mova,time_on2;Incsevery10ms  adda,#75;For750msdelay  pushacc;Storeforlater  jmphp2hup1jbfrohtimeout,hup2  clrloopswitch_;Ifloopstart  callwrite_px2hup2  clrftime;Cleartimerflag  clrfsendtimer;Clearsendtimerflag  movccapm1,#0;Makesuredtoneisoff  clrfdtone;Clearthedialtoneflag  clrroh_boost;Normalaudio  callwrite_px2  jbffemote_hup,no_end_sent;Noendcodeifremotehup,sinceit  ;isn′tneededandclearsthebuffer?。籵ntheMotorolaunnecessarily.mova,#endcall;Putendcode  callwrbus;SendittoTRUfirst,thenresetflagno_end_sent  ctrfsend;incasedigitssentoralertanswered  setbhookswout;ShowonhooktoTRU  clrhookswout_;Ditto  jnbsw_gndstart,hup4;Don′tdotimingifloopstart  popacc;Getdelaytimeback  clrc;Clearcarryflagfornexthup3   callwatchdog  cjnea,time_on2,S+3;Wait750mstoallowlooptoopen ?。籥ndpbxtoseeitasdisconnect. ??;jmptonextinstructioninanycase  jnchup3;Nocarrytiltime_on2greaterthanacc ??;(incasebuswritetookmorethan ??;750ms)bup4  setbfonhook;Seton-hookflag  clrfhang;Clearhang-upflag  clrf_one_sec;Sotimercanstartagainwhenoffhook  clrf_inuseofftiming;Resetflag  setbex0;Enableextint0(offhook)  ret;*************************************************;;TRUstatusupdate;;*************************************************;RoutineupdatesTRUstatusevery71.4ms,andturnsringer;onandoff.Alsochecksfor3.9secondintervalafteraring.update_displays  pushacc  pushpswupspec1  jnbfspec1,continue_update;Checkspecialflag  callspec1;SpecialroutineinTRUsectioncontinue_update  jbtest_enable,go_to_self;checkifteststarted  mova,lamps_temp;Holdvaluesforcomparisonlater  movc,roam  cplc;NoreallampsfortheMaxjack!  movroamlamp,c;Roamindicator(justforstorage)  movc,noserv  cplc  movnoservtamp,c;Noservindicator(justforstorage)  movc,lock  cplc  movlocklamp,c;Lockindicator(justforstorage)  movc,inuse  cplc  movinuselamp,c;Inuseindicator(justforstorage)callwrite_io_c;updatetheLEDS  jbsw_dialtone,not_maint;Ifoptionswisout(=1) ??;notmaintenancemoduletest_push  callread_iom_a;readpuahbutton  anla,#00010000b  cjnea,#0h,not_push  setbtestenable;initmainttest  setbfremote_hup;setremotehupfor700ms  setbloopswitch_;Othersidehasdisconnected  callwrite_px2not_push  jnbtest_enable,not_maint;checkifteststartedgo_to_self  jnbtest_end,not_error_yet;iferrorwasfound  jnberror_flag,pass_oktest_led  movr0,#error_code  mova,@r0  rla  rla  rla  rla  movlamps_temp,a  callwrite_io_c;updatetheLEDS  setbext_led;turnonexternalled1minute  jmpwrite_to_cpass_ok  clrext_led;turnonexternalled1minute  jmpwrite_to_cnot_error_yet  jbext_led,clr_led  setbext_led;turnonexternalledwhiletesting  jmpwrite_to_cclr_led  clrext_led;turnoffexternalledwhiletestingwrite_to_c  callwrite_io_m_c;turnon/offtheexternallednot_maint  mova,lamps_temp;Holdvaluesforcomparisonlater  jbfrohtimeout,compare  movc,ap2;CheckweareinALERTstate,  anlc,/ap1;(i.e.incomingcallwaiting)  jnccompare;BrifnotALERT(noincomingcall)  jnbfonhook,compare;Brifoffhook,don′tringbell!  clrloopswitch_;CloseloopswitchifALERTstate,  callwrite_px2;(incomingcalliswaiting)  jbfcall,reset_ring_tiner;Brffringingisalreadyinprogress  setbfcall;1=startringing(ALERTdetected)  movbell_timer,#0;Resettimers  movbell_timer2,#0  setbfbellsound;Flagbellsounding  movdptr,#table_20;Pointto20hztableforring  movlowpoint,dpl;Saveringertablestartsmovhighpoint,dph  setbtwenty_hz_pwm;Sopincanbepwm  movccapm2,#01000010b;Enablepwmtest10clrring_;Turnonringps  setbno_ring  callwrite_px2;Outtoportreset_ring_timer;Resetbetween-ringstimeraslongas  movring_timer,#0;weareinALERTstatecompare  xrla,lamps_temp;Bitsthatdifferwillbe=1  jnbf_one_sec,dtbits;Wait1secafteroffhookbefore ?。籰ookingatinuselamp,prevents ??;disconnectifoffhooksoonafterhup   movc,acc.7;GetINUSEstatus  anlc,/inuselanp;1=notINUSE  jnctiming_in_use_off;StarttimerifINUSElampjustturned ??;off  movinuseofftimer,#28;Resettimerfor1.99sec(28×71.1ms)  setbf_inuseofftiming;Showinuseofftimerisworkingnowtiming_in_use_kff  jnbinuselamp,cont_in_use_timing ??;Ifinuselampstilloff  clrf_inuseofftiming;Otherwiseclearflagandstoptimingcont_in_use_timing  jnbf_inuseofftiming,dtbits;Continuetimingifflagisset  djnzin_use_off_timer,dtbits;Whentimerhits1.99sec,disconnect  clrf_inuseofftiming;Clearflag  jbfonhook,dtbits;Iflocalhangupdon′tdoremotehangup;Wegethereiftheotherpartyhang-upandwedidnotputthephone;backonhookwithin2seconds.disconnect  setbfremote_hup;setremotehupfor700ms  setbloopswitch_;Othersidehasdisconnected  callwrite_px2dtbits  anla,#01110000b;Justcheckbitsthataffectdialtone  jzring_timeout;Ifnothingchgd  jnbfdtone,ring_timeout;OrifDTnotonalready  movccapm1,#0;TurnoffcurrentDT  calldtone;Changetonewdialtonering_timeout  jnbfcall,update_done;Don′ttimeringifnoincomingcall  incring_timer;Every71.1msec  mova,#53;54×71.1ms=3.84sec  clrc;Clearcarryforsubtraction  subba,ring_timer  jncupdate_done;Ifnotatleast3.84secwithnoring  jbfbetlsound,update_done;Alsowaittilnotsoundingringcheck_stop_ring_ps  mova,#3;4×25ms=100ms  clrc;Readytodosubtract  subba,bell_timer2jncupdate_done;Whencarry,100ms  jbring_,check_stop_null;BrifringPSisalreadyturnedoff  setbring_;ElseturnoffringPSnow  callwrite_px2;Outtoport  clrno_ring  callwrite_px2;Outtoportcheck_stop_null  mova,#7;8×25ms=200ms  clrc;Readytodosubtract  subba,bell_timer2  jncupdate_done;Whencarry,200ms  movccapm2,#0;Stoppwm  clrtwenty_hz_pwm;Leaveoutputpinlow,pwmhasrun100 ??;mslongerthanringpstosmoothout  ;waveform  clrfcall;0=notALERT,assurenoringing  jnbsw_gndstart,update_done;Brifloopstart  setbloopswitch_;GSdidntanswerring  callwrite_px2update_done  jbfcall,no_reset_io  jnblc_,no_reset_io  jbfrohtimeout,no_reset_iono_reset_io  poppsw  popacc  ret;*************************************************;;ReloadWatchDogCompareWord;;*************************************************watchdog  pushie  clrea;Disableints  movccap41,#0;Pointtostartofcurrentpage  movccap4h,ch;Currentpage  popie  ret;*************************************************;;Timer0(TL0)on-hookinterruptserviceroutine;;*************************************************onhook_timer  pushpsw  pushacc  clrtr1;Stopoffhooktimer  clrtf1;Clearpendingintsbyoffhooktimermute_check  jbmute,on_spec2;ifalreadymutedskipthissetbmute;Muterxaudiotopreventfalse  ;decodingofaudioringasdtmf, ??;alsopreventaudiofeedback  callwrite_px2;Outtoporton_spec2  jnbfspec2,on_spec2_done;Checkflag  callspec2;CallspecialroutineinTRUsectionon_spec2_done  djnzdisplay_delay,gs_init;In71.1ms  callupdate_displays;Every71.1msgs_init  jbfcall,cont_service;SkipoutgoingGSinitonincomingcall  jnbsw_gndstart,cont_service;BrifnotinGSmode  jnbfonhook,cont_service;Don′tlookforringgroundtostart  ;GSuntilreallyhungup  jbring_ground_,cont_groundstart  clrloopswitch_;Groundstartservicewasrequested  callwrite_px2  movgndstart_timer1,#0  movgndstart_timer2,#0;Inittimercont_groundstart  incgndstart_timer1;Subscriberhasreleasedringground  mova,gndstart_timer1  cjnea,#90,cont_service;25ms(90×277.8us)  incgndstart_timer2;Every25msec  movgndstart_timer1,#0;Resetfornextcountof90  mova,gndstart_timer2  ejnea,#40,cont_service;1sec(40×25ms)  setbloopswitch_;Openloopin1secifsubdidn′t  ;completeloop  callwrite_px2cont_service  jbfcall,ring_control;BrifALERTstatetogenerateringing  jmponhook_timers;Elsejustdotimersupdate;WeshallringthebelliftheTRUisinALERTstate,(anincoming;calliswaitingtobepickedup).ring_control  jbfbellsound,timing_ring;Whenbellnotsoundingduringring  ;cycle,checkforringgroundto ?。籭ndicateanswerduetoringing ?。籶ulses  jbring_ground_,timing_ring ??;Ifnoringground,timethering.Now  ;ignorethepulseonringgroundas ??;ringerstops  mova,bell_timer2;Incsevery25ms  cjnea,#0,start_bellsound;Observeanyringgroundafter25ms  mova,#28;29×277.8us=8.1ms  clrc;Readytosubtract  subba,bell_timer  jnctiming_ring;Nocarrytil8.1mssfterringstops. ??;Onlyignoreringground8.1msjmpstart_bcllsound;Ifringgroundindicatescameoffhook  ;duringsilenttime,start20hz ?。籥gaintoforceringtriptiming_ring  incbelltimer;Every277.8usec  mova,bell_timer  cjnea,#90,ringer_on;25msec(90×277.8us)  movbell_timer,#0;Resetfornext90  incbell_timer2;Every25msecringer_on  jnbfbellsound,ringer_off;Brifbellisnotsoundingnow;Theontimeringermodifiedfrom1.95secsto1.975secs,becausethering;stopsatthepositivepeakwhichcausesacontinousringing.Thisproblem;wasproducingwith5ringerboxapplyingwithmaxjack.(ssh)check_stop_bellsoundmova,bell_timer2;Getelapsed“bellon″timecjnea,#59,onhook_timers;Briflessthen79×25ms=1.975secsmova,bell_timer;45×277.8us=12.5ms(total1.987scjnea,#45,onhook_timers;Ringstopsafter1.987secsonnegative  ??;peak,chopsofflastquartercycle ??;forproperringtripstop_bcllsound  movccapm2,#0;Enablepwm  clrfbellsound;0=thebellnotsounding  movdptr,#table_null;Pointtotableofnulltone(nulltone  ;causesringertohavezeroACout, ??;onlybattery)  movlowpoint,dpl;Savethenulltablestart  movhighpoint,dph  movccapm2,#01000010b;Enablepwm  clrea  clrno_ring  callwrite_px2  setbea  callwatchdog  jmpreset_bell_timers;Resettimersringer_off  mova,bell_timer2  cjnea,#120,onhook_timers;4secwithnoring(160×25)start_bellsound  callreset_id  callwrite_px1  callwrite_px2  clrea  setbno_ring  callwrite_px2  setbea  movccapm2,#0;Enablepwm  movdptr,#table_20;Pointtotablefor20hz  movlowpoint,dpl;Rememberwheretablestarts  movhighpoinl,dph  movccapm2,#01000010b;Enablepwmtest_relayl  setbfbellsound;I=bellissoundingnowreset_bell_timers  movbell_timer,#0  movbell_timer2,#0onhook_timers  inctimc_onl;Every277.8usccwhileonhook  mova,timeonl  cjnea,#36,onhook_done;36×277.8ms=10ms  inctime_on2;Every10msecwhileonhook  movtime_on1,#0;Resetfornext36  mova,time_on2  cjnea,#0,not_inc255  inctest_min;10msec×255=255secnot_inc2.55jbffohtimeout,onhook_done;Skiphangupstuffuntillooptest;checksoutoktest_fhang1jbfonhook,onhook_done;Don′tdoanotherhangup,onehasbeen;donealreadytest_fhang2mova,time_on2;;ONHOOKSTATUS;cjnea,#70,onhook_done;700msecindicateshangupcjnea,#30,onhook_done;700msecindicateshanguptest_fhang3setbfhang;Setthehangupflagclrf_inuseofftiming;Stoptimertopreventpossibleremote;huponhook_donepopaccpoppswreti;*************************************************;;Timer1(TH0)off-hookinterruptserviceroutine;;*************************************************offhook_timerpushpsw;Saveentrystatuspushaccjnbfspec2,check_strobe;Brifspec2isnotenabledcallspec2;ElsedoTRUspecifictask;CheckforaDTMFdigit,andreaditfromtheMT8870ifthere;isoneavailable.check_strobecallread_px1_strobejbstrobe,decode_dtmf;BrifaDTMFdigitiswaitingclrfdecoder_busy;Resetifstrobeisgonejmpttimc;andjustdooffhooktimingtaskdecode_dtmfjbfdecodcr_busy,ttimc;BrifDTMFdigitalreadywasreadcallread_px1;Elsereaditnowsetbfdtmfin;1=DTMFdigitreceived!setbfdecoder_busy;1=DTMFdigitbeingprocessed;Checkelapsedoffhooktime,updatedisplaysinevery71ms,and;start-endROHtoneasrequired.ttimeinctime_off1;Bumpminoroffhooktimer(@277.8us)mova,time_off1;Getminoroffhooktime;JMPTEST_HOOKcjnea,#0,t_one_sec;Brif=256*277us=71.1msinctime_off2;Bumpmajortimer(every71.1ms)callupdate_displays;Doupdateevery71.1msmova,time_off2;Getmajoroffhooktimecjnea,#0,t_one_sec;Brif=256*71.1ms=18.2secinctime_off3;Bumptotaloffhooktimer(@18.2sec)t_one_secmova,time_off2;Getmajoroffhooktimecjnea,#14,trohtimer;Brif=14*71.1ms=995mspassedserbf_one_sec;sochangeinINUSElampwon′tcause;hangupffphonetakenoffhooktoo;soonafterhanguptrohtimerjbfsend,tdone;Brifweoriginatedthecall(noROH)jnbintse,tdone;BrifweareINUSE(noROHeither)incr5;BumpminorROHstart/endtimercjner5,#36,trohstart;Brif=35*277.8us=10mspassedincr7;BumpminorROHon/offtimermovr5,#0;Resetforanotherpass(10ms)cjner7,#10,trohstart;Brif=10*10ms=100mspassedcplroh_on;ToggleROHon/offevery100msmovr7,#0;Resetforanotheron/offphasetrohstartmova,time_off3;Gettotalelapsedoffhooktimecjnea,#2,trohquit;Brff=2×18.2=36.3secpassedmova,timeoff2;Getadditionalmajortimetoocjnea,#51,trohquit;Brif=40sectotaloffhooksetbftime;1=ROHperiodstartedtrohquitmova,time_off3;Gettotaloffhooktimeagaincjnea,#5,tdone;Brif=5*18.2=91secpassedmova,time_off2;Getadditionalmajortimetoocjnea,#127,tdone;Brif=91+(127*71.1ms)=100secsetbfrohtimeout;1=ROHperiodexpiredtdonejabf_start,tdone0;Brifnottiming500msafter″first″mova,time_off2;Getelapsedoffhooktimecjnea,#4,tdonel;Brif=285mselapsedcjnea,#7,tdonel;Brif=500mselapsedclrf_start;Reenableonhookintsafter500ms;Gethereonlyafter500mspassedfollowingthefirstoffhookafter;everyhangup.tdonc0jnblc_,tdonel;Brifoffhooknowtest_tr0clrtr1;Elsestoptheoffhooktimersetbtr0;andstartonhooktimertdone1popacc;Restorepoppswreti;************************************************;;ExternalInterrupt0serviceroutine;;*************************************************offhook_edgejbfrohtimeout,offhook_returnljnbfcall,not_inc_calljnbno_ring,ok_waitsetbring_;Turnoffbellcallwrite_px2clrno_ringcallwrite_px2setbreturn_ringclrie0;DiscardpendingEX0(LC_)interruptclrtr0;Turnoffonhook_timerandflagclrtf0;incaseonhook_timerintpendingok_waitmovr7,#Offhloop_ringmovr6,#0ffhdjnzr6,Scallwatchdogdjnzr7,loop_ringjnbIc_,no_setesta_setjnbreturn_ring,do_not_returncallreset_iocallwrite_px1callwrite_px2setbno_ringctrring_;Turnoffbellcallwrite_px2clrreturn_ringmovr7,#07fhloop_ring1movr6,#0ffhdjnzr6,Scallwatchdogdjnzr7,loop_ringldo_not_returncallreset_iocallwrite_px1callwrite_px2setbtr0;Turnoffonhook_timerandflagmovt10,#0retioffhook_return1jmpoffhook_returnno_setnot_inc_callclrtr0;Turnoffonthooktimerandflagclrtf0;incaseonhooktimerintpendingpushpswpushaccclrie0;DiscardpendingEX0(LC_)interruptsetbtr1;Startoff-hooktimerclrthang;Clearhangupflagforsafetymovth0,#0;Resetoffhooktimermovtime_off1,#0;Timersincrementedbyth0interruptsmovtime_off2,#0movtime_off3,#0clrmute;Unmuterxaudiocallwrite_px2jnbfonhook,check_flash;Brifwasn′thungup;comingbackoffhookclrfonhook;Cleartheflag,itwashungup,nowok_lffhook  jnbfcall,set_hook_flag;BtifnotinALERTstate  setbfanswer;1=offhookduringincomingcall  clrfcall;CleartheALERTflag(answeringcall)  setbring_;Turnoffbell  callwrite_px2  clrno_ring  callwrite_px2  movccapm2,#0;StopringerPWM  clrtwenty_hz_pwm;Leaveoutputpinlow  jmpoffhook_doneset_hook_flag  setbfhook;ShowoffhookifnotinALERTstate  jmpoffhook_donecheck_flash  mova,#19;20×10=200msec  clrc;Clearcarryforsubtraction  subba,time_on2;200-700msecisflash  jnccheck_digit  jnblock,offhook_donc;NoflashifTRUislocked  setbfflash;Setflashflagjmpoffhook_donecheck_digit  mova,#1;2×10=20msec  clrc;Clearcarryforsubtraction  subba,time_on2;20-200msecispulse  jncoffhook_done;Justaglitch  incpulse_digit;Containsthenumber  setbfdigit;Possibledigitflagoffhook_done  movtime_on1,#0;Reseton-hooktimerssotheycanbe  movtime_on2,#0;restartedonhangup  movt10,#0  popacc  poppswoffhook_return  reti;*************************************************;PCAInterruptRoutine;*************************************************;PCAinterruptsaregeneratedbyusingmoduleO′s(softwaretimer);compare/matchoptiononeverylowcount=FFmatch.Thiswaywecan;generateaninterruptattheendofeachpage,00FF-0100,01FF-0200;etc.whichgivesusaninterruptatevery(256*1.085us)278us.;ThisMaxjackimplementationisusingconditionalassemblytoproduce;amodifiedPCAserviceroutineforTRUswithextremelyhighdatatransfer;rates(AudiovoxrequiresthealternatePCAroutine).Sgepea_service ?。f(%intmaskne0)then(  pushie;Goingtosimulatethirdinterrupt ?。籶rioritylevel  movie,#%intmask;DefinedinTRUsection  callmasklabel;Toexecutethereti  pushacc  pushpsw  mova,ccapm1;Lookattonepwm  orla,ccapm2;Lookatringpwm  anla,#00000010b;Justlookatpwmbit  jzpea_done;Skipnextpartifnotoneorring ??;outputdo_pea  mova,#0;Inicializepointerread_table  movea,@a+dptr;Getdatafromtable  cjnea,#255,write_tone  movdph,highpoint;Resetindexthisisendoftable  movdpl,lowpoint  mova,#0;Soindexwillberight  jmpread_table;Readfirstentrywrite_tone  movccapih,a;Puldataintonepwm  movccap2h,a;Putdataintoringpwm-onlytone ??;orringpwmisrunningatanygiven ??;time  incdptr;Pointtonexttableentryfornext ?。籺imepea_donc  clrecf0;Resetthemodule0flag  clrea;Disableints  movccap01,#0ffh;Reloadlowmatchandsuspend  ;comparator  mova,ccap0h;Getlastpage  inca;Pointtonextpage  movccap0h,a;Loadhighmatchandrestartcomparator  setbea;Enableintsagain  poppsw  popacc  popie;Restoreoriginalints  retmasklabe1  reti  )else(  pushacc  pushpsw  mova,ccapm1;Lookattonepwm  orla,ccapm2;Lookatringpwm  anla,#00000010b;Justlookatpwmbit  jzpca_done;Skipnextpartifnotoneorring  ;output;IfwearegeneratingDialTonenow,thengetthecurrent;valuefromtheselectedtonetable,andsendittothePCA1;sothatproperDTMFfrequencyisgeneratedonCFX1(p1.4).do_pca  mova,#0;initializepointerread_table  movea,@a+dptr;Getdatafromtable  cjnea,#255,write_tone  movdph,highpoint;Resetindex,thisisendoftable  movdp1,lowpoint  mova,#0;Soindexwillberight  jmpread_table;Readfirstentrywrite_tone  movccap1h,a;Putdataintonepwrm  movccap2h,a;Putdataintoringpwmonlytoneor ??;ringpwmisrunningatanygiven ??;time  incdptr;Pointtonexttableentryfornext  ;timepca_done  clrccf0;Resetthemodule0flag  clrea;Disableints  movccap01,#0ffh;Reloadlowmatchandsuspend;comparator  mova,ccap0h;Getlastpage  inca;Pointtonextpage  movccap0h,a;Loadhighmatchandrestartcomparator  setbea;Enableintsagain  poppsw  popacc  rcti  )fiSnoge;*************************************************;;I/OSupportRoutines;*************************************************write_px1;Datafrompx1_temptopx1  pushie;Saveinterruptstatus  cirea;Nointerruptions  clrio_select  pushacc  push0;Pushr0  setba0;B  cira1  mova,px1_temp  anla,#11110000b  movb,a  mova,px2_temp  anla,#00001111b;Keeptheinputbitshigh  orla,b  movr0,#00h;LowaddressforI/Ochippx1latch  movx@r0,a  setba0  setba1  pop0;Restorer0  popacc  popie;Restoreinterruptstatus  retread_px1  pushie;Saveinterruptstatus  cirea;Nointerrupts  clrio_select  pushacc  push0;Pushr0  cira0;A  clra1  movr0,#0h;LowaddressbyteforI/Ochippx1pins  movxa,@r0  anla,#00001111b;Masktheoutputbits  anlpx1_temp,#11110000b;Masktheinputbitsinpx1_temp  prlpx1_temp,a;Combineinputsanloutputsintoone ??;bytesetba0  sctba1  pop0;Popr0  popacc  popic;Restoreinterruptstatus  retread_px1_strobe  pushic;Saveinterruptstatus  clrea;Nointerrupts  cirioselect  pushacc  push0;Pushr0  clra0;A  clra1  movr0,#0h;LowaddressbyteforI/Ochippx1pins  movxa,@r0  movio_status,a  setba0  setba1  pop0;Popr0  popacc  popie;Restoreinterruptstatus  retwrite_px2;Datafrompx2_temptopx2  pushie;Saveinterruptstatus  clrea;Nointerruptions  clrioselect  pushacc  push0;Pushr0  setba0;B  clrat  mova,px1_temp  anla,#11110000b  movb,a  mova,px2_temp  anla,#00001111b;Keeptheinputbitshigh  orla,b  movr0,#00h;LowaddressforI/Ochippx1latch  movx@r0a  setba0  setbal  pop0;Restorer0  popacc  popie;Restoreinterruptstatus  retwrite_io_c   ??;Datafrompx2_temptopx2  pushie;Saveinterruptstatus  clrea;Nointerruptions  clrio_select  pushacc  push0;Pushr0  clra0;Bsetba1  mova,lamps_temp  anla,#11110000b  rla  rla  rla  rla  movr0,#00h;LowaddressforI/Ochippx1latch  movx@r0,a  setba0  setba1  pop0;Restorer0  popacc  popie;Restoreinterruptstatus  retread_px2  pushie;Saveinterruptstatus  clrea;Nointerrupts  clrioselect  pushacc  push0;Pushr0  clra0;C  setba1  movr0,#0h;LowaddressforI/Ochippx2pins  movxa,@r0  anla,#11110000b;Masktheoutputbits  anlpx2_temp,#00001111b;Masktheinputbitsinpx2_temp  orlpx2_temp,a;Combineinputs/outputsintoonebyte  setba0  setba1  pop0;Popr0  popacc  popie;Restoreinterruptstatus  retread_iom_a   ?。籇atafrompx2_temptopx2  pushie;Saveinterruptstatus  clrea;Nointerruptions  setbioselect  pushacc  push0;Pushr0  cira0;b  clra1  movr0,#00h;LowaddressforI/Ochippx1latch  movxa,@r0  setba0  setba1  clrio_select  pop0;Restorer0  popacc  popie;Restoreinterruptstatus  retwrite_iom_b   ?。籇atafrompx1_temptopx1pushie;Saveinterruptstatus  sctbio_select  clrea;Nointerruptions  pushacc  push0;Pushr0  setba0;B  clra1  mova,jo_m_b  movr0,#00h;LowaddressforI/Ochippx1latch  movx@r0,a  setba0  setba1  clrioselect  pop0;Restorer0  popacc  popie;Restoreinterruptstatus  retwrite_iom_c  ;Datafrompx2_temptopx2  pushie;Saveinterruptstatus  setbio_select  clrea;Nointerruptions  pushacc  push0;Pushr0  clra0;B  setba1  mova,io_m_c  movr0,#00h;LowaddressforI/Ochippx1latch  movx@r0,a  setba0  serba1  clrioselect  pop0;Restorer0  popacc  popie;Restoreinterruptstatus  retreset_io_m  pushie;Saveinterruptstatus  clrea;Nointerrupts  setbioselect  pushacc  push0;Pushr0  setba0;Control  setba1  movr0,#0h;LowaddressforI/Ochippx2pins  mova,#10010000b   movx@r0,a  setba0  setba1  clrio_select  pop0;Popr0  popacc  popie;Restoreinterruptstatus  retreset_io  pushie;Saveinterruptstatus  clrea;Nointerrupts  clrioselect  pushacc  push0;Pushr0  setba0;Control  setba1  movr0,#0h;LowaddressforI/Ochipp×2pins  mova,#10011000b  movx@r0,a  setba0  setba1  clrioselect  pop0;Popr0  popacc  popie;Restoreinterruptstatus  ret;*************************************************;;SupportRoutines;;*************************************************;GenericmessagesbetweentheTRUandCeljackcanbesavetoaid;indebugging.Thismessagebtdferisfrom90htoFFh.clr_msg  push1;SaveR1  movr1,#msgbuf_start;Pointtomessagebufferstart  movmsg_ptr,r1;Savebufferstartclr_msg1  mov@r1,#55h;Fillwith55hmask  incr1;Pointtonextlocation  cjner1,#msgbuf_end,clr_msg1;Tilendofthebuffer  pop1;RestoreRI  retsavemg  push1;SaveR1  movr1,msg_ptr;Getcurrentpointer  cjner1,#msgbuf_end,savem1;Brifmessagebufferisnotfullyet  movr1,#msgbuf_start;Repointtostartwhenfullsavem1mov@r1,a;Savemsginbuffer  incr1;Advancepointer  movmsg_ptr,r1;Saveadvancedfornexttime  pop1;RestoreR1exitret;Clearcopyofhandset′sLCDdisplayfromramdisplaybuffer.clr_dsp  push1;SaveR1  movr1,#dspbuf_start;Pointtomessagebufferstart  movdsp_ptr,r1;Savcbufferstartclr_dsp1  mov@r1,#0ffh;FillwithFFhmask  incr1;Pointtonextlocation  cjncr1,#dspbuf_end,clr_dsp1;Tilendofdisplaybuffer  pop1;RestoreR1  ret;SomeTRUsmustsavethehandisetLCDdisplayinfo,inalocaldisplay;buffer.save_dsp  push1;SaveR1  movr1,dsp_ptr;Getcurrentpointer  cjner1,#dspbuf_end,save_dsp1;Brifmessagebufferisnotfullyet  movr1,#dspbuf_start;Repointtostartwhenfullsave_dsp1  mov@r1,a;Savemsginbuffer  incr1;Advancepointer  movdsp_ptr,r1;Updatepointerfornexttimc  pop1;RestoreR1save_dsp2;include(SPAIN.asm)  retSnolistsinclude(SPAIN4.asm)Slist  hop  nop  end;]]></pre>權(quán)利要求1.一種蜂窩或蜂窩式無線電收發(fā)機設備,它包括蜂窩或蜂窩式無線電收發(fā)機;蜂窩或蜂窩式接口裝置以及標準陸用電話機,該電話機與蜂窩或蜂窩式無線電收發(fā)機相連,所說的接口裝置將DTMF或脈沖型撥號信號轉(zhuǎn)換為數(shù)字格式以便發(fā)送給蜂窩或蜂窩式無線電接收機,從而,可以用在陸用電話機上所撥出的號碼去呼叫蜂窩或蜂窩式系統(tǒng)范圍內(nèi)的號碼,所述蜂窩或蜂窩式無線電收發(fā)機設備的特征在于包括自診斷裝置,它用于監(jiān)控和報告前述蜂窩或蜂窩式無線電收發(fā)機以及蜂窩或蜂窩式接口裝置的適當功能;用于將自診斷裝置交替地連接于蜂窩或蜂窩式接口裝置的裝置;上述用于將自診斷裝置交替地連接的裝置包括這樣的裝置,它用于在自診斷裝置連接于蜂窩或蜂窩式接口裝置時斷開標準的陸用電話機與蜂窩或蜂窩式接口裝置的聯(lián)系;上述自診斷裝置包括這樣的裝置,它用于模擬標準陸用電話機的功能以便在蜂窩或蜂窩式接口裝置內(nèi)產(chǎn)生各種相應的應答,從而確定該接口裝置是否在正常運轉(zhuǎn)。2.如權(quán)利要求1所述的蜂窩式無線電收發(fā)機設備,其特征在于,用于模擬標準陸用電話機功能的裝置包括這樣的裝置,它用于向蜂窩或蜂窩式接口裝置產(chǎn)生一個摘機信號。3.如權(quán)利要求2所述的蜂窩式無線電收發(fā)機設備,其特征在于,自診斷裝置包括這樣的裝置,它用于檢測前述接口裝置響應所生成的摘機信號而產(chǎn)生的撥號音信號是否出現(xiàn)。4.如權(quán)利要求1所述的蜂窩式無線電收發(fā)機設備,其特征在于,用于模擬標準陸用電話機功能的裝置包括這樣的裝置,它用于生成一個DTMF信號并將該信號傳送給前述接口裝置。5.如權(quán)利要求4所述的蜂窩式無線電收發(fā)機設備,其特征在于,自診斷裝置包括這樣的裝置,它用于檢測前述接口裝置因響應生成DTMF信號的裝置所生成的DTMF信號而輸出的DTMF信號。6.如權(quán)利要求1所述的蜂窩式無線電收發(fā)機設備,其特征在于,用于模擬標準陸用電話機功能的裝置包括這樣的裝置,它用于向前述接口裝置生成一個掛機信號。7.如權(quán)利要求6所述的蜂窩式無線電收發(fā)機設備,其特征在于,自診斷裝置包括這樣的裝置,它用于模擬對收發(fā)機所進行的電話呼入,以便使前述接口裝置啟動自身的振鈴發(fā)生器;該自診斷裝置還包括用于檢測由此產(chǎn)生的振鈴信號的裝置。8.如權(quán)利要求7所述的蜂窩式無線電收發(fā)機設備,其特征在于,用于模擬標準陸用電話機功能的裝置包括這樣的裝置,它用于在前述接口裝置正在產(chǎn)生振鈴信號時向該接口裝置產(chǎn)生一個摘機信號,以便確定接口裝置在應答電話呼入時適時地斷開振鈴信號。9.如權(quán)利要求1所述的蜂窩式無線電收發(fā)機設備,其特征在于,自診斷裝置包括這樣的裝置,它用于通過前述接口裝置和收發(fā)機以及電話系統(tǒng)產(chǎn)生一電話呼出并送回給該無線電收發(fā)機;上述自診斷裝置還包括這樣的裝置,它用于檢測前述收發(fā)機因響應上述電話呼叫而產(chǎn)生的忙音信號;上述用于產(chǎn)生電話呼出的裝置呼叫業(yè)已分配給上述收發(fā)機并與該收發(fā)機實際相聯(lián)的電話號碼。10.一種檢測設備,它用于檢測蜂窩或蜂窩式接口裝置的適當操作,所說的接口裝置能與陸用電話或電話式設施相連,并且能將來自與之相連的陸用電話設施的DTMF信號或脈沖式撥號信號轉(zhuǎn)換成數(shù)字數(shù)據(jù)格式以便將該數(shù)字數(shù)據(jù)傳送給前述收發(fā)機,所說的檢測設備包括診斷裝置,它用于監(jiān)控和報告前述接口裝置的適當功能。11.如權(quán)利要求10所述的檢測設備,其特征在于,該檢測設備還包括用于將診斷裝置交替地連接于前述接口裝置的裝置;所說的診斷裝置包括這樣的裝置,它用于模擬標準陸用電話的功能以便在前述接口裝置內(nèi)產(chǎn)生各種相應的應答,從而確定接口裝置是否在正常運轉(zhuǎn)。12.如權(quán)利要求11所述的檢測設備,其特征在于,上述用于交替連接診斷裝置的裝置包括這樣的裝置,它能在診斷裝置連接于前述接口裝置時斷開標準陸用電話式設施與前述接口裝置的聯(lián)系。13.如權(quán)利要求11所述的檢測設備,其特征在于,用于模擬標準陸用電話式設施功能的裝置包括這樣的裝置,它用于向前述接口裝置產(chǎn)生一摘機信號。14.如權(quán)利要求13所述的檢測設備,其特征在于,所說的診斷裝置包括這樣的裝置,它用于檢測前述接口裝置因響應所生成的摘機信號而產(chǎn)生的撥號音信號是否出現(xiàn)。15.如權(quán)利要求11所述的檢測設備,其特征在于,用于模擬標準陸用電話式設施的裝置包括這樣的裝置,它用于生成一個DTMF信號并將該信號傳送給前述接口裝置。16.如權(quán)利要求15所述的檢測設備,其特征在于,所說的診斷裝置包括這樣的裝置,它用于檢測前述接口裝置因響應生成DTMF信號的裝置所生成的DTMF信號而輸出的DTMF信號。17.如權(quán)利要求15所述的檢測設備,其特征在于,用于模擬標準陸用電話式設施功能的裝置包括這樣的裝置,它用于向前述接口裝置生成一個掛機信號。18.如權(quán)利要求10所述的檢測設備,其特征在于,所說的診斷裝置包括這樣的裝置,它用于模擬對收發(fā)機所進行的電話呼入,以便使前述接口裝置啟動自身的振鈴發(fā)生器;該診斷裝置還包括用于檢測由此產(chǎn)生的振鈴信號的裝置。19.如權(quán)利要求18所述的檢測設備,其特征在于,所說的診斷裝置還包括這樣的裝置,它用于在前述接口裝置正在產(chǎn)生振鈴信號時向該接口裝置產(chǎn)生一個摘機信號,以便確定接口裝置根據(jù)對電話呼入的應答而適時地斷開振鈴信號。20.如權(quán)利要求10所述的檢測設備,其特征在于,所說的診斷裝置包括這樣的裝置,它用于在前述接口裝置連接于收發(fā)機時通過蜂窩或蜂窩式電話網(wǎng)產(chǎn)生一個電話呼出并送回給上述無線電收發(fā)機,從而,所說的診斷裝置會使得收發(fā)機呼叫自己;上述診斷裝置還包括這樣的裝置,它用于檢測前述收發(fā)機因響應上述電話呼叫而產(chǎn)生的忙音信號,上述用于產(chǎn)生電話呼出的裝置呼叫業(yè)已分配給與前述接口裝置相連的收發(fā)機的電話號碼。21.一種利用診斷裝置檢測蜂窩或蜂窩式接口裝置適當操作的方法,所說的接口裝置可與陸用電話或電話式設施相連,并且能將來自與之相連的陸用電話式設施的DTMF信號或脈沖式撥號信號轉(zhuǎn)換成數(shù)字數(shù)據(jù)格式,以便將該數(shù)字數(shù)據(jù)傳送給前述收發(fā)機,所說的方法包括(a)監(jiān)控并報告前述接口裝置功能。22.如權(quán)利要求21所述的方法,其特征在于所說的步驟(a)包括(b)將診斷裝置交替地連接于前述接口裝置;(c)模擬標準陸用電話式設施的功能以便在前述接口裝置內(nèi)產(chǎn)生各種相應的應答,從而確定接口裝置是否在正常地操作。23.如權(quán)利要求22所述的方法,其特征在于,所說的步驟(b)包括在診斷裝置連接口裝置時斷開標準陸用電話式設施與前述接口裝置的連接。24.如權(quán)利要求22所述的方法,其特征在于,所說的步驟(c)包括向前述接口裝置產(chǎn)生一摘機信號。25.如權(quán)利要求21至24所述的方法,其特征在于,它還包括檢測前述接口裝置因響應所生成的摘機信號而產(chǎn)生的撥號音信號是否出現(xiàn)。26.如權(quán)利要求22所述的方法,其特征在于,所說的步驟(c)包括生成一個DTMF信號并將該信號傳送給前述接口裝置。27.如權(quán)利要求26所述的方法,其特征在于,它還包括檢測前述接口裝置因響應所生成的DTMF信號而輸出的DTMF信號。28.如權(quán)利要求236所述的方法,其特征在于,所說的步驟(c)包括向前述接口裝置產(chǎn)生一個掛機信號。29.如權(quán)利要求21所述的方法,其特征在于,所說的步驟(a)包括模擬對收發(fā)機的電話呼入,以便使前述接口裝置啟動自身的振鈴發(fā)生器并且檢測所產(chǎn)生的振鈴信號。30.如權(quán)利要求29所述的方法,其特征在于所說的步驟(a)還包括在前述接口裝置正在產(chǎn)生振鈴信號時向該接口裝置產(chǎn)生一個摘機信號,以便確定接口裝置在應答電話呼入時適當?shù)財嚅_振鈴信號。31.如權(quán)利要求21所述的方法,其特征在于,所說的步驟(a)包括在前述接口裝置連接于收發(fā)機時通過蜂窩或蜂窩式電話網(wǎng)產(chǎn)生一個電話呼出并送回給上述無線電收發(fā)機;該產(chǎn)生電話呼出的步驟使收發(fā)機呼叫自己,并且還包括檢測上述蜂窩或蜂窩式無線電收發(fā)機因響應電話呼叫而產(chǎn)生的忙音信號。32.一種無線電收發(fā)機設備,它包括無線電收發(fā)機,接口裝置,以及與無線電收發(fā)機相連的通信設備;所說的接口裝置使通信設備與無線電收發(fā)機相連接進行工作,以便通過無線電收發(fā)機呼出或接收呼叫,其特征在于自診斷裝置,它用于監(jiān)控并報告無線電收發(fā)機和接口裝置的適當功能;用于將自診斷裝置交替地連接于前述接口裝置的裝置;上述裝置包括這樣的裝置,它用于在自診斷裝置連接于接口裝置時斷開通信設備與該接口裝置的連接;上述的自診斷裝置包括這樣的裝置,它用于模擬通信設備的功能以便在接口裝置內(nèi)產(chǎn)生各種相應的應答,從而確定該接口裝置是否在正常的操作。33.如權(quán)利要求32所述的蜂窩式收發(fā)機設備,其特征在于,用于模擬通信設備功能的裝置包括這樣的裝置,它用于向接口裝置產(chǎn)生一個摘機信號。34.如權(quán)利要求33所述的蜂窩式收發(fā)機設備,其特征在于,自診斷裝置包括這樣的裝置,它用于檢測前述接口裝置響應所生成的摘機信號而產(chǎn)生的撥號音信號是否出現(xiàn)。35.如權(quán)利要求32所述的蜂窩式收發(fā)機設備,其特征在于,用于模擬通信設備功能的裝置包括這樣的裝置,它用于生成一個DTMF信號并將該信號傳送給前述接口裝置。36.如權(quán)利要求35所述的蜂窩式收發(fā)機設備,其特征在于,自診斷裝置包括這樣的裝置,它用于檢測前述接口裝置因響應用于生成DTMF信號的裝置所生成的DTMF信號而輸出的DTMF信號。37.如權(quán)利要求32所述的蜂窩式收發(fā)機設備,其特征在于,自診斷裝置包括這樣的裝置,它用于模擬對收發(fā)機所進行的電話呼入,以便使前述接口裝置啟動自身的振鈴發(fā)生器,該自診斷裝置還包括用于檢測由此產(chǎn)生的振鈴信號的裝置。38.如權(quán)利要求32所述的蜂窩式收發(fā)機設備,其特征在于,自診斷裝置包括這樣的裝置,它用于通過接口裝置和收發(fā)機以及與該收發(fā)機相聯(lián)的無線電電話系統(tǒng)產(chǎn)生一個電話呼出并送回給該收發(fā)機;自診斷裝置還包括這樣的裝置,它用于檢測前述收發(fā)機因響應上述電話呼叫而產(chǎn)生的忙音信號;上述用于產(chǎn)生電話呼出的裝置呼叫業(yè)已分配給上述收發(fā)機并與該收發(fā)機在操作上相聯(lián)的電話號碼。39.一種檢測設備,用于檢測接口裝置的適當操作,所說的接口裝置能與通信設備相連從而使該通信設備與無線電收發(fā)機在操作上相連,以便通過無線電收發(fā)機呼出或接收呼叫,所說的檢測設備包括診斷裝置,它用于監(jiān)控和報告前述接口裝置的適當功能。40.如權(quán)利要求39所述的檢測設備,其特征在于,該檢測設備還包括用于將診斷裝置交替地連接于前述接口裝置的裝置;所說的診斷裝置包括這樣的裝置,它用于模擬通信設備的功能以便在前述接口裝置內(nèi)產(chǎn)生各種相應的應答,從而確定接口裝置是否在正常地操作。41.一種利用診斷裝置檢測接口裝置適當操作的方法,所說的接口裝置可將通信設備與無線電收發(fā)機連接起來,從而通信設備可通過無線電收發(fā)機呼出或接收呼入,所說的方法包括(a)監(jiān)控并報告前述接口裝置的功能。42.如權(quán)利要求41所述的方法,其特征在于,所說的步驟(a)包括(b)將診斷裝置交替地連接于前述接口裝置;(c)模擬通信設備的功能以便在前述接口裝置內(nèi)產(chǎn)生各種相應的應答,從而確定接口裝置是否在正常地操作。43.如權(quán)利要求42所述的方法,其特征在于,所說的步驟(b)包括在診斷裝置連接于前述接口裝置時斷開通信設備與接口裝置的連接。全文摘要一種自診斷系統(tǒng),它用于檢查帶有蜂窩式接口裝置的蜂窩式無線電收發(fā)機,所說的接口裝置將標準的電話機連接于蜂窩式收發(fā)機,并且將DTMF或脈沖式撥號信號轉(zhuǎn)換成數(shù)字格式以便傳輸給收發(fā)機,在該收發(fā)機中,可以使用陸用電話上撥出的號碼去呼叫蜂窩系統(tǒng)范圍內(nèi)的號碼。本發(fā)明不僅可監(jiān)控和檢查收發(fā)機及其相關(guān)電源的適當功能,而且可以監(jiān)控和檢查上述接口裝置。文檔編號H04M11/00GK1119898SQ94191585公開日1996年4月3日申請日期1994年3月2日優(yōu)先權(quán)日1993年3月25日發(fā)明者L·R·奧蒂斯,A·托里斯申請人:特呂拉國際公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1