国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

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

      文檔序號(hào):7564983閱讀:311來(lái)源:國(guó)知局

      專利名稱::用于蜂窩式無(wú)線電收發(fā)機(jī)系統(tǒng)的自診斷系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      :本發(fā)明涉及到一種用于檢驗(yàn)蜂窩式無(wú)線電收發(fā)機(jī)系統(tǒng)的所有功能的自診斷系統(tǒng)。本發(fā)明特別涉及諸如美國(guó)專利第4,658,096號(hào)和4,737,975號(hào)所公開的蜂窩式接口系統(tǒng)。本文包括了上述專利所公開的系統(tǒng)以作為參考。在上述專利的系統(tǒng)中,一接口裝置將標(biāo)準(zhǔn)的電話機(jī)、傳真機(jī)、調(diào)制解調(diào)器或其它通信設(shè)備連接于蜂窩或蜂窩式無(wú)線電收發(fā)機(jī),該接口裝置能使上述通訊設(shè)備經(jīng)由無(wú)線電收發(fā)機(jī)作正常的操作。所說(shuō)的接口裝置還可將DTMF或脈沖式撥號(hào)信號(hào)轉(zhuǎn)換成數(shù)字格式以便傳遞給無(wú)線電收發(fā)機(jī),因此,通過(guò)該無(wú)線電收發(fā)機(jī)可利用所撥的號(hào)碼來(lái)呼叫無(wú)線電系統(tǒng)范圍內(nèi)的號(hào)碼。本發(fā)明的系統(tǒng)可檢測(cè)上述適配器接口裝置的所有功能的正常運(yùn)轉(zhuǎn)以及其它特征,如無(wú)線電收發(fā)機(jī)的功率輸出或該無(wú)線電收發(fā)機(jī)正在使用時(shí)的頻率等,來(lái)自無(wú)線電收發(fā)機(jī)的信號(hào)或來(lái)自無(wú)線電網(wǎng)絡(luò)的信號(hào)可以改變上述功率輸出,而無(wú)線電收發(fā)機(jī)或蜂窩式網(wǎng)絡(luò)則可有選擇地改變前述頻率。本發(fā)明的診斷與檢測(cè)系統(tǒng)可用于諸如純蜂窩系統(tǒng)之類的任何蜂窩式系統(tǒng)或者諸如ISDN(綜合業(yè)務(wù)數(shù)字網(wǎng)絡(luò))及其它個(gè)人通信系統(tǒng)之類的蜂窩式系統(tǒng),在上述蜂窩式系統(tǒng)中設(shè)置有一蜂窩式適配器或接口裝置以便將DTMF或脈沖式撥號(hào)信號(hào)轉(zhuǎn)換成數(shù)字格式從而傳遞給與該蜂窩式系統(tǒng)相聯(lián)的蜂窩式無(wú)線電收發(fā)機(jī)。已知提供有用于整個(gè)蜂窩系統(tǒng)的診斷與檢測(cè)設(shè)備。還已知提供有可自檢測(cè)的機(jī)載裝置。該機(jī)載裝置公開于Rogers的美國(guó)專利第5,016,269號(hào),此專利公開了一種蜂窩式電話的應(yīng)急電話亭,本文包含了該專利以作為參考。上述專利公開了由電話亭自身執(zhí)行的自診斷程序。該專利的電話亭中帶有自診斷程序并定期性地將所檢查到的作業(yè)狀態(tài)經(jīng)由蜂窩式網(wǎng)絡(luò)報(bào)告給總局。Rogers公開了一種蜂窩式便攜式手機(jī)和無(wú)線電收發(fā)機(jī)以及相關(guān)的自動(dòng)診斷系統(tǒng),該系統(tǒng)用于對(duì)所說(shuō)的蜂窩式系統(tǒng)進(jìn)行檢查并報(bào)告給總局。但是,該專利未公開對(duì)諸如上述美國(guó)專利第4,658,096號(hào)和第4,737,975號(hào)中所使用的DTMF轉(zhuǎn)換器的監(jiān)控與自診斷功能,而且,Rogers也未說(shuō)明從總局產(chǎn)生回鈴以便對(duì)系統(tǒng)的適當(dāng)作業(yè)進(jìn)行檢查。除純蜂窩系統(tǒng)以外,可使用本發(fā)明的蜂窩式系統(tǒng)是這樣一些系統(tǒng),它們一般涉及到無(wú)線數(shù)字個(gè)人通信系統(tǒng)(這些系統(tǒng)帶有多個(gè)智能基地臺(tái)和智能便攜式手機(jī)終端,每個(gè)基地臺(tái)和手機(jī)均具有預(yù)定的無(wú)線電信號(hào)覆蓋面積),具體地說(shuō),它們涉及到數(shù)字無(wú)線電電話式個(gè)人通信系統(tǒng)(PCS),這種系統(tǒng)帶有一全I(xiàn)SDN接口裝置,從而便于PCS呼叫業(yè)務(wù)經(jīng)由ISDN接口裝置及公共電話交換網(wǎng)或任何交換網(wǎng)的連接和轉(zhuǎn)換,所說(shuō)的個(gè)人通信系統(tǒng)其有聲音/數(shù)據(jù)/圖像(或它們的組合形式)以及雙路全雙工呼入呼出能力,并且可充分加以使用,同時(shí)可與任何所選定的調(diào)制方法相兼容,而且與通過(guò)在軟件中實(shí)現(xiàn)的分布式邏輯電路所設(shè)置的蜂窩間協(xié)議切換相兼容,所說(shuō)的軟件則駐留在便攜式智能手機(jī)、智能基地臺(tái)以及配備有PCS服務(wù)控制數(shù)據(jù)庫(kù)的公共電話交換網(wǎng)(或任何交換網(wǎng))中。在過(guò)去十年內(nèi),移動(dòng)式及便攜式通信日益增加的可用性使商業(yè)及住宅用戶正在擺脫完全有線的電信網(wǎng)絡(luò)的束縛。具體地說(shuō),蜂窩式通信系統(tǒng)連同尋呼及其它附加業(yè)務(wù)第一次使得電信業(yè)務(wù)有了真正的可移動(dòng)性。移動(dòng)與便攜技術(shù)以及諸如無(wú)線電信數(shù)字傳輸之類新技術(shù)方面的重大技術(shù)進(jìn)步業(yè)已顯著地增加了使用用戶可以利用的無(wú)線電頻譜的無(wú)線電信服務(wù)的數(shù)量和類型。這些未來(lái)的服務(wù)包括但不局限于蜂窩式電話服務(wù)的高級(jí)形式、高級(jí)數(shù)字式無(wú)線電話服務(wù)、便攜式傳真服務(wù)、無(wú)線交換臺(tái)、無(wú)線專用支局服務(wù)以及無(wú)線局域網(wǎng)服務(wù),并且,可以通過(guò)現(xiàn)有的公共交換網(wǎng)或通過(guò)可替代的局部有線網(wǎng)(如電纜電視)來(lái)使用上述未來(lái)的服務(wù)。因此,數(shù)字或個(gè)人通信系統(tǒng)可獨(dú)立于有線局域網(wǎng)而存在,也可與有線局域網(wǎng)共存,從而填補(bǔ)了當(dāng)前通信系統(tǒng)中的空白,并且,還能形成新的市場(chǎng),這些市場(chǎng)中的多數(shù)是尚未明朗化的。PCS的出現(xiàn)通過(guò)顯著地改進(jìn)所有電信網(wǎng)的靈活性與功能,從而對(duì)它們的開發(fā)與結(jié)構(gòu)產(chǎn)生巨大的影響。所以,PCS的供應(yīng)商能在全國(guó)范圍內(nèi)以經(jīng)濟(jì)和快捷的方式獲得并服務(wù)于現(xiàn)有及新的市場(chǎng)。用于用戶日益增加的流動(dòng)性,美國(guó)個(gè)人通信的要求正在隨著對(duì)即時(shí)通信的需求的增加而迅速改變。PCS的優(yōu)點(diǎn)之一在于這種系統(tǒng)能用單一的通信設(shè)備在任何時(shí)間、任何地點(diǎn)與任何人進(jìn)行聯(lián)系。PCS會(huì)促進(jìn)用戶日益增加的流動(dòng)性和靈活性,這是因?yàn)椋@種方法能解決與用戶進(jìn)行穩(wěn)定通信中所存在的潛在問(wèn)題。PCS的無(wú)線化能使得用戶不會(huì)錯(cuò)過(guò)重要的呼叫,并且減小回話時(shí)的時(shí)間和費(fèi)用。PCS將無(wú)線電的功能與公共電話交換網(wǎng)(PSTN)技術(shù)和基本設(shè)施結(jié)合起來(lái)并且能提供無(wú)線電蜂窩間的全雙工能力(雙向呼出)以及切換(從而使得用戶在不中斷通話的情況下自由地從一個(gè)無(wú)線電蜂窩移至另一個(gè)無(wú)線電蜂窩)。注意到以下實(shí)事是很重要的對(duì)于新型PCS設(shè)施和用于多種(有時(shí)是相矛盾的)應(yīng)用即無(wú)線電專用交換支局、小型輕質(zhì)蜂窩式便攜電話、便攜式傳真機(jī)、多通路無(wú)繩電話以及目的在于便于與特定個(gè)人用戶進(jìn)行聯(lián)絡(luò)(而不是與特定電臺(tái)進(jìn)行聯(lián)絡(luò))的輔助設(shè)施的需求正在持續(xù)地增加。目前所提供的無(wú)線電設(shè)備及相關(guān)的設(shè)施(即無(wú)繩電話、無(wú)線電尋呼以及蜂窩式無(wú)線電話)無(wú)法完全滿足對(duì)上述新型PCS設(shè)施的要求。例如,無(wú)繩電話只能在家庭或辦公室內(nèi)及周圍使用并且只能處理非常少的信道(10個(gè)左右),這些信道擁擠在一起并只限于在與它們相聯(lián)的基地臺(tái)附近使用。無(wú)線電尋呼設(shè)施僅僅是單向的并且容量有限。蜂窩式及專門的移動(dòng)式無(wú)線電設(shè)施無(wú)法滿足所有對(duì)PCS的預(yù)期要求。隨著時(shí)間的推移,PCS會(huì)具有標(biāo)準(zhǔn)化的設(shè)備,這種設(shè)備在硬件方面帶有通用的組件,從而能在不受外部信號(hào)源瞬時(shí)干擾的相關(guān)設(shè)備方面提高了可靠性,并且,PCS帶有自動(dòng)通話登記、自動(dòng)通話發(fā)送、語(yǔ)音郵件、傳真能力、方便的漫游特征、遠(yuǎn)程數(shù)據(jù)傳送、增加了的保密性/主叫用戶的ID/分級(jí)設(shè)施、增加了的電池壽命以及通用協(xié)議。為了能最佳地實(shí)現(xiàn)這種市場(chǎng)授權(quán),數(shù)字式PCS是一種必需的設(shè)備。無(wú)線PCS最終會(huì)不需要有用于通訊的用硬電纜相連的建筑設(shè)施。一般地說(shuō),PCS會(huì)簡(jiǎn)化帶有輔助特征的通信設(shè)備。數(shù)字式PCS會(huì)便于改進(jìn)技術(shù)性的通信設(shè)備、系統(tǒng)與裝置。所以,本發(fā)明可在設(shè)置有蜂窩式適配器或接口插板的ISDN或其它PCS系統(tǒng)中使用,所說(shuō)的適配器或接口插板通過(guò)將DTMF或脈沖信號(hào)轉(zhuǎn)換成可發(fā)送給PCS無(wú)線電收發(fā)機(jī)的數(shù)字格式或者通過(guò)提供所述系統(tǒng)專用的其它功能,從而允許在系統(tǒng)內(nèi)使用標(biāo)準(zhǔn)的陸用電話機(jī)或其它通信設(shè)備。例如,在無(wú)線電收發(fā)機(jī)只能進(jìn)行呼出的專用報(bào)警系統(tǒng)中,接口裝置不必提供響鈴、忙音或類似的信號(hào)。另外,在只需呼入的系統(tǒng)中,接口裝置不必將撥號(hào)的DTMF或脈沖信號(hào)轉(zhuǎn)換成數(shù)字格式。正如美國(guó)專利第4,658,096號(hào)和第4,737,975號(hào)所述的蜂窩接口插板那樣,PCS-蜂窩適配器還提供諸如產(chǎn)生撥號(hào)音、振鈴或類似信號(hào)之類的全部所需的其它功能。發(fā)明概要所以,本發(fā)明的基本目的是提供一種自診斷系統(tǒng),這種系統(tǒng)用于檢測(cè)帶有蜂窩式接口裝置的蜂窩式無(wú)線電收發(fā)系統(tǒng)的所有功能,所說(shuō)的接口裝置將標(biāo)準(zhǔn)的陸用電話機(jī)或其它通信設(shè)備連接于蜂窩無(wú)線電收發(fā)機(jī)或者連接于諸如蜂窩式PCS或ISDN無(wú)線電收發(fā)機(jī),并且,所說(shuō)的接口裝置還將DTMF或脈沖式撥號(hào)信號(hào)轉(zhuǎn)換成數(shù)字式以便傳送給蜂窩或蜂窩式無(wú)線電收發(fā)機(jī),從而,可以使用在陸用電話機(jī)或與其相當(dāng)?shù)脑O(shè)備上所撥叫的號(hào)碼去呼叫上述蜂窩或蜂窩式系統(tǒng)范圍內(nèi)的號(hào)碼。本發(fā)明不僅能監(jiān)控和檢測(cè)蜂窩或蜂窩式無(wú)線電收發(fā)機(jī)及相關(guān)電源和類似設(shè)備的適當(dāng)功能,而且會(huì)監(jiān)控和檢測(cè)蜂窩或蜂窩式接口裝置。本發(fā)明的檢測(cè)設(shè)備能與接口裝置相連,此接口裝置則將通信設(shè)備連接于無(wú)線電收發(fā)機(jī),以便通過(guò)該收發(fā)機(jī)呼入或接收呼叫,所說(shuō)的檢測(cè)設(shè)備帶有自身的診斷程序,從而能監(jiān)控并報(bào)告接口裝置的適當(dāng)功能。上述檢測(cè)設(shè)備還可將診斷程序連接于接口裝置,該診斷程序模擬諸如陸用通信電話、傳真機(jī)、調(diào)制解調(diào)器以及類似設(shè)備之類的通信設(shè)備所執(zhí)行的功能,以便在接口裝置內(nèi)產(chǎn)生各種相應(yīng)的應(yīng)答,從而確定該接口裝置是否在正常的操作。上述檢測(cè)設(shè)備還會(huì)對(duì)接口裝置產(chǎn)生摘機(jī)信號(hào),并檢測(cè)接口裝置因響應(yīng)摘機(jī)信號(hào)而產(chǎn)生的撥號(hào)音信號(hào)是否出現(xiàn)。上述檢測(cè)設(shè)備還生成DTMF信號(hào)并將該信號(hào)傳送給接口裝置,并且檢測(cè)接口裝置因響應(yīng)所生成的DTMF信號(hào)而輸出的DTMF信號(hào)。上述檢測(cè)設(shè)備還會(huì)對(duì)接口裝置產(chǎn)生掛機(jī)信號(hào),并且在接口裝置正在生成振鈴信號(hào)時(shí)對(duì)該接口裝置產(chǎn)生摘機(jī)信號(hào),以便確定接口裝置在應(yīng)答電話呼入時(shí)能適時(shí)地?cái)嚅_振鈴信號(hào)。上述檢測(cè)設(shè)備還能在接口裝置連接于無(wú)線電收發(fā)機(jī)時(shí)通過(guò)電話網(wǎng)產(chǎn)生電話呼出并送回給該無(wú)線電收發(fā)機(jī),從而,所說(shuō)的診斷程序會(huì)使得收發(fā)機(jī)呼叫自己,并且,該診斷程序檢測(cè)收發(fā)機(jī)因響應(yīng)上述呼叫而產(chǎn)生的忙音信號(hào)。參照附圖將很容易地理解本發(fā)明,在附圖中圖1A和圖1B顯示了本發(fā)明的自檢測(cè)所包含的步驟的總體流程圖;圖2是顯示本發(fā)明的自檢測(cè)摘機(jī)子例程所包含的步驟的流程圖;圖3是顯示本發(fā)明的自檢測(cè)撥號(hào)音生成子例程所包含的步驟的流程圖;圖4是顯示本發(fā)明的自檢測(cè)DTMF音生成子例程所包含的步驟的流程圖;圖5A至圖5C顯示了本發(fā)明的自檢測(cè)振鈴生成子例程所包含的步驟的流程圖;圖6是顯示本發(fā)明的自檢測(cè)應(yīng)答振鈴過(guò)程子例程所包含的步驟的流程圖;圖7A與圖7B是顯示本發(fā)明的通話檢測(cè)子例程所包含的步驟的流程圖,該子例程檢查適當(dāng)?shù)耐ㄔ挋z測(cè)以及對(duì)呼入的應(yīng)答。圖8A和圖8B顯示了本發(fā)明的出錯(cuò)碼生成子例程;圖9是顯示本發(fā)明的重置子例程的流程圖;圖10是本發(fā)明的系統(tǒng)的框圖;圖11至圖14是顯示用于通過(guò)模擬所需檢測(cè)的事件而檢測(cè)蜂窩或蜂窩式接口及收發(fā)機(jī)的各種電路的概略圖。發(fā)明的詳細(xì)公開本發(fā)明的自動(dòng)診斷維護(hù)系統(tǒng)可用于諸如美國(guó)專利第4,658,096號(hào)和第4,737,975號(hào)所公開的蜂窩或蜂窩式接口插板及系統(tǒng)。此外,本發(fā)明的自診斷維護(hù)系統(tǒng)還可以供諸如IMTS之類的其它無(wú)線電收發(fā)機(jī)系統(tǒng)使用,在這類系統(tǒng)中,提供了基地臺(tái)與主控臺(tái)之間的無(wú)線通訊,并且,無(wú)線電收發(fā)機(jī)與諸如美國(guó)專利第4,658,096和第4,737,975號(hào)所公開的適配器接口插板相連,這種接口插板則將諸如陸用通訊電話、傳真機(jī)、調(diào)制解調(diào)器或類似設(shè)備之類的通信器材連接于所說(shuō)的無(wú)線電收發(fā)機(jī)并使這些通信器材正常地發(fā)揮功能。上述接口裝置根據(jù)預(yù)定的用途而提供多種功能。例如,在無(wú)線電收發(fā)機(jī)只進(jìn)行呼出的專用報(bào)警系統(tǒng)中,接口裝置就不必向通信設(shè)備產(chǎn)生振鈴、產(chǎn)生忙音信號(hào)以及類似的信號(hào)。另外,在只需要有呼入的系統(tǒng)中,接口裝置不必將撥號(hào)的DTMF或脈沖信號(hào)轉(zhuǎn)換成數(shù)字格式。依照本發(fā)明,提供了一種軟件,這種軟件與美國(guó)專利第4,658,096號(hào)和4,737,975號(hào)所公開的蜂窩接口插板或其它無(wú)線電收發(fā)機(jī)接口插板的微處理器相通訊,這種軟件可人工或自動(dòng)地啟動(dòng)以便啟動(dòng)本發(fā)明的自動(dòng)診斷接口插板,并且,這種軟件可以診斷上述專利的整個(gè)系統(tǒng)內(nèi)所包括的全部軟件和硬件系統(tǒng)的適當(dāng)功能。可以檢測(cè)每個(gè)單一的項(xiàng)目。例如,對(duì)接口插板來(lái)說(shuō),可以檢測(cè)DTMF轉(zhuǎn)換器,與兩線路接頭相連的四線路接口、忙音軟件以及接口的其它功能。此外,還會(huì)檢測(cè)無(wú)線電收發(fā)機(jī)、電池以及接口的其它方面。本發(fā)明的維護(hù)系統(tǒng)能在蜂窩或蜂窩式網(wǎng)絡(luò)范圍內(nèi)呼叫中心臺(tái)或基地臺(tái)的預(yù)定電話號(hào)碼,然后,中心臺(tái)可發(fā)回一個(gè)回音或者撥叫接口系統(tǒng)的當(dāng)前號(hào)碼以獲得忙音信號(hào)。這種情況被看做是一次檢測(cè)。本發(fā)明還能在蜂窩或蜂窩式系統(tǒng)的范圍內(nèi)發(fā)送另一個(gè)電碼號(hào)碼以呼叫相同或不同的中心臺(tái),因而,該中心臺(tái)可發(fā)回一個(gè)1000Hz的精確單音,從而,本發(fā)明的軟件會(huì)比較上述1000Hz的單音與其自身預(yù)定的配置,以便確定線路是否接通以及蜂窩或蜂窩式系統(tǒng)是否在正確地運(yùn)行。這是一種特別有用的系統(tǒng),因?yàn)?,即使最終用戶認(rèn)為電話有問(wèn)題,該系統(tǒng)也能使該用戶使用電話。然后,這種檢測(cè)會(huì)通知電話公司是蜂窩系統(tǒng)的中心局有錯(cuò)還是最終用戶的基本裝置有問(wèn)題。依照本發(fā)明,有兩種不同的組件,第一種是遙測(cè)維護(hù)(telemaintenance)電路,第二種是遙測(cè)計(jì)費(fèi)(teletariff)電路。遙測(cè)維護(hù)電路進(jìn)行將如以下詳細(xì)說(shuō)明的復(fù)合檢測(cè),該復(fù)合檢測(cè)包括對(duì)預(yù)定的號(hào)碼進(jìn)行電話呼叫。遙測(cè)維護(hù)電路將檢測(cè)的結(jié)果報(bào)告給上述特定的號(hào)碼。此外,遙測(cè)維護(hù)電路還能撥叫自己的號(hào)碼以便確認(rèn)所述基本裝置通過(guò)接收忙音信號(hào)而正在進(jìn)行接收和傳輸。用戶按下位于基本裝置一側(cè)的按鈕可以啟動(dòng)上述的成組的檢測(cè)。在按下按鈕時(shí),按鈕附近的LED(發(fā)光二級(jí)管)會(huì)持續(xù)地閃爍以表示檢測(cè)正在進(jìn)行。如果在檢測(cè)結(jié)束時(shí)LED仍繼續(xù)閃亮,這就表示所述的基本裝置有問(wèn)題。上述檢測(cè)活動(dòng)一般最多不超過(guò)40秒鐘。另一方面,如果LED停止閃亮并且關(guān)閉,就表示檢測(cè)成功并且基本裝置在檢測(cè)所檢查的項(xiàng)目方面處于適當(dāng)?shù)墓ぷ鳡顟B(tài)。作為一種可選擇方案,如果傳輸介質(zhì)允許的話(即無(wú)線電收發(fā)機(jī)處于工作狀態(tài)以接收電話號(hào)碼),那么,前述軟件和硬件就能使得用一外部號(hào)碼來(lái)進(jìn)行所說(shuō)的檢測(cè)。第二種電路的功能包括它使用來(lái)自蜂窩或蜂窩式系統(tǒng)的計(jì)費(fèi)信號(hào)并產(chǎn)生用于標(biāo)準(zhǔn)的臺(tái)式電話或付費(fèi)電話的相應(yīng)的計(jì)費(fèi)脈沖。這種設(shè)備判讀來(lái)自蜂窩或蜂窩式的信號(hào)并且不作任何的局內(nèi)計(jì)費(fèi)。這種電路以與產(chǎn)生長(zhǎng)音相類似的方式運(yùn)行,并且可供能發(fā)送計(jì)費(fèi)信號(hào)的任何蜂窩或蜂窩式系統(tǒng)使用。對(duì)遙測(cè)維護(hù)程序組件流程的說(shuō)明用戶可以通過(guò)按下自診斷按鈕而激活檢測(cè)工作程序。當(dāng)被調(diào)用時(shí),按口插板的控制權(quán)被轉(zhuǎn)交給用于進(jìn)行自動(dòng)檢測(cè)的遙測(cè)維護(hù)組件的主自診斷子例程。圖1A和圖1B顯示了DO_TEST例程或主自診斷例程。對(duì)各種檢測(cè)過(guò)程進(jìn)行多次調(diào)用。每一過(guò)程之后都檢查出錯(cuò)標(biāo)識(shí)。在有任何出錯(cuò)的情況下都停止檢測(cè)程序。然后,對(duì)其狀態(tài)進(jìn)行編碼并按如下所述那樣將結(jié)果通過(guò)四個(gè)LED顯示給用戶。參照?qǐng)D1A,在步驟1中,檢測(cè)工作程序以初始化變量和標(biāo)識(shí)開始。在步驟2中,程序調(diào)用Hook_Test子例程。在Hook_Test子例程中,用戶的電話與塞尖和塞環(huán)(TIP及RING)線是斷開的,而遙測(cè)維護(hù)組件(TelemaintenanceModule,以下將予以詳細(xì)說(shuō)明)則在適當(dāng)位置處與諸如美國(guó)專利第4,658,096號(hào)和第4,737,975號(hào)所公開的接口插板相連以準(zhǔn)備進(jìn)行檢測(cè)。步驟3檢查Hook_Test中所檢測(cè)到的任何錯(cuò)誤。如果發(fā)現(xiàn)有任何一種錯(cuò)誤,該檢測(cè)程序就會(huì)停止,程序會(huì)進(jìn)入圖1B中的步驟14。但是,如果未檢測(cè)到錯(cuò)誤,程序就會(huì)在步驟4中調(diào)用Dial_Tone測(cè)試?yán)?。步驟5檢查任何的撥號(hào)者錯(cuò)誤。如果發(fā)現(xiàn)有任何一種錯(cuò)誤,該檢測(cè)程序就會(huì)停止,程序會(huì)進(jìn)入圖1B中的步驟14。但是,如果未檢測(cè)到錯(cuò)誤,程序就會(huì)在步驟6中調(diào)用下一個(gè)檢測(cè)例程即步驟6的DTMF_Test例程。程序在圖1B的步驟7處繼續(xù),在該步驟處,檢查任何一種DTMF_Tone例程。如果發(fā)現(xiàn)有任何一種錯(cuò)誤,該檢測(cè)程序就會(huì)停止,程序會(huì)進(jìn)入步驟14。但是,如果來(lái)檢測(cè)到錯(cuò)誤,程序就會(huì)在步驟8中調(diào)用下一個(gè)檢測(cè)例程即步驟8的Ring_Test例程。步驟9檢查任何的振鈴錯(cuò)誤。如果發(fā)現(xiàn)有任何一種錯(cuò)誤,該檢測(cè)程序就會(huì)停止,程序會(huì)進(jìn)入步驟14。但是,如果未檢測(cè)到錯(cuò)誤,程序就會(huì)在步驟10中調(diào)用下一個(gè)檢測(cè)例程即Ring_Answer_Test例程。步驟11檢查任何的振鈴應(yīng)答錯(cuò)誤。如果發(fā)現(xiàn)有任何的錯(cuò)誤,該檢測(cè)程序就會(huì)停止,程序會(huì)進(jìn)入步驟14。但是,如果未檢測(cè)到錯(cuò)誤,程序就會(huì)在步驟12中調(diào)用下一個(gè)檢測(cè)例程即步驟12中的Make_Call_Test例程。步驟13檢查任何的呼出錯(cuò)誤。如果發(fā)現(xiàn)有任何一種錯(cuò)誤,該檢測(cè)程序就會(huì)停止,程序會(huì)進(jìn)入步驟14。但是,如果未檢測(cè)到錯(cuò)誤,程序就會(huì)在步驟15調(diào)用下一個(gè)檢測(cè)例程即步驟15的Fin_Self_Test例程。如果在執(zhí)行任一子例程的過(guò)程中發(fā)現(xiàn)有任何的錯(cuò)誤,程序就會(huì)轉(zhuǎn)至步驟14。在步驟14中,程序會(huì)調(diào)用Error_Acc例程。最后,檢測(cè)程序在步驟15清除了所有的變量和標(biāo)識(shí)之后結(jié)束,從而將控制權(quán)交還給電話機(jī)并且繼續(xù)接口的正常操作。以下對(duì)圖2至圖9的解釋對(duì)應(yīng)于并且詳細(xì)說(shuō)明了上述各個(gè)檢測(cè)例程。參照?qǐng)D2,Hook_Test例程(圖1A的步驟2)在步驟16處開始于對(duì)變量和標(biāo)識(shí)的初始化。在步驟17中,程序清除LED的任何輸出。在步驟18中,使用戶的電話與接口板的TIP和RING線相斷開,而在步驟19中,本發(fā)明的遙測(cè)維護(hù)組件則替代電話而被連接。步驟20進(jìn)行延時(shí)以便上述連接有足夠的反應(yīng)時(shí)間。在步驟21中,本發(fā)明的遙測(cè)維護(hù)組件模擬并產(chǎn)生摘機(jī)。步驟22進(jìn)行延時(shí)以便有足夠的時(shí)間進(jìn)行上述摘機(jī)。在步驟23中,程序檢查接口插板的叉簧狀態(tài),而接口板則與遙測(cè)維護(hù)組件相連。步驟24對(duì)摘機(jī)進(jìn)行檢測(cè)。如果未檢測(cè)到摘機(jī),則程序進(jìn)入步驟25,在該步驟中設(shè)置ERROR_FLAG并將MATN_FLAG_ERROR置為1。但是,如果未檢測(cè)到錯(cuò)誤,程序就會(huì)進(jìn)入到步驟26,在該步驟中,啟動(dòng)撥號(hào)音以便進(jìn)行圖3所示的下一步檢測(cè)。最后,Hook_Test例程結(jié)束,程序返回至圖1A和圖1B中的主例程DO_Test。參照?qǐng)D3,Dial_Test例程在步驟27處開始于對(duì)變量及標(biāo)識(shí)的初始化。步驟28進(jìn)行延時(shí)以便有足夠的時(shí)間產(chǎn)生撥號(hào)音。步驟29對(duì)撥號(hào)音進(jìn)行檢測(cè)。如果撥號(hào)音出錯(cuò),則程序進(jìn)行步驟30,在步驟30中設(shè)置ERROR_FLAG并將MAIN_FLAG_ERROR置為3。但是,如果未檢測(cè)到錯(cuò)誤,程序就會(huì)進(jìn)入步驟31,在該步驟中,程序循環(huán)返回至步驟29以檢測(cè)撥號(hào)音至少711毫秒。711毫秒結(jié)束后未檢測(cè)到錯(cuò)誤,Dial_test例程結(jié)束,程序返回至圖1A和圖1B的主例程Do_Test。參照?qǐng)D4,用于檢測(cè)接口板將適當(dāng)?shù)腄TMF轉(zhuǎn)換成數(shù)字?jǐn)?shù)據(jù)的DTMF_Test例程通過(guò)關(guān)閉來(lái)自前一個(gè)檢測(cè)例程的撥號(hào)音而在步驟32開始。步驟33將第一個(gè)DTMF音置為0。在步驟34中,遙測(cè)維護(hù)組件送出與上述值相對(duì)應(yīng)的DTMF音。步驟35進(jìn)行延時(shí)以便使上述DTMF音延續(xù)足夠的時(shí)間。步驟36斷開DTMF音。步驟37進(jìn)行延時(shí)以使得接口裝置檢測(cè)DTMF音的脈沖。在步驟38中,接口裝置讀取DTMF音。步驟39檢查所接收到的DTMF音。如果所送出的DTMF音不等于接收到的DTMF音,或者未接收到DTMF音,那么,程序就會(huì)進(jìn)入步驟40,在該步驟中設(shè)置ERROR_FLAG并且將MAIN_FLAG_ERROR置為4。但是,如果上述兩個(gè)DTMF音是相同的,則程序進(jìn)入步驟41并選定下一個(gè)DTMF數(shù)字。在步驟42中,程序檢驗(yàn)是否已檢測(cè)了所有的DTMF音,如果沒(méi)有,則程序循還返回以檢測(cè)下一個(gè)DTMF數(shù)字。最的,在已檢測(cè)了所有的DTMF音之后,DTMF_Test例程結(jié)束,程序返回至圖1A和圖1B中的主例程DO_Test。參照?qǐng)D5A和圖5B,它們顯示了Ring_Test例程。Ring_Test例程檢測(cè)接口插板振鈴電路所產(chǎn)生的振鈴的兩個(gè)脈沖的定時(shí)。參照?qǐng)D5A,Ring_Test例程在步驟43處開始于對(duì)變量和標(biāo)記的初始化。在步驟44中,遙測(cè)維護(hù)組件進(jìn)行一次掛機(jī)。步驟45進(jìn)行延時(shí)以便接口裝置檢測(cè)上述掛機(jī)。在步驟46處,設(shè)置接口裝置以確認(rèn)正在進(jìn)行呼入,所以,該接口板產(chǎn)生振鈴。步驟47至步驟53的目的是驗(yàn)證振鈴開始于以后的兩秒鐘內(nèi)并且未檢測(cè)到摘機(jī)。在步驟47中,將計(jì)時(shí)器清零。步驟48對(duì)摘機(jī)進(jìn)行檢測(cè)。如果檢測(cè)到摘機(jī),則停止檢測(cè),程序轉(zhuǎn)至圖5C中的步驟49以顯示錯(cuò)誤。但是,如果檢測(cè)到掛機(jī),則程序進(jìn)入步驟51,在該步驟中,遙測(cè)維護(hù)組件檢查振鈴的被激勵(lì)。步驟52檢測(cè)振鈴是否已開始。如果已開始振鈴,則程序進(jìn)入圖5B的步驟54。但是,如果尚未開始振鈴,則程序會(huì)在步驟53中檢查計(jì)時(shí)器。如果該計(jì)時(shí)器的時(shí)間小于兩秒,則程序循環(huán)返回步驟48直至振鈴開始。但是,如果上述兩秒鐘的計(jì)時(shí)器已完成計(jì)時(shí),則檢測(cè)就會(huì)停止,程序轉(zhuǎn)至圖5C中的步驟49以指示錯(cuò)誤。參照?qǐng)D5B,步驟54進(jìn)行延時(shí)。步驟55至步驟59的目的是檢驗(yàn)振鈴持續(xù)至少一次,長(zhǎng)度為1.3秒,并且檢驗(yàn)未檢測(cè)到摘機(jī)。在步驟55中,將計(jì)時(shí)器清零。步驟56對(duì)掛機(jī)進(jìn)行檢測(cè)。如果檢測(cè)到摘機(jī),則檢測(cè)停止,程序轉(zhuǎn)至圖5C中的步驟49以指示錯(cuò)誤,但是,如果檢測(cè)到掛機(jī),則程序進(jìn)入步驟57,在該步驟中,遙測(cè)維護(hù)組件檢查被激勵(lì)的振鈴。步驟58檢測(cè)振鈴是否已停止。如果振鈴已停,則程序進(jìn)入圖5B中的步驟49。但是,如果振鈴尚未停止,則程序在步驟59內(nèi)檢查計(jì)時(shí)器。如果計(jì)時(shí)器小于1.3秒,則程序循環(huán)返回至步驟56直至振鈴?fù)V?。但是,如果?jì)時(shí)器完成計(jì)時(shí),則檢測(cè)停止,程序轉(zhuǎn)至圖5C中的步驟49。步驟60至步驟62的目的是檢驗(yàn)振鈴持續(xù)不超過(guò)2.5秒。在步驟60中,遙測(cè)維護(hù)組件檢查振鈴是否是被激勵(lì)的。步驟61檢測(cè)振鈴是否已經(jīng)停止。如果振鈴?fù)V?,則程序轉(zhuǎn)至圖5C中的步驟63。但是,如果振鈴尚未停止,則程序在步驟62中檢查計(jì)時(shí)器。如果計(jì)時(shí)器小于2.5秒,則程序會(huì)循環(huán)返回步驟60直至振鈴?fù)V?。但是,如果?jì)時(shí)器完成了計(jì)時(shí),則檢測(cè)停止,程序轉(zhuǎn)至圖5C中的步驟49。參照?qǐng)D5C,步驟63至步驟65的目的是檢驗(yàn)在兩秒鐘的時(shí)間內(nèi)未檢測(cè)到摘機(jī)。在步驟63中,將計(jì)時(shí)器清零。步驟46對(duì)掛機(jī)進(jìn)行檢測(cè)。如果檢測(cè)到摘機(jī),則檢測(cè)停止,程序在步驟49處繼續(xù)以指示錯(cuò)誤。但是,如果未檢測(cè)到摘機(jī),則程序在步驟65中檢查計(jì)時(shí)器。如果計(jì)時(shí)器小于兩秒,則程序會(huì)循環(huán)返回步驟64直至振鈴開始。但是,如果計(jì)時(shí)器完成了計(jì)時(shí),則程序在步驟66處繼續(xù),在該步驟中,程序檢測(cè)本子例程業(yè)已進(jìn)行了多少次檢測(cè)振鈴循環(huán)。如果只對(duì)振鈴檢測(cè)了一次,則程序在步驟64處繼續(xù),在該步驟中,設(shè)置標(biāo)識(shí)Ring_Second。此后,程序循環(huán)返回至步驟47以便第二次檢測(cè)振鈴。但是,如果已對(duì)振鈴檢測(cè)了兩次,則本例程結(jié)束,程序返回至主例程Do_Test。如果在Ring_Test例程的任何一部分中檢測(cè)到錯(cuò)誤,則程序會(huì)轉(zhuǎn)至步驟49。步驟49清除呼入狀態(tài),所以,振鈴?fù)V?。然后,程序在步驟50處繼續(xù),在該步驟中,設(shè)置ERROR_FLAG并將MAIN_FLAG_ERROR置為5。然后,本例程結(jié)束,程序返回至主例程Do_Test。參照?qǐng)D6,它顯示了Ring_Answer_Test例程。當(dāng)應(yīng)答呼入的電話時(shí),本例程檢測(cè)在振鈴期間將摘機(jī)信號(hào)傳給接口插板時(shí)該接口板的響應(yīng)。步驟68至步驟69的目的是檢驗(yàn)振鈴將在以后的兩秒鐘內(nèi)開始并且未檢測(cè)至摘機(jī)。在步驟68中,將計(jì)時(shí)器清零。步驟69對(duì)掛機(jī)進(jìn)行檢測(cè)。如果檢測(cè)到摘機(jī),則檢測(cè)停止,程序轉(zhuǎn)至步驟73。但是,如果檢測(cè)到掛機(jī),則程序繼續(xù)并且振鈴是處于被激勵(lì)的。步驟71檢測(cè)是否已開始振鈴。如果已開始振鈴,則程序進(jìn)入步驟74。但是,如果尚未開始振鈴,則程序會(huì)在步驟72處檢查計(jì)時(shí)器。如果計(jì)時(shí)器少于兩秒,則程序循環(huán)返回至步驟69以等待振鈴開始。但是,如果上述的兩秒計(jì)時(shí)器已完成了計(jì)時(shí),則檢測(cè)停止,程序轉(zhuǎn)至步驟73。在步驟74中,遙測(cè)維護(hù)組件產(chǎn)生一次摘機(jī)。步驟75進(jìn)行延時(shí)以便使接口板檢測(cè)上述摘機(jī)。在步驟76中,接口板檢查叉簧的狀態(tài)。如果在步驟77中未檢測(cè)到摘機(jī),則檢測(cè)停止,程序轉(zhuǎn)至步驟73。但是,如果接口板檢測(cè)到摘機(jī),則程序在步驟78處繼續(xù)。如果在Ring_Answer_Test例程的任何一部分中檢測(cè)到了錯(cuò)誤,則程序轉(zhuǎn)至步驟73,在該步驟中,設(shè)置ERROR_FLAG并且將MAIN_FLAG_ERROR置為6。然后,程序在步驟78處繼續(xù)。在步驟78中,清除呼入狀態(tài),所以,接口插板會(huì)使振鈴?fù)V?。此后,本例程結(jié)束,程序返回到主例程Do_Test。參照?qǐng)D7A和圖7B,它們顯示了Call_Test例程。該例程按下述方式檢測(cè)與接口板相連的蜂窩或蜂窩式無(wú)線電收發(fā)機(jī)首先檢查電源,然后產(chǎn)生一個(gè)呼叫自身的電話號(hào)碼。參照?qǐng)D7A,步驟79檢查收發(fā)機(jī)的電源是否“接通”,如果電源是“斷開”的,則在步驟81中將MAIN_FLAG_ERROR置為1,然后程序轉(zhuǎn)至圖7B中的步驟93。但是,如果電源是“接通”的,則程序進(jìn)入步驟82,在該步驟中,接口板請(qǐng)求并獲取收發(fā)機(jī)所指定的電話號(hào)碼。步驟83進(jìn)行延時(shí)以提供用于收發(fā)機(jī)的應(yīng)答時(shí)間。在步驟84中,接口板對(duì)自己進(jìn)行電話呼叫。步驟85進(jìn)行延時(shí)以便接通蜂窩或蜂窩式網(wǎng)絡(luò)與無(wú)線電收發(fā)機(jī)。在步驟86中,接口板向收發(fā)機(jī)請(qǐng)求INUSE(使用中)狀態(tài)。步驟87檢查呼叫的狀態(tài)。如果該狀態(tài)不是INUSE,則在步驟88中將MAIN1_FLAG_ERROR置為4,然后程序轉(zhuǎn)至圖7B中的步驟93。但是,如果收發(fā)機(jī)處于INUSE狀態(tài),則程序進(jìn)入圖7B的步驟89。在圖7B中,遙測(cè)維護(hù)組件在步驟89中檢查。如果在步驟90中檢測(cè)到忙音,則程序轉(zhuǎn)至步驟93以指示所有的裝置均在正確運(yùn)行。但是,如果未檢測(cè)到忙音,則程序進(jìn)入步驟91,在該步驟中檢查計(jì)時(shí)器。如果計(jì)時(shí)器少于18.2秒,則程序循環(huán)返回步驟86。這就使蜂窩或蜂窩式網(wǎng)絡(luò)有更多的時(shí)間返回忙時(shí)向應(yīng)。但是,如果計(jì)時(shí)器結(jié)束了計(jì)時(shí),則程序進(jìn)入步驟92,在該步驟中將MAIN_FLAG_ERROR置為3。在步驟93中,接口板向收發(fā)機(jī)發(fā)送一呼叫END(結(jié)束標(biāo)志)。然后,遙測(cè)維護(hù)組件在步驟94中向接口板提供一掛機(jī)信號(hào)。最后,Call_Test例程結(jié)束,程序返回至主例程Do_Test。圖8A和圖8B的目的是以能通過(guò)LED在以后輸出其結(jié)果的方式根據(jù)前述錯(cuò)誤標(biāo)識(shí)來(lái)生成一個(gè)ERROR_CODE。參照?qǐng)D8A,此例程開始于檢查兩個(gè)錯(cuò)誤標(biāo)識(shí)中的一個(gè)即MAIN_FLAG_ERROR。步驟95檢查MAIN_FLAG_ERROR是否等于1或叉簧SLIC錯(cuò)誤(HookSlicError)。如果相等,則在步驟96中將ERROR_CODE置為1,然后程序返回主例程Do_Test。但是,如果不相等,則程序在步驟97處繼續(xù)。步驟97檢查MAIN_FLAG_ERROR是否等于2或叉簧振鈴錯(cuò)誤(Hook_RingError)。如果相等,則在步驟98中將ERROR_CODE置為2,然后程序返回至主例程Do_Test。但是,如果不相等,則程序在步驟99處繼續(xù)。步驟99檢查MAIN_FLAG_ERROR是否等于3或撥號(hào)音錯(cuò)誤(Dial_Tone_Error)。如果相等,則在步驟100中將ERROR_CODE置為3,然后程序返回至主例程Do_Test。但是,如果不相等,則程序在步驟101處繼續(xù)。步驟101檢查MAIN_FLAG_ERROR是否等于4或DIMF單音錯(cuò)誤(DTMFToneError)。如果相等,則在步驟102中將ERROR_CODE置為4,然后程序返回至主例程Do_Test。但是,如果不相等,則程序在步驟103處繼續(xù)。步驟103檢查MAIN_FLAG_ERROR是否等于5或振鈴檢測(cè)錯(cuò)誤(Ring_Detection_Error)。如果相等,則在步驟104中將ERROR_CODE置為5,然后程序返回至主例程Do_Test。但是,如果不相等,則程序在步驟105處繼續(xù)。步驟105檢查MAIN_FLAG_ERROR是否等于6或振鈴應(yīng)答錯(cuò)誤(Ring_Answer_Error)。如果相等,則在步驟106中將ERROR_CODE置為6,然后程序返回主例程Do_Test。如果不相等,則程序轉(zhuǎn)向圖8B的步驟107。在圖8B中,例程開始于檢查第二個(gè)出錯(cuò)標(biāo)識(shí)的值即MAIN1_FLAG_ERROR。步驟107檢查MAIN1_FLAG_ERROR是否等于1,或功率射頻錯(cuò)誤(Power_RadioError)。如果相等,則在步驟108中將ERROR_CODE置為7,然后程序返回至主例程DoTest。但是,如果不相等,則程序在步驟109處繼續(xù)。步驟109檢查MAIN1_FLAG_ERROR是否等于2或乎叫錯(cuò)誤(CallError)。如果相等,則在步驟10中將ERROR_CODE置為8,然后程序返回至主例程Do_Test。但是,如果不相等,則程序在步驟111處繼續(xù)。步驟111檢查MAIN1_FLAG_ERROR是否等于3或忙音錯(cuò)誤(Busy_ToneError)。如果相等,則在步驟123中將ERROR_CODE置為9,然后程序返回至主例程Do_Test。但是,如果不相等,程序就在步驟113處繼續(xù)。步驟113檢查MAIN1_FLAG_ERROR是否等于4或“使用中”錯(cuò)誤(“InUse”Error)。如果相等,則在步驟114中將ERROR_CODE置為10,然后程序返回至主例程Do_Test。如果不相等,程序就會(huì)在步驟115處繼續(xù)。步驟115檢查MAIN1_FLAG_ERROR是否等于5或1000Hz錯(cuò)誤(1000HzError)。如果相等,則在步驟116中將ERROR_CODE置為11,然后程序返回至主例程Do_Test。如果不相等,程序就會(huì)返回至主例程Do_Test。參照?qǐng)D9的FIN_SELF例程,該例程的目的是將接口板重置為正常的功能并通過(guò)使LED閃亮四次而表示檢測(cè)結(jié)束。FIN_SELF例程始于步驟117,在該步驟中,遙測(cè)維護(hù)組件產(chǎn)生一次掛機(jī)。在步驟118中,將所有的變量和錯(cuò)誤標(biāo)識(shí)均清零。步驟119關(guān)掉所有的LED。步驟120進(jìn)行延時(shí)。步驟121接通所有的LED。步驟122進(jìn)行延時(shí)。步驟123循還返回步驟119從而使LED閃亮四次。最后,步驟124關(guān)掉所有的LED,然后程序返回至圖1A和圖1B的主例程Do_Test。以下說(shuō)明本發(fā)明的操作情況,然后說(shuō)明用于進(jìn)行上述自檢測(cè)的各個(gè)電路,再說(shuō)明用于進(jìn)行本文所述之操作的軟件程序。參照?qǐng)D10,它顯示了遙測(cè)維護(hù)電路組件的框圖,該組件總的用標(biāo)號(hào)10表示。遙測(cè)維護(hù)電路組件10安裝在諸如美國(guó)專利第4,658,096號(hào)和第4,737,975號(hào)所公開的蜂窩或蜂窩式適配器系統(tǒng)內(nèi),并被設(shè)計(jì)成能根據(jù)按鈕的啟動(dòng)或根據(jù)每隔約12小時(shí)的自動(dòng)檢測(cè)而從電話用戶的設(shè)備開始執(zhí)行上述圖1A至圖9中流程圖詳細(xì)說(shuō)明的自動(dòng)檢測(cè)。自檢測(cè)的最終結(jié)果通過(guò)安裝在蜂窩或蜂窩式適配器右側(cè)壁面上的橙黃色發(fā)光器(LED)提供給用戶。遙測(cè)維護(hù)電路組件10能將檢測(cè)的結(jié)果報(bào)告給遠(yuǎn)距離服務(wù)中心。這種報(bào)告是通過(guò)自動(dòng)呼叫預(yù)定的服務(wù)中心號(hào)碼而實(shí)現(xiàn)的。這一功能要求服務(wù)中心配備有進(jìn)行通信所需的硬件和軟件并能判讀接收到的報(bào)告。本發(fā)明的自診斷檢測(cè)能檢驗(yàn)蜂窩或蜂窩式適配器,包括其組件如接口卡的基本電路、無(wú)線電臺(tái)設(shè)備與接口間的數(shù)據(jù)電纜、傳輸線、天線、蜂窩或蜂窩式無(wú)線電收發(fā)機(jī)、計(jì)費(fèi)電路以及電源等的正確操作。遙測(cè)維護(hù)電路被配置成能夠呼叫分配給正在進(jìn)行檢測(cè)的適配器收發(fā)機(jī)的相同號(hào)碼。對(duì)自診斷電路編程以便將忙音和占線信號(hào)作為表示可以進(jìn)行通話且傳輸電路正在正確運(yùn)轉(zhuǎn)的信號(hào)而加以檢測(cè)。遙測(cè)維護(hù)電路組件10設(shè)計(jì)成能在蜂窩或蜂窩式適配器裝置中使用,以便在無(wú)需使技術(shù)人員到安裝有設(shè)備的現(xiàn)場(chǎng)的情況下檢驗(yàn)適配器裝置是否在正確地運(yùn)轉(zhuǎn)。所說(shuō)的蜂窩或蜂窩式接口板能直接地提供遙測(cè)維護(hù)電路組件10。高級(jí)的遙測(cè)維護(hù)電路不是自激電路(autonomousCircuit)。其操作取決于從蜂窩或蜂窩式接口板內(nèi)的審查程序(auditor)中所接收的控制信號(hào)。審查程序?qū)z測(cè)的結(jié)果與系統(tǒng)運(yùn)行程序的參數(shù)作比較。遙測(cè)維護(hù)電路組件10的自診斷電路進(jìn)行下列檢測(cè)應(yīng)答錯(cuò)〔錯(cuò)誤號(hào)〕,用兩種可替代的方法來(lái)進(jìn)行上述檢測(cè);振鈴電壓,自診斷電路進(jìn)行一次呼叫并檢測(cè)接口插板所產(chǎn)生的振鈴電壓的出現(xiàn);呼叫應(yīng)答,驗(yàn)證一旦進(jìn)行了應(yīng)答就使振鈴?fù)V?;撥?hào)音,驗(yàn)證撥號(hào)音的出現(xiàn);MFTO操作,確保接口插板能適當(dāng)?shù)貦z測(cè)收到的MFTO(多頻率聲音檢測(cè)器)單音;無(wú)線電收發(fā)機(jī)檢測(cè);接收電路檢測(cè);傳輸電路檢測(cè);計(jì)費(fèi)電路檢測(cè),驗(yàn)證以12KHz產(chǎn)生的脈沖的頻率特征;收發(fā)機(jī)電源;電源系統(tǒng)的性能。在對(duì)圖1A至圖9的說(shuō)明中已詳細(xì)敘述了這些檢測(cè)活動(dòng)。遙測(cè)維護(hù)電路組件10可通過(guò)一具有20個(gè)位置的插接式連接器而與通常的蜂窩或蜂窩式接口插板相連。通過(guò)一安裝在適配器箱右側(cè)的手動(dòng)開關(guān)可以啟動(dòng)檢測(cè)例程。當(dāng)發(fā)現(xiàn)電話操作不正常時(shí),例如拿起聽筒時(shí)聽不到撥號(hào)音,用戶可轉(zhuǎn)向適配器箱并按下被適當(dāng)標(biāo)識(shí)的檢測(cè)鈕。遙測(cè)維護(hù)電路組件10會(huì)斷開用戶電話與蜂窩或蜂窩式接口插板的聯(lián)系并進(jìn)行一系列如前所述的自診斷檢測(cè)。還對(duì)遙測(cè)維護(hù)電路組件10進(jìn)行編程以便從接通蜂窩或蜂窩式接口插板開始每隔約12小時(shí)就自動(dòng)地啟動(dòng)檢測(cè)例程。在自動(dòng)啟動(dòng)檢測(cè)時(shí),并不產(chǎn)生檢測(cè)呼出的程序。通過(guò)進(jìn)一步的研制開發(fā),可從遙控中心激活自診斷檢測(cè)的啟動(dòng)功能。遙測(cè)維護(hù)功能可對(duì)接口插板的正在運(yùn)行的軟件進(jìn)行調(diào)整并可對(duì)遙測(cè)維護(hù)中心的硬件和軟件進(jìn)行輔助開發(fā)。啟動(dòng)自檢測(cè)例程時(shí),橙黃色發(fā)光指示器(LED)會(huì)閃亮以告知用戶正在進(jìn)行檢測(cè)。維護(hù)電路每完成一種檢測(cè),指示器的閃亮就暫停約一秒鐘。全部的檢測(cè)約持續(xù)40秒鐘。結(jié)束檢測(cè)時(shí),發(fā)光指示器保持發(fā)光以表示檢測(cè)成功。在這種情況下,存在的問(wèn)題可能涉及到線路或者是與蜂窩或蜂窩式接口插板相連的電話設(shè)備。只要發(fā)光指示器連續(xù)地發(fā)光,則蜂窩或蜂窩式接口插板就會(huì)返回至正常的操作狀態(tài)。當(dāng)通過(guò)檢測(cè)而發(fā)現(xiàn)蜂窩或蜂窩式接口插板有故障時(shí),發(fā)光指示器會(huì)長(zhǎng)時(shí)間地熄火。這告知用戶蜂窩或蜂窩式適配器內(nèi)存在問(wèn)題。一旦檢測(cè)例程結(jié)束,蜂窩或蜂窩式接口插板就會(huì)在與所檢測(cè)到的故障無(wú)關(guān)的情況下返回至正常操作狀態(tài)。盡管檢測(cè)到的故障會(huì)引起限制,但用戶仍可以繼續(xù)使用適配器。蜂窩或蜂窩式接口插板的電路中使用了四個(gè)發(fā)光指示器(LED)以便標(biāo)識(shí)檢測(cè)到的故障。這種方法對(duì)能接近適配器箱內(nèi)部以確認(rèn)可能的故障特性的維修技術(shù)人員來(lái)說(shuō)是有幫助的。“開”、“關(guān)”LED的組合可以表示檢測(cè)中所檢測(cè)到的主要故障。一旦檢測(cè)結(jié)束,這種組合將保持發(fā)光60秒。以下給出了用蜂窩或蜂窩式接口插板的LED所表示的可能的故障代碼表。在完成了自檢測(cè)時(shí),如果已檢測(cè)到了故障,則對(duì)遙測(cè)維護(hù)中心發(fā)起呼叫。一旦建立起了聯(lián)系,就報(bào)告所檢測(cè)到的故障。這種遙測(cè)功能將為每一個(gè)裝置都建立一個(gè)數(shù)據(jù)庫(kù)。如果是通過(guò)按鈕而人工啟動(dòng)檢測(cè),則不管是否檢測(cè)到了故障,所完成的檢測(cè)的全部結(jié)果均會(huì)報(bào)告給遙測(cè)維護(hù)中心。以下是LED組所顯示的代碼表錯(cuò)誤類型LED5LED4LED3LED2無(wú)故障關(guān)關(guān)關(guān)關(guān)循環(huán)錯(cuò)關(guān)關(guān)關(guān)開循環(huán)錯(cuò)關(guān)關(guān)開關(guān)撥號(hào)音關(guān)關(guān)開開MFTD檢測(cè)器關(guān)開關(guān)關(guān)振鈴檢測(cè)器關(guān)開開開呼叫應(yīng)答關(guān)開開關(guān)收發(fā)機(jī)饋送關(guān)開開開發(fā)送器(呼叫)開關(guān)關(guān)開聽筒(占用)開關(guān)關(guān)關(guān)以12KHz的單音檢測(cè)開關(guān)開開來(lái)自電源的饋送開關(guān)開關(guān)“NOSERVICE”開開開開傳輸電路開開開關(guān)不確定開開關(guān)開不確定開開關(guān)關(guān)自檢測(cè)的順序如下。遙測(cè)維護(hù)電路所進(jìn)行的第一項(xiàng)工作是斷開用戶的設(shè)備。然后模擬“應(yīng)答用戶的電話”的狀態(tài)。在這種狀態(tài)下,可以檢查對(duì)循環(huán)閉合的正確檢測(cè),從而產(chǎn)生撥號(hào)音。然后,在最小的頻率和強(qiáng)度范圍內(nèi)確認(rèn)正確地產(chǎn)生了撥號(hào)音。再次,開始對(duì)MFTD的復(fù)合頻率音檢測(cè)器進(jìn)行檢測(cè)。這包括遙測(cè)維護(hù)電路組件的自診斷插卡產(chǎn)生完全連續(xù)的16種MFTD單音、將該單音發(fā)送給蜂窩或蜂窩式適配器的通常的蜂窩或蜂窩式接口插板并且確認(rèn)已正確地檢測(cè)到了這些聲音。隨后,進(jìn)行檢測(cè)以確認(rèn)振鈴發(fā)生器正在正確地起作用。產(chǎn)生振鈴電流以便在預(yù)定的最小范圍確認(rèn)其頻率和強(qiáng)度。然后。再次模擬應(yīng)答電話或呼叫應(yīng)答的狀態(tài)以便檢查振鈴電路的功能(振鈴電路在應(yīng)答電話之前應(yīng)是停用的)。就蜂窩或蜂窩式適配器付費(fèi)電話而言,隨后的檢測(cè)將檢查計(jì)費(fèi)電路的容量以在最小的頻率和強(qiáng)度范圍按12KHz產(chǎn)生脈沖。遙測(cè)維護(hù)電路組件10內(nèi)的精密脈沖檢測(cè)器以周知的方式檢測(cè)計(jì)費(fèi)插卡所產(chǎn)生的上述脈沖。對(duì)不帶有計(jì)費(fèi)組件的蜂窩或蜂窩式適配器系統(tǒng)來(lái)說(shuō),用分離的跨接線形成蜂窩或蜂窩式接口插板的連接器J1.3。而跨接線則安裝在帶有計(jì)費(fèi)組件的裝置內(nèi)。以后的檢測(cè)是驗(yàn)證蜂窩或蜂窩式收發(fā)機(jī)的功能。首先,檢驗(yàn)對(duì)收發(fā)機(jī)的供電情況。這項(xiàng)檢測(cè)是通過(guò)檢查來(lái)自收發(fā)機(jī)的數(shù)據(jù)連接器的+12VDC(+12V直流電壓)而進(jìn)行的。第二,檢驗(yàn)收發(fā)機(jī)以使得它處于能進(jìn)行蜂窩或蜂窩式接入服務(wù)的狀態(tài)。這種狀態(tài)是由不存在“NOSERVICE”信號(hào)來(lái)表示的。“NOSERVICE”信號(hào)的出現(xiàn)被認(rèn)為是一種故障。這種情況可能是由覆蓋故障引起的,而不僅僅是蜂窩或蜂窩式收發(fā)機(jī)的故障。然后,通過(guò)蜂窩或蜂窩式網(wǎng)絡(luò)呼叫用戶所擁有的號(hào)碼。由于收發(fā)機(jī)正在呼叫自身,所以,按這樣的方式檢查收發(fā)機(jī)的功能,即在從系統(tǒng)中接收到忙音信號(hào)的情況下對(duì)收發(fā)機(jī)進(jìn)行檢測(cè)。在發(fā)現(xiàn)網(wǎng)絡(luò)被占用的情況下,就將“PATHENGAGED”狀態(tài)報(bào)告給收發(fā)機(jī)。然后,收發(fā)機(jī)產(chǎn)生一占線(忙)音。正常的收發(fā)機(jī)功能將這種聲音看做與忙音信號(hào)相同。只有在用按鈕啟動(dòng)前述例程時(shí)才進(jìn)行上述檢測(cè)。在自動(dòng)啟動(dòng)前述過(guò)程的組件中不進(jìn)行上述檢測(cè)。還檢查系統(tǒng)電源的電壓。如果電壓小于13.5VDC,則會(huì)檢測(cè)到該電源中的故障。在圖10中,主遙測(cè)維護(hù)組件10與標(biāo)準(zhǔn)的蜂窩或蜂窩式適配器或接口插板14相連。該遙測(cè)維護(hù)組件內(nèi)有多個(gè)用于進(jìn)行上述自我診斷檢測(cè)的獨(dú)立電路。這些電路是忙音信號(hào)檢測(cè)器16,此檢測(cè)器在對(duì)適當(dāng)?shù)亟邮盏暮艚羞M(jìn)行檢測(cè)時(shí)使用,而所說(shuō)的呼叫則是由遙測(cè)維護(hù)組件在參照?qǐng)D7A所述的回叫自檢測(cè)期間進(jìn)行;12,000次循環(huán)檢測(cè)器電路18,此電路用于計(jì)費(fèi)檢測(cè),它檢驗(yàn)以12KHz所產(chǎn)生的脈沖的頻率特征;MFTD發(fā)生器電路20,此電路產(chǎn)生由蜂窩或蜂窩式接口插卡所轉(zhuǎn)換的DTMF信號(hào),如以上參照?qǐng)D4所述;振鈴信號(hào)檢測(cè)器電路22,此電路用于在振鈴檢測(cè)和振鈴應(yīng)答例程中檢測(cè)由蜂窩或蜂窩式適配器接口插板所產(chǎn)生的振鈴信號(hào),如以上參照?qǐng)D5A至圖6所述;撥號(hào)者檢測(cè)器電路24,此電路檢測(cè)由蜂窩或蜂窩式適配器接口板14所適當(dāng)產(chǎn)生的撥號(hào)音,如以上參照?qǐng)D3所示;電壓檢測(cè)器電路28,此電路用于檢測(cè)收發(fā)機(jī)和整個(gè)系統(tǒng)的電源;以及遙測(cè)維護(hù)控制器30,此遙測(cè)維護(hù)控制器是控制單元并用于呼叫并將自檢測(cè)的結(jié)果并報(bào)告給中心報(bào)告臺(tái)。圖11至圖14顯示了上述每個(gè)電路的實(shí)際結(jié)構(gòu),以下對(duì)每個(gè)電路的結(jié)構(gòu)予以詳細(xì)說(shuō)明。參照?qǐng)D11至圖14,它們顯示了用于在整個(gè)自檢測(cè)過(guò)程中進(jìn)行上述模擬檢測(cè)的硬件電路。參照?qǐng)D11,它顯示了遙測(cè)維護(hù)電路組件10的互連電路。圖11中標(biāo)號(hào)為“A”的部分顯示了遙測(cè)維護(hù)電路與通常的蜂窩或蜂窩式適配器接口插板的塞尖及塞環(huán)(TIP及RING)線相連接的位置。標(biāo)號(hào)為“繼電器1”(“RELY1”)的繼電器用于在維護(hù)操作檢測(cè)時(shí)斷開用戶電話與蜂窩或蜂窩式接口的聯(lián)系。相反,遙測(cè)維護(hù)電路也可在該繼電器處連接于塞尖和塞環(huán)以便進(jìn)行所說(shuō)的檢測(cè)。當(dāng)把“ENABLE_TEST”信號(hào)置為HI時(shí),晶體管Q3被迫進(jìn)入飽和狀態(tài)并激勵(lì)繼電器1,從而將維護(hù)電路連接于塞尖和塞環(huán)。圖11中標(biāo)號(hào)為“B”的部分顯示了用戶電話的掛機(jī)連接器,在該部分中,用戶電話可以按兩種可能的方式掛接于接口插板。J1是通常RJ11電話插座P1的雙端頭式連接器。圖11中標(biāo)號(hào)為“C”的部分是音頻接口電路,此電路用作塞尖和塞環(huán)線與音頻之間的接口。T1是電話匹配用變壓器。其功能是在接收和傳輸音頻信號(hào)時(shí)保持電話的相類似的交流與直流電流特征。齊納二級(jí)管D1和D2用于在電壓高于±4.5V時(shí)截除任何的信號(hào)。還包括有一光隔離器(opto-isolator)SSR1,此器件連同晶體管Q4提供了用于閉合塞尖和塞環(huán)電路的機(jī)制。在把“Conn_Loop”信號(hào)置為HI時(shí),晶體管Q4被迫進(jìn)入飽和狀態(tài),然后啟動(dòng)SSR1從而閉合上述電路并且掛機(jī)。圖11中標(biāo)號(hào)為“D”的部分是振鈴檢測(cè)電路,該電路包括兩個(gè)主要的部分振鈴檢測(cè)器集成電路U2,以及帶有光隔離器的U9,所說(shuō)的光隔離器提供適當(dāng)?shù)腃MOS信號(hào)電平輸出。當(dāng)塞尖和塞環(huán)線上出現(xiàn)振鈴電壓時(shí),U2的接頭4與接頭7之間會(huì)產(chǎn)生用作輸出信號(hào)的電流。光隔離器U9對(duì)上述電流進(jìn)行變換,然后將一個(gè)有效的LOW信號(hào)提供給I/O。圖11中標(biāo)號(hào)為“E”的部分顯示了環(huán)路電流檢測(cè)器,該檢測(cè)器包括一用于所檢測(cè)到的環(huán)路電流的光隔離器。當(dāng)檢測(cè)被起動(dòng)(在A部分中“Enable_Test”信號(hào)為HI)并且正在進(jìn)行摘機(jī)(在C部分中“Conn_Loop”信號(hào)為HI)時(shí),塞尖和塞環(huán)線成為閉合電路以便提供摘機(jī)電流。U17將摘機(jī)電流轉(zhuǎn)換成提供給I/O的有效的Low信號(hào)。圖11中標(biāo)號(hào)為“F”的部分是輸入-輸出音頻電路,該電路包括U1的1/4以及一個(gè)運(yùn)算放大器集成電路。上述電路的主要功能是隔離并預(yù)先放大呼入的音頻信號(hào)。這一電路的輸出稱為“音頻-入”(“Audio-In”)。而且,在這一部分中將本發(fā)明的遙測(cè)維護(hù)電路所產(chǎn)生的DTMF輸出送至塞尖和塞環(huán)線。DTMF信號(hào)被標(biāo)記為“單音-出”(“Tone-Out”)。參照?qǐng)D12,標(biāo)號(hào)為“G”的部分是DTMF音發(fā)生器,它包括一個(gè)DTMF音發(fā)生器U4以及用作輸出放大器的U1的1/4。為了能產(chǎn)生DTMF單音,首先將一個(gè)四位的代碼提供給U4中標(biāo)號(hào)為“DTMF0-OUT”、“DTMF1-OUT”、“DTMF2-OUT”和“DTMF4-OUT”的輸入接頭。其次,在保持上述四位代碼的同時(shí)將標(biāo)號(hào)為“DTMF-OUT”的啟動(dòng)信號(hào)從Low電平轉(zhuǎn)換為HI電平,從而能產(chǎn)生DTMF單音。在按U∶C而放大了音頻之后,將音頻在“單音-出”(“TONE-OUT”)處輸出。為了使DTMF單音停止,使“DTMF-OUT”信號(hào)返回至低電平即可。圖12中標(biāo)號(hào)為“H”的部分是輸入/輸出端口,即標(biāo)號(hào)為U8的I/O端口集成電路。蜂窩或蜂窩式接口插板的微控制器使用這一集成電路去讀取輸入的數(shù)據(jù)并控制遙測(cè)維護(hù)組件的所有輸出。端口A和C均為輸入口,而端口B則為輸出口。轉(zhuǎn)接器J4是一個(gè)選擇器,它用于按可選擇的12或24小時(shí)來(lái)進(jìn)行的自動(dòng)定期檢測(cè)。J5用于使對(duì)“自動(dòng)應(yīng)答”的呼叫啟動(dòng)。圖12中標(biāo)號(hào)為“I.1”和“I.2”的部分是電源、數(shù)據(jù)以及控制連接器并且包括一個(gè)2×10的凸頭連接器,該連接器用于導(dǎo)電以及向I/O端口發(fā)送或接收數(shù)據(jù)。上述部分還包括一個(gè)接頭連接器,它用于顯示檢測(cè)狀態(tài)的外部LED;以及一個(gè)外部按鈕,用此按鈕可手工地啟動(dòng)所說(shuō)的檢測(cè)。圖12中標(biāo)號(hào)為“J”的部分是穩(wěn)壓器,并且?guī)в幸?V的固定正壓穩(wěn)壓器,該穩(wěn)壓器向前述數(shù)字電路提供所需的電壓。遙測(cè)維護(hù)組件10包括六個(gè)單個(gè)的單音檢測(cè)器,它們用于檢測(cè)正在接收的ROH音、撥號(hào)音、忙音及占線音的音頻路徑、頻率和定時(shí)韻調(diào)(timingcadence)。每個(gè)單音檢測(cè)器均包括一運(yùn)算放大器以及一單個(gè)的單音檢測(cè)器集成電路。運(yùn)算放大器的輸入端與“音頻-入”線相連。位于接頭5與6之間的晶體管以及接頭6與地線之間的電容可調(diào)節(jié)檢測(cè)頻率。當(dāng)一個(gè)真實(shí)的單音與由RC所規(guī)定的單音相匹配時(shí),就使得單音檢測(cè)器的輸出接頭從HI轉(zhuǎn)換成Low。圖12中標(biāo)號(hào)為“k”的部分顯示了撥號(hào)音檢測(cè)器電路。當(dāng)在U3的輸入端出現(xiàn)真實(shí)的撥號(hào)音時(shí),“撥號(hào)-檢測(cè)”(“DIAL-DETECT”)線變?yōu)長(zhǎng)ow。圖12中標(biāo)號(hào)為“L”的部分顯示了忙音檢測(cè)器電路。當(dāng)在U6的輸入端出現(xiàn)真實(shí)的忙音時(shí),“BUSY-DETECT”線變?yōu)長(zhǎng)ow。圖13中標(biāo)號(hào)為“M”的部分顯示了一個(gè)400Hz單音檢測(cè)電路。當(dāng)在U14的輸入端出現(xiàn)真實(shí)的400Hz的單音時(shí),“400-DETECT”線變?yōu)長(zhǎng)ow。圖14中標(biāo)號(hào)為“N”的部分顯示了一個(gè)800Hz單音檢測(cè)電路。當(dāng)在U13的輸入端出現(xiàn)真實(shí)的800Hz的單音時(shí),“800-檢測(cè)”(“800-DETECT”)線變?yōu)長(zhǎng)ow。標(biāo)號(hào)為“0”的部分顯示了一個(gè)1020Hz聲音檢測(cè)器電路。當(dāng)在U16的輸入端出現(xiàn)真實(shí)的1020Hz的單音時(shí),“1020-檢測(cè)”(“1020-DETECT”)線變?yōu)長(zhǎng)ow。標(biāo)號(hào)為“P”的部分顯示了一個(gè)12KHz的單音檢測(cè)器電路。當(dāng)在U12的輸入端出現(xiàn)真實(shí)的12KHz的單音時(shí),“12KHz-檢測(cè)”(“12Hz-DETECT”)線變?yōu)長(zhǎng)ow。圖13中標(biāo)號(hào)為“Q”的部分顯示了一個(gè)DTMF單音解碼器,它包括一個(gè)DTMF單音檢測(cè)器U11以及用作輸入預(yù)放大器的U1的1/4。當(dāng)在輸入接頭(IN-)處出現(xiàn)真實(shí)的DTMF單音時(shí),控制線“DTMF-選通”(“DTMF-STROBE”)變?yōu)長(zhǎng)ow,同時(shí)集成電路進(jìn)行解碼。在對(duì)單音進(jìn)行解碼之后,將四位代碼輸出給U11中標(biāo)號(hào)為“DTMF0-IN”、“DTMF1-IN”、“DTMF2-IN”以及“DTMF4-IN”的接頭。然后,控制線“DTMF-選通”再次恢復(fù)成HI。標(biāo)號(hào)為“R”的部分是一個(gè)交流監(jiān)控器,它帶有一個(gè)4.5V的欠壓檢測(cè)器U10。電阻R17和R33構(gòu)成了一分壓器,此分壓器可使U10感知13V以下的電壓而不是4.5V的電壓。該電路在這樣的前提下進(jìn)行工作當(dāng)電壓來(lái)自電源時(shí),在遙測(cè)維護(hù)電路組件的輸入端存在有14V的電壓。在交流電源出現(xiàn)故障的情況下,該電壓會(huì)降至不超過(guò)13V的后備電池的電平。所說(shuō)的電路會(huì)檢測(cè)到這種電壓降落,并且,U10會(huì)使標(biāo)號(hào)“AC-檢測(cè)”(“AC-DETECT”)的線路變?yōu)長(zhǎng)ow。以下是實(shí)現(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?。籦ebaudrategen  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??;notoff-hookdeterror  jmphook_errordetected_hook   clrex0;Disableoffhookinttildialtoneto ??;preventdialingduetobounce  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 ??;dialtonefail  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 ?。籹econdloop  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 ??;atthispoint-donotuseanytru ?。籹pecificfunctionwhichrelieson ??;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 ??;avalidnumber;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  ;digitsfromTRUmemoryincase ??;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  ;assemblingthepulsedialdigitcompleted,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  ;timeof250msec)  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??;ontheMotorolaunnecessarily.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 ??;andpbxtoseeitasdisconnect. ??;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 ?。籵ff  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 ?。籱slongerthanringpstosmoothout ??;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, ?。籥lsopreventaudiofeedback  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 ??;pulses  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  ;againtoforceringtriptiming_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 ??;prioritylevel  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 ?。籵rringpwmisrunningatanygiven ?。籺ime  incdptr;Pointtonexttableentryfornext ??;timepea_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 ?。籺ime  incdptr;Pointtonexttableentryfornext ?。籺imepca_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.一種蜂窩或蜂窩式無(wú)線電收發(fā)機(jī)設(shè)備,它包括蜂窩或蜂窩式無(wú)線電收發(fā)機(jī);蜂窩或蜂窩式接口裝置以及標(biāo)準(zhǔn)陸用電話機(jī),該電話機(jī)與蜂窩或蜂窩式無(wú)線電收發(fā)機(jī)相連,所說(shuō)的接口裝置將DTMF或脈沖型撥號(hào)信號(hào)轉(zhuǎn)換為數(shù)字格式以便發(fā)送給蜂窩或蜂窩式無(wú)線電接收機(jī),從而,可以用在陸用電話機(jī)上所撥出的號(hào)碼去呼叫蜂窩或蜂窩式系統(tǒng)范圍內(nèi)的號(hào)碼,所述蜂窩或蜂窩式無(wú)線電收發(fā)機(jī)設(shè)備的特征在于包括自診斷裝置,它用于監(jiān)控和報(bào)告前述蜂窩或蜂窩式無(wú)線電收發(fā)機(jī)以及蜂窩或蜂窩式接口裝置的適當(dāng)功能;用于將自診斷裝置交替地連接于蜂窩或蜂窩式接口裝置的裝置;上述用于將自診斷裝置交替地連接的裝置包括這樣的裝置,它用于在自診斷裝置連接于蜂窩或蜂窩式接口裝置時(shí)斷開標(biāo)準(zhǔn)的陸用電話機(jī)與蜂窩或蜂窩式接口裝置的聯(lián)系;上述自診斷裝置包括這樣的裝置,它用于模擬標(biāo)準(zhǔn)陸用電話機(jī)的功能以便在蜂窩或蜂窩式接口裝置內(nèi)產(chǎn)生各種相應(yīng)的應(yīng)答,從而確定該接口裝置是否在正常運(yùn)轉(zhuǎn)。2.如權(quán)利要求1所述的蜂窩式無(wú)線電收發(fā)機(jī)設(shè)備,其特征在于,用于模擬標(biāo)準(zhǔn)陸用電話機(jī)功能的裝置包括這樣的裝置,它用于向蜂窩或蜂窩式接口裝置產(chǎn)生一個(gè)摘機(jī)信號(hào)。3.如權(quán)利要求2所述的蜂窩式無(wú)線電收發(fā)機(jī)設(shè)備,其特征在于,自診斷裝置包括這樣的裝置,它用于檢測(cè)前述接口裝置響應(yīng)所生成的摘機(jī)信號(hào)而產(chǎn)生的撥號(hào)音信號(hào)是否出現(xiàn)。4.如權(quán)利要求1所述的蜂窩式無(wú)線電收發(fā)機(jī)設(shè)備,其特征在于,用于模擬標(biāo)準(zhǔn)陸用電話機(jī)功能的裝置包括這樣的裝置,它用于生成一個(gè)DTMF信號(hào)并將該信號(hào)傳送給前述接口裝置。5.如權(quán)利要求4所述的蜂窩式無(wú)線電收發(fā)機(jī)設(shè)備,其特征在于,自診斷裝置包括這樣的裝置,它用于檢測(cè)前述接口裝置因響應(yīng)生成DTMF信號(hào)的裝置所生成的DTMF信號(hào)而輸出的DTMF信號(hào)。6.如權(quán)利要求1所述的蜂窩式無(wú)線電收發(fā)機(jī)設(shè)備,其特征在于,用于模擬標(biāo)準(zhǔn)陸用電話機(jī)功能的裝置包括這樣的裝置,它用于向前述接口裝置生成一個(gè)掛機(jī)信號(hào)。7.如權(quán)利要求6所述的蜂窩式無(wú)線電收發(fā)機(jī)設(shè)備,其特征在于,自診斷裝置包括這樣的裝置,它用于模擬對(duì)收發(fā)機(jī)所進(jìn)行的電話呼入,以便使前述接口裝置啟動(dòng)自身的振鈴發(fā)生器;該自診斷裝置還包括用于檢測(cè)由此產(chǎn)生的振鈴信號(hào)的裝置。8.如權(quán)利要求7所述的蜂窩式無(wú)線電收發(fā)機(jī)設(shè)備,其特征在于,用于模擬標(biāo)準(zhǔn)陸用電話機(jī)功能的裝置包括這樣的裝置,它用于在前述接口裝置正在產(chǎn)生振鈴信號(hào)時(shí)向該接口裝置產(chǎn)生一個(gè)摘機(jī)信號(hào),以便確定接口裝置在應(yīng)答電話呼入時(shí)適時(shí)地?cái)嚅_振鈴信號(hào)。9.如權(quán)利要求1所述的蜂窩式無(wú)線電收發(fā)機(jī)設(shè)備,其特征在于,自診斷裝置包括這樣的裝置,它用于通過(guò)前述接口裝置和收發(fā)機(jī)以及電話系統(tǒng)產(chǎn)生一電話呼出并送回給該無(wú)線電收發(fā)機(jī);上述自診斷裝置還包括這樣的裝置,它用于檢測(cè)前述收發(fā)機(jī)因響應(yīng)上述電話呼叫而產(chǎn)生的忙音信號(hào);上述用于產(chǎn)生電話呼出的裝置呼叫業(yè)已分配給上述收發(fā)機(jī)并與該收發(fā)機(jī)實(shí)際相聯(lián)的電話號(hào)碼。10.一種檢測(cè)設(shè)備,它用于檢測(cè)蜂窩或蜂窩式接口裝置的適當(dāng)操作,所說(shuō)的接口裝置能與陸用電話或電話式設(shè)施相連,并且能將來(lái)自與之相連的陸用電話設(shè)施的DTMF信號(hào)或脈沖式撥號(hào)信號(hào)轉(zhuǎn)換成數(shù)字?jǐn)?shù)據(jù)格式以便將該數(shù)字?jǐn)?shù)據(jù)傳送給前述收發(fā)機(jī),所說(shuō)的檢測(cè)設(shè)備包括診斷裝置,它用于監(jiān)控和報(bào)告前述接口裝置的適當(dāng)功能。11.如權(quán)利要求10所述的檢測(cè)設(shè)備,其特征在于,該檢測(cè)設(shè)備還包括用于將診斷裝置交替地連接于前述接口裝置的裝置;所說(shuō)的診斷裝置包括這樣的裝置,它用于模擬標(biāo)準(zhǔn)陸用電話的功能以便在前述接口裝置內(nèi)產(chǎn)生各種相應(yīng)的應(yīng)答,從而確定接口裝置是否在正常運(yùn)轉(zhuǎn)。12.如權(quán)利要求11所述的檢測(cè)設(shè)備,其特征在于,上述用于交替連接診斷裝置的裝置包括這樣的裝置,它能在診斷裝置連接于前述接口裝置時(shí)斷開標(biāo)準(zhǔn)陸用電話式設(shè)施與前述接口裝置的聯(lián)系。13.如權(quán)利要求11所述的檢測(cè)設(shè)備,其特征在于,用于模擬標(biāo)準(zhǔn)陸用電話式設(shè)施功能的裝置包括這樣的裝置,它用于向前述接口裝置產(chǎn)生一摘機(jī)信號(hào)。14.如權(quán)利要求13所述的檢測(cè)設(shè)備,其特征在于,所說(shuō)的診斷裝置包括這樣的裝置,它用于檢測(cè)前述接口裝置因響應(yīng)所生成的摘機(jī)信號(hào)而產(chǎn)生的撥號(hào)音信號(hào)是否出現(xiàn)。15.如權(quán)利要求11所述的檢測(cè)設(shè)備,其特征在于,用于模擬標(biāo)準(zhǔn)陸用電話式設(shè)施的裝置包括這樣的裝置,它用于生成一個(gè)DTMF信號(hào)并將該信號(hào)傳送給前述接口裝置。16.如權(quán)利要求15所述的檢測(cè)設(shè)備,其特征在于,所說(shuō)的診斷裝置包括這樣的裝置,它用于檢測(cè)前述接口裝置因響應(yīng)生成DTMF信號(hào)的裝置所生成的DTMF信號(hào)而輸出的DTMF信號(hào)。17.如權(quán)利要求15所述的檢測(cè)設(shè)備,其特征在于,用于模擬標(biāo)準(zhǔn)陸用電話式設(shè)施功能的裝置包括這樣的裝置,它用于向前述接口裝置生成一個(gè)掛機(jī)信號(hào)。18.如權(quán)利要求10所述的檢測(cè)設(shè)備,其特征在于,所說(shuō)的診斷裝置包括這樣的裝置,它用于模擬對(duì)收發(fā)機(jī)所進(jìn)行的電話呼入,以便使前述接口裝置啟動(dòng)自身的振鈴發(fā)生器;該診斷裝置還包括用于檢測(cè)由此產(chǎn)生的振鈴信號(hào)的裝置。19.如權(quán)利要求18所述的檢測(cè)設(shè)備,其特征在于,所說(shuō)的診斷裝置還包括這樣的裝置,它用于在前述接口裝置正在產(chǎn)生振鈴信號(hào)時(shí)向該接口裝置產(chǎn)生一個(gè)摘機(jī)信號(hào),以便確定接口裝置根據(jù)對(duì)電話呼入的應(yīng)答而適時(shí)地?cái)嚅_振鈴信號(hào)。20.如權(quán)利要求10所述的檢測(cè)設(shè)備,其特征在于,所說(shuō)的診斷裝置包括這樣的裝置,它用于在前述接口裝置連接于收發(fā)機(jī)時(shí)通過(guò)蜂窩或蜂窩式電話網(wǎng)產(chǎn)生一個(gè)電話呼出并送回給上述無(wú)線電收發(fā)機(jī),從而,所說(shuō)的診斷裝置會(huì)使得收發(fā)機(jī)呼叫自己;上述診斷裝置還包括這樣的裝置,它用于檢測(cè)前述收發(fā)機(jī)因響應(yīng)上述電話呼叫而產(chǎn)生的忙音信號(hào),上述用于產(chǎn)生電話呼出的裝置呼叫業(yè)已分配給與前述接口裝置相連的收發(fā)機(jī)的電話號(hào)碼。21.一種利用診斷裝置檢測(cè)蜂窩或蜂窩式接口裝置適當(dāng)操作的方法,所說(shuō)的接口裝置可與陸用電話或電話式設(shè)施相連,并且能將來(lái)自與之相連的陸用電話式設(shè)施的DTMF信號(hào)或脈沖式撥號(hào)信號(hào)轉(zhuǎn)換成數(shù)字?jǐn)?shù)據(jù)格式,以便將該數(shù)字?jǐn)?shù)據(jù)傳送給前述收發(fā)機(jī),所說(shuō)的方法包括(a)監(jiān)控并報(bào)告前述接口裝置功能。22.如權(quán)利要求21所述的方法,其特征在于所說(shuō)的步驟(a)包括(b)將診斷裝置交替地連接于前述接口裝置;(c)模擬標(biāo)準(zhǔn)陸用電話式設(shè)施的功能以便在前述接口裝置內(nèi)產(chǎn)生各種相應(yīng)的應(yīng)答,從而確定接口裝置是否在正常地操作。23.如權(quán)利要求22所述的方法,其特征在于,所說(shuō)的步驟(b)包括在診斷裝置連接口裝置時(shí)斷開標(biāo)準(zhǔn)陸用電話式設(shè)施與前述接口裝置的連接。24.如權(quán)利要求22所述的方法,其特征在于,所說(shuō)的步驟(c)包括向前述接口裝置產(chǎn)生一摘機(jī)信號(hào)。25.如權(quán)利要求21至24所述的方法,其特征在于,它還包括檢測(cè)前述接口裝置因響應(yīng)所生成的摘機(jī)信號(hào)而產(chǎn)生的撥號(hào)音信號(hào)是否出現(xiàn)。26.如權(quán)利要求22所述的方法,其特征在于,所說(shuō)的步驟(c)包括生成一個(gè)DTMF信號(hào)并將該信號(hào)傳送給前述接口裝置。27.如權(quán)利要求26所述的方法,其特征在于,它還包括檢測(cè)前述接口裝置因響應(yīng)所生成的DTMF信號(hào)而輸出的DTMF信號(hào)。28.如權(quán)利要求236所述的方法,其特征在于,所說(shuō)的步驟(c)包括向前述接口裝置產(chǎn)生一個(gè)掛機(jī)信號(hào)。29.如權(quán)利要求21所述的方法,其特征在于,所說(shuō)的步驟(a)包括模擬對(duì)收發(fā)機(jī)的電話呼入,以便使前述接口裝置啟動(dòng)自身的振鈴發(fā)生器并且檢測(cè)所產(chǎn)生的振鈴信號(hào)。30.如權(quán)利要求29所述的方法,其特征在于所說(shuō)的步驟(a)還包括在前述接口裝置正在產(chǎn)生振鈴信號(hào)時(shí)向該接口裝置產(chǎn)生一個(gè)摘機(jī)信號(hào),以便確定接口裝置在應(yīng)答電話呼入時(shí)適當(dāng)?shù)財(cái)嚅_振鈴信號(hào)。31.如權(quán)利要求21所述的方法,其特征在于,所說(shuō)的步驟(a)包括在前述接口裝置連接于收發(fā)機(jī)時(shí)通過(guò)蜂窩或蜂窩式電話網(wǎng)產(chǎn)生一個(gè)電話呼出并送回給上述無(wú)線電收發(fā)機(jī);該產(chǎn)生電話呼出的步驟使收發(fā)機(jī)呼叫自己,并且還包括檢測(cè)上述蜂窩或蜂窩式無(wú)線電收發(fā)機(jī)因響應(yīng)電話呼叫而產(chǎn)生的忙音信號(hào)。32.一種無(wú)線電收發(fā)機(jī)設(shè)備,它包括無(wú)線電收發(fā)機(jī),接口裝置,以及與無(wú)線電收發(fā)機(jī)相連的通信設(shè)備;所說(shuō)的接口裝置使通信設(shè)備與無(wú)線電收發(fā)機(jī)相連接進(jìn)行工作,以便通過(guò)無(wú)線電收發(fā)機(jī)呼出或接收呼叫,其特征在于自診斷裝置,它用于監(jiān)控并報(bào)告無(wú)線電收發(fā)機(jī)和接口裝置的適當(dāng)功能;用于將自診斷裝置交替地連接于前述接口裝置的裝置;上述裝置包括這樣的裝置,它用于在自診斷裝置連接于接口裝置時(shí)斷開通信設(shè)備與該接口裝置的連接;上述的自診斷裝置包括這樣的裝置,它用于模擬通信設(shè)備的功能以便在接口裝置內(nèi)產(chǎn)生各種相應(yīng)的應(yīng)答,從而確定該接口裝置是否在正常的操作。33.如權(quán)利要求32所述的蜂窩式收發(fā)機(jī)設(shè)備,其特征在于,用于模擬通信設(shè)備功能的裝置包括這樣的裝置,它用于向接口裝置產(chǎn)生一個(gè)摘機(jī)信號(hào)。34.如權(quán)利要求33所述的蜂窩式收發(fā)機(jī)設(shè)備,其特征在于,自診斷裝置包括這樣的裝置,它用于檢測(cè)前述接口裝置響應(yīng)所生成的摘機(jī)信號(hào)而產(chǎn)生的撥號(hào)音信號(hào)是否出現(xiàn)。35.如權(quán)利要求32所述的蜂窩式收發(fā)機(jī)設(shè)備,其特征在于,用于模擬通信設(shè)備功能的裝置包括這樣的裝置,它用于生成一個(gè)DTMF信號(hào)并將該信號(hào)傳送給前述接口裝置。36.如權(quán)利要求35所述的蜂窩式收發(fā)機(jī)設(shè)備,其特征在于,自診斷裝置包括這樣的裝置,它用于檢測(cè)前述接口裝置因響應(yīng)用于生成DTMF信號(hào)的裝置所生成的DTMF信號(hào)而輸出的DTMF信號(hào)。37.如權(quán)利要求32所述的蜂窩式收發(fā)機(jī)設(shè)備,其特征在于,自診斷裝置包括這樣的裝置,它用于模擬對(duì)收發(fā)機(jī)所進(jìn)行的電話呼入,以便使前述接口裝置啟動(dòng)自身的振鈴發(fā)生器,該自診斷裝置還包括用于檢測(cè)由此產(chǎn)生的振鈴信號(hào)的裝置。38.如權(quán)利要求32所述的蜂窩式收發(fā)機(jī)設(shè)備,其特征在于,自診斷裝置包括這樣的裝置,它用于通過(guò)接口裝置和收發(fā)機(jī)以及與該收發(fā)機(jī)相聯(lián)的無(wú)線電電話系統(tǒng)產(chǎn)生一個(gè)電話呼出并送回給該收發(fā)機(jī);自診斷裝置還包括這樣的裝置,它用于檢測(cè)前述收發(fā)機(jī)因響應(yīng)上述電話呼叫而產(chǎn)生的忙音信號(hào);上述用于產(chǎn)生電話呼出的裝置呼叫業(yè)已分配給上述收發(fā)機(jī)并與該收發(fā)機(jī)在操作上相聯(lián)的電話號(hào)碼。39.一種檢測(cè)設(shè)備,用于檢測(cè)接口裝置的適當(dāng)操作,所說(shuō)的接口裝置能與通信設(shè)備相連從而使該通信設(shè)備與無(wú)線電收發(fā)機(jī)在操作上相連,以便通過(guò)無(wú)線電收發(fā)機(jī)呼出或接收呼叫,所說(shuō)的檢測(cè)設(shè)備包括診斷裝置,它用于監(jiān)控和報(bào)告前述接口裝置的適當(dāng)功能。40.如權(quán)利要求39所述的檢測(cè)設(shè)備,其特征在于,該檢測(cè)設(shè)備還包括用于將診斷裝置交替地連接于前述接口裝置的裝置;所說(shuō)的診斷裝置包括這樣的裝置,它用于模擬通信設(shè)備的功能以便在前述接口裝置內(nèi)產(chǎn)生各種相應(yīng)的應(yīng)答,從而確定接口裝置是否在正常地操作。41.一種利用診斷裝置檢測(cè)接口裝置適當(dāng)操作的方法,所說(shuō)的接口裝置可將通信設(shè)備與無(wú)線電收發(fā)機(jī)連接起來(lái),從而通信設(shè)備可通過(guò)無(wú)線電收發(fā)機(jī)呼出或接收呼入,所說(shuō)的方法包括(a)監(jiān)控并報(bào)告前述接口裝置的功能。42.如權(quán)利要求41所述的方法,其特征在于,所說(shuō)的步驟(a)包括(b)將診斷裝置交替地連接于前述接口裝置;(c)模擬通信設(shè)備的功能以便在前述接口裝置內(nèi)產(chǎn)生各種相應(yīng)的應(yīng)答,從而確定接口裝置是否在正常地操作。43.如權(quán)利要求42所述的方法,其特征在于,所說(shuō)的步驟(b)包括在診斷裝置連接于前述接口裝置時(shí)斷開通信設(shè)備與接口裝置的連接。全文摘要一種自診斷系統(tǒng),它用于檢查帶有蜂窩式接口裝置的蜂窩式無(wú)線電收發(fā)機(jī),所說(shuō)的接口裝置將標(biāo)準(zhǔn)的電話機(jī)連接于蜂窩式收發(fā)機(jī),并且將DTMF或脈沖式撥號(hào)信號(hào)轉(zhuǎn)換成數(shù)字格式以便傳輸給收發(fā)機(jī),在該收發(fā)機(jī)中,可以使用陸用電話上撥出的號(hào)碼去呼叫蜂窩系統(tǒng)范圍內(nèi)的號(hào)碼。本發(fā)明不僅可監(jiān)控和檢查收發(fā)機(jī)及其相關(guān)電源的適當(dāng)功能,而且可以監(jiān)控和檢查上述接口裝置。文檔編號(hào)H04M11/00GK1119898SQ94191585公開日1996年4月3日申請(qǐng)日期1994年3月2日優(yōu)先權(quán)日1993年3月25日發(fā)明者L·R·奧蒂斯,A·托里斯申請(qǐng)人:特呂拉國(guó)際公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1