專利名稱::用于蜂窩式無(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&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&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&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,&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&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&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ó)際公司