新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于89C51設(shè)計(jì)的電話遠(yuǎn)程控制開關(guān)

基于89C51設(shè)計(jì)的電話遠(yuǎn)程控制開關(guān)

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

5.2.4 控制電器

控制電器這部分的外圍硬件電路很容易,在調(diào)試過程中很順利完成。在接仿真機(jī)時(shí),使用的是P2口控制電器,實(shí)驗(yàn)結(jié)果表明P2口無法正??刂泼總€(gè)電器,翻閱資料發(fā)現(xiàn)單片機(jī)的P2口沒有數(shù)據(jù)鎖存功能,不能保持上一個(gè)狀態(tài)的數(shù)據(jù)。解決方法:把P2口控制電器改為P1口的低四位控制電器,改線之后控制正常,但是新的問題出現(xiàn)了,原來要求控制八路的端口,現(xiàn)在只能控制四個(gè)電器。
經(jīng)過市場(chǎng)實(shí)際分析,一般的控制電器只要求3~4路即可,為了實(shí)驗(yàn)單片機(jī)擴(kuò)展控制功能,提高本遙控裝置的潛在功能,我決定實(shí)驗(yàn)使用3-8線譯碼器74LS138對(duì)P1口的低四位輸出數(shù)據(jù)進(jìn)行譯碼擴(kuò)展。具體電路詳見前面。在成功的擴(kuò)展了控制電器的個(gè)數(shù)后,我又發(fā)現(xiàn)了一個(gè)新的問題:遙控器不能同時(shí)使兩路以及兩路以上的電器開,即在同一時(shí)刻,遙控器只能使一路電器開啟。
經(jīng)過仔細(xì)分析,我發(fā)現(xiàn)了問題原因之所在,那就是譯碼器的原理問題。通常情況下我們認(rèn)為的譯碼器可以擴(kuò)展所能控制的電器,其實(shí)譯碼器只能擴(kuò)展位數(shù),而不能使?fàn)顟B(tài)發(fā)生變化。例如:三位二進(jìn)制000~111可以控制表示三個(gè)電器、八種狀態(tài),而經(jīng)過3-8線譯碼器譯碼后,可以控制八個(gè)電器,但是其狀態(tài)也只有八種,如下表所示。

A2 A1 A0 輸出D0~D7
0 0 0 0 1 1 1 1 1 1 1
0 0 1 1 0 1 1 1 1 1 1
0 1 0 1 1 0 1 1 1 1 1
0 1 1 1 1 1 0 1 1 1 1
1 0 0 1 1 1 1 0 1 1 1
1 0 1 1 1 1 1 1 0 1 1
1 1 0 1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 1 1 1 0

其解決方法是:使用D觸發(fā)器使繼電器保持上一個(gè)狀態(tài),這樣才能使八路電器可以控制28=256個(gè)狀態(tài)。

5.2.5 雙音頻檢測(cè)

雙音頻檢測(cè)是整體電路一個(gè)比較重要的過程,它的調(diào)試主要圍繞著雙音多頻解碼芯片8870展開的。在此部分的制作的前期,我采用的芯片是CM8870CPI。開始連接電路調(diào)試時(shí),整體電路工作很正常,后來這塊芯片使用大約一個(gè)星期左右的時(shí)間,解碼電路經(jīng)常會(huì)出現(xiàn)解碼出錯(cuò)的情況。經(jīng)過仔細(xì)檢查電路,仿真機(jī)單步執(zhí)行進(jìn)行調(diào)試,確認(rèn)硬件電路無誤,診斷為CM8870CPI的問題。根據(jù)我的初步分析認(rèn)定可能是芯片老化的原因,后更換為DE發(fā)現(xiàn)本裝置工作很正常,而且換上DE工作了將近一個(gè)月,整體電路沒有發(fā)生任何解碼誤碼情況,DE在最后的聯(lián)機(jī)調(diào)試過程中也沒有出現(xiàn)任何問題。

5.3 軟件程序調(diào)試

5.3.1軟件系統(tǒng)設(shè)置

對(duì)于本系統(tǒng)而言,軟件程序所實(shí)現(xiàn)的功能比較多,所以軟件程序的調(diào)試顯得相當(dāng)?shù)臒┈崱U麄€(gè)程序是使用匯編語言,在MBUG下編寫調(diào)試完成的。
首先我使用的是我自己的計(jì)算機(jī)聯(lián)接MCS-51仿真機(jī),計(jì)算機(jī)的主頻為333MHz,但是出現(xiàn)了許多的問題。第一個(gè)問題就是:我所使用的MCS-51仿真機(jī)型號(hào)是ME-5103,聯(lián)入計(jì)算機(jī)的25針串行口來進(jìn)行程序的讀入,但是我的計(jì)算機(jī)沒有25針串行口。觀察計(jì)算機(jī)的后面,主板上只有一個(gè)25針并行口,是用來連接打印機(jī)的;除了這個(gè)25針串行口外,還有兩個(gè)9針串行口。
我只有把MCS-51仿真機(jī)的25針接口變成9針串行接口,才能連接計(jì)算機(jī)。后來我找到一個(gè)25針-9針的轉(zhuǎn)換口,可以通過他使MCS-51仿真機(jī)和我的計(jì)算機(jī)聯(lián)接。
我使用的是Manley In-Circuit Emulator Debugger(MBUG)開發(fā)軟件,使用時(shí)發(fā)現(xiàn)此系統(tǒng)可以進(jìn)行正常的Assemble(匯編),但是不能正常的進(jìn)行Load Program,執(zhí)行時(shí)會(huì)出現(xiàn)divide overflow error的錯(cuò)誤,然后就退出此編譯系統(tǒng),這就使得無法進(jìn)行仿真機(jī)模擬實(shí)驗(yàn)。
經(jīng)過實(shí)驗(yàn)室多組同學(xué)的八臺(tái)計(jì)算機(jī)的嘗試,我們終于發(fā)現(xiàn)了問題之所在。實(shí)驗(yàn)結(jié)果表明:主頻高于233MHz的計(jì)算機(jī)都不能正常聯(lián)接MCS-51仿真機(jī),而主頻低于100MHz的計(jì)算機(jī)(有25針串行接口)均可以進(jìn)行仿真實(shí)驗(yàn)。后來經(jīng)過查閱有關(guān)技術(shù)資料,型號(hào)為ME-5103的MCS-51仿真機(jī)只能工作在IBM PC/XT/AT 286/386/486的環(huán)境下。
由于實(shí)驗(yàn)室的低檔計(jì)算機(jī)(能聯(lián)接MCS-51仿真機(jī))的不太多,所以我們只有把僅有的幾臺(tái)計(jì)算機(jī)進(jìn)行優(yōu)化重組,以便合理利用有限的計(jì)算機(jī)資源。我的匯編語言程序相對(duì)來說還是比較多的,調(diào)試起來可能費(fèi)時(shí),所以我先在自己的計(jì)算機(jī)上對(duì)程序的語法錯(cuò)誤(syntax error)進(jìn)行調(diào)試修改,然后又對(duì)地址覆蓋(org address is less)的錯(cuò)誤進(jìn)行修改,既對(duì)每個(gè)子程序的開始地址進(jìn)行仔細(xì)的調(diào)整。到此為止整個(gè)軟件程序調(diào)試環(huán)境就已經(jīng)配好了。

5.3.2提示音信號(hào)

在本單元的調(diào)試過程中,我認(rèn)為此部分的結(jié)構(gòu)比較簡(jiǎn)單,因此在整體程序中直接調(diào)試。首先Ctrl+F5單步執(zhí)行,發(fā)現(xiàn)此部分的RING1子程序正常,而其它的子程序在執(zhí)行時(shí)卻發(fā)生死循環(huán)。我把這幾個(gè)子程序單獨(dú)切出來進(jìn)行分析,卻發(fā)現(xiàn)執(zhí)行正常,于是我推測(cè)并不是子程序本身的結(jié)構(gòu)問題。然后使用Ctrl+F8對(duì)整個(gè)程序單步執(zhí)行(兩種單步執(zhí)行的區(qū)別在于F5直接執(zhí)行子程序,即不單步執(zhí)行子程序,而F8對(duì)于整個(gè)程序都是單步執(zhí)行,包括子程序),發(fā)現(xiàn)RING2中的R5寄存器已經(jīng)在主程序中用作判斷標(biāo)志位,程序已經(jīng)在外部完成對(duì)其賦值。這樣就導(dǎo)致重復(fù)賦值,因此無法跳出循環(huán)子程序,直接導(dǎo)致死循環(huán)。

程序代碼:
ORG 1150H
RING20:MOV R3,#03
RING21:MOV R6,#20 ;password wrong
RING22:MOV R5,#20 ;1600Hz
RING23:LCALL DL20 ;sound=3
CPL P3.0 ;delay=0.25s
DJNZ R5,RING23
DJNZ R6,RING22
CLR P3.0
MOV R5,#200
RING24:LCALL DL10
DJNZ R5,RING24
DJNZ R3,RING21
CLR P3.0
RET
后來我將子程序中的R5寄存器換成R7寄存器,子程序就正常了。

5.3.3密碼檢測(cè)
本部分的調(diào)試比較艱難,我是先調(diào)試一位密碼,然后再調(diào)試五位密碼。我先設(shè)定R5為一位,即先設(shè)定一位密碼作為測(cè)試。首先單步執(zhí)行,發(fā)現(xiàn)信號(hào)音無法正常輸入到單片機(jī)的38H地址處的存儲(chǔ)空間?,F(xiàn)象:計(jì)算機(jī)聯(lián)機(jī)單步執(zhí)行,接收振鈴信號(hào),三次自動(dòng)摘機(jī),當(dāng)程序執(zhí)行到等待INT0中斷(一個(gè)小的循環(huán)程序)時(shí),既等待輸入密碼時(shí),我按下“7”(事先設(shè)定的一位密碼),單片機(jī)能夠正常的響應(yīng)中斷信號(hào),跳出循環(huán)程序,執(zhí)行中斷處理程序,單片機(jī)在比較比較密碼時(shí),總是出錯(cuò)。
在程序單步執(zhí)行時(shí),我仔細(xì)觀察了每個(gè)寄存器和存儲(chǔ)器的內(nèi)容。地址為38H的存儲(chǔ)空間內(nèi)容始終為FFH,并沒有變化,而且無論輸入什么密碼,寄存器A的內(nèi)容總是恒定不變的。因?yàn)榈刂窞?8H的存儲(chǔ)空間內(nèi)放的是用戶輸入的密碼,累加器A放的是@30H減去@38H的值,即輸入密碼正確時(shí)應(yīng)該為0,所以我認(rèn)為單片機(jī)并沒有把數(shù)據(jù)寫入地址為38H的存儲(chǔ)空間。
經(jīng)過反復(fù)調(diào)試我也沒有發(fā)現(xiàn)問題之所在,于是我抱著嘗試的想法用F9全部執(zhí)行一次。結(jié)果很驚人,程序居然能通過密碼檢測(cè)部分。我仔細(xì)的思考了單步執(zhí)行的每一個(gè)狀態(tài),終于發(fā)現(xiàn)了失敗的原因。
程序單步執(zhí)行到等待INT0中斷,即要求輸入密碼時(shí),按下電話機(jī)的一個(gè)按鍵,程序就跳出循環(huán)程序,跳到中斷處理程序處處理雙音頻信號(hào)的輸入。因?yàn)閱尾綀?zhí)行是一步一步的執(zhí)行,其執(zhí)行速度比較慢,等到把單片機(jī)的P1口高四位的雙音頻解碼信號(hào)寫入地址為38H的存儲(chǔ)空間時(shí),信號(hào)早已過去,P1口高四位也恢復(fù)高電平,寫入P1口高四位的數(shù)據(jù)當(dāng)然是FFH。而F9全程執(zhí)行速度非???,不是外部信號(hào)等待單片機(jī)的處理,而是單片機(jī)等待外部信號(hào)的輸入,當(dāng)然不會(huì)漏掉數(shù)據(jù)。
原因找到了,解決方法也很簡(jiǎn)單:在程序單步執(zhí)行時(shí),到了等待INT0中斷時(shí),我按下“7”鍵的時(shí)間特別長(zhǎng),直到看見程序執(zhí)行到寫入地址為38H的存儲(chǔ)空間后才松手。這樣數(shù)據(jù)就能正確寫入寄存器,當(dāng)然能夠通過密碼檢測(cè)。

程序代碼:
HOKE1: LJMP HOKE
ORG 0090H
TT0: SETB 7DH
RETI
ORG 0150H
HOKE: CLR 7DH
SETB P3.1 ;open telephone
CLR TR0 ;close T0
MOV R2,#03H ;password wrong 3
LCALL RING10 ;input password
IN: CLR 7EH ;7EH=0
DTMF: MOV R7,#1H ;PASSWORD:5 R7
MOV R1,#38H ;sign
SETB P1.4
SETB P1.5
SETB P1.6
SETB P1.7
WAIT: JBC 7EH,CC ;wait INT0
LJMP WAIT
CC: MOV R7,#1H ;password 5***
MOV R0,#30H ;password top
MOV R1,#38H ;sign
CMP: MOV A,@R1
MOV R4,A
CLR C
MOV A,@R1
SUBB A,@R0 ;test
INC R0
INC R1
JZ AAA ;OK,pass one
LJMP QQ
AAA: DJNZ R7,CMP ;R7-1!=0
LJMP LL ;pass
QQ: DJNZ R2,IN1 ;password wrongR2!=0
LCALL RING20
LJMP STOP
IN1:LCALL RING20 ;password wrong,try!
LJMP IN

5.4 聯(lián)機(jī)在線調(diào)試
經(jīng)過前一階段硬件、軟件的分別調(diào)試,本裝置的制作也到了最后的沖刺階段,那就是聯(lián)機(jī)在線調(diào)試。

聯(lián)機(jī)在線調(diào)試所用到的設(shè)備:
1、 MCS-51仿真機(jī)一臺(tái);
2、 TC-108H“多路通”實(shí)驗(yàn)程控交換機(jī)一臺(tái);
3、 HA8188(9)P/T雙音多頻電話機(jī)一臺(tái);
4、 HA119(6)P/T雙音多頻電話機(jī)一臺(tái);
5、 主頻為50MHz的微機(jī)一臺(tái);

由于實(shí)驗(yàn)室條件有限,只有兩臺(tái)交換機(jī)供十幾組使用,時(shí)間非常有限。本裝置的前期調(diào)試工作盡可能的完成在交換機(jī)外,例如:振鈴檢測(cè)的調(diào)試基本上就是在宿舍的電話上完成的。我是選擇了一個(gè)晚上從23點(diǎn)一直調(diào)試到了次日凌晨2點(diǎn),在別人不使用交換機(jī)的時(shí)候調(diào)試基本完畢的。
聯(lián)機(jī)在線調(diào)試的第一步是振鈴音檢測(cè),由于事先的調(diào)試,這一部分沒有花太多時(shí)間,只是在單步執(zhí)行的時(shí)候,有時(shí)會(huì)發(fā)生仿真機(jī)不正常結(jié)束程序的情況。經(jīng)過詢問老師和同學(xué),MCS-51仿真機(jī)不是太穩(wěn)定,這種情況經(jīng)常發(fā)生,在全速執(zhí)行或把程序燒錄片子之后就不會(huì)發(fā)生了。
雙音頻信號(hào)解碼在聯(lián)機(jī)在線調(diào)試的時(shí)候也沒有發(fā)生太大的問題。
最大的問題發(fā)生在程序內(nèi)部的信息處理部分,因?yàn)槲沂孪炔]有對(duì)信號(hào)的編解碼做規(guī)定,這樣就直接導(dǎo)致雙音頻信號(hào)解碼后輸入到單片機(jī)內(nèi),造成跳轉(zhuǎn)指令混亂。比如我按下“7”鍵,單片機(jī)會(huì)認(rèn)為我按下的是“1”鍵。這一部分原理是比較簡(jiǎn)單的,但是程序還是挺麻煩的,因?yàn)楫?dāng)時(shí)已經(jīng)是半夜,所以頭腦比較混亂,我用了一個(gè)多小時(shí)的時(shí)間才把程序內(nèi)譯碼、碼制轉(zhuǎn)換的問題解決。
因?yàn)檎{(diào)試的時(shí)候是只使用一位密碼,控制一路電器,所以到了這時(shí),我還有擴(kuò)展密碼位數(shù)和擴(kuò)展控制路數(shù)的問題要解決。這些擴(kuò)展都是時(shí)間問題,只要仔細(xì)的拷貝一些程序代碼就可以順利完成。
在聯(lián)機(jī)調(diào)試的后期我還發(fā)現(xiàn)了一些小問題:我的實(shí)驗(yàn)桌上一共有三排數(shù)據(jù)線,我使用的是其中的一排。結(jié)果總是第三路電器無法實(shí)現(xiàn)遙控,更換數(shù)據(jù)線就會(huì)變正常。經(jīng)萬用表測(cè)量發(fā)現(xiàn)原先使用的數(shù)據(jù)線有一根線根本是不導(dǎo)通的。
我還用不同的MCS-51仿真機(jī)實(shí)驗(yàn),發(fā)現(xiàn)幾乎沒有兩臺(tái)MCS-51仿真機(jī)的實(shí)驗(yàn)結(jié)果是完全相同的,不是晶振的振蕩頻率不同,就是有個(gè)別管腳不能輸出數(shù)據(jù)。晶振的振蕩頻率不同就直接造成延時(shí)不同,發(fā)生頻率不一樣。
經(jīng)過一個(gè)通宵的調(diào)試,大大小小的各種問題都得到了解決,到此為止,在線聯(lián)機(jī)調(diào)試也就告一段落。

第六章 系統(tǒng)使用說明

本系統(tǒng)使用起來非常方便,下面我就系統(tǒng)使用流程圖做一下簡(jiǎn)單的使用方法介紹。
如右圖7.1所示,首先用戶把本裝置的信號(hào)線并聯(lián)在電話線的兩端,插上電源線,打開電源開關(guān),本裝置自動(dòng)復(fù)位,就能正常工作了。
當(dāng)用戶從異地打來電話,本裝置接收到電話振鈴音,開始計(jì)數(shù)。當(dāng)電話鈴聲計(jì)到五次,裝置自動(dòng)摘機(jī),回送提示音提示輸入密碼。
當(dāng)用戶在三次之內(nèi)輸入正確的密碼后,用戶就可以對(duì)裝置所連的電器進(jìn)行選擇,然后根據(jù)需要對(duì)其進(jìn)行開關(guān)控制。
用戶可以在一次“通話”中同時(shí)控制幾個(gè)電器。如果用戶控制完畢,可以按‘#’鍵讓裝置自動(dòng)掛機(jī),結(jié)束“通話”。而已經(jīng)開啟的電器將保持其開啟的狀態(tài),直到下一次的“通話”控制使其關(guān)閉。
本裝置使用起來簡(jiǎn)單易學(xué),而且功能強(qiáng)大。


第七章 系統(tǒng)功能擴(kuò)展
本系統(tǒng)由于時(shí)間的限制,在畢業(yè)設(shè)計(jì)結(jié)束之前只能作到現(xiàn)有的程度。在本次畢業(yè)設(shè)計(jì)的后期,我也盡量對(duì)本作品的功能進(jìn)行了相應(yīng)的擴(kuò)展。例如:?jiǎn)纹瑱C(jī)控制電器數(shù)量的增加,此部分充分應(yīng)用了單片機(jī)外圍接口擴(kuò)展技術(shù)。
我在這里對(duì)本系統(tǒng)還可以的擴(kuò)展功能做一下簡(jiǎn)單的介紹。
1、使用MT8888芯片還可以進(jìn)一步擴(kuò)展其功能,而且使本裝置的體積大大減小,在這里就MT8888集成電路作一個(gè)簡(jiǎn)單的介紹。
MT8888是MITEL公司的產(chǎn)品,是一種帶呼叫進(jìn)展過濾器的單片雙音多頻收發(fā)器。它包括一個(gè)帶增益可調(diào)放大器的DTMF接收器和一個(gè)DTMF發(fā)送器。接收器的結(jié)構(gòu)及工作原理與MT8870大同小異,也采用集頻帶分離濾波和數(shù)字解碼為一體的結(jié)構(gòu)。其中濾波電路也采用高頻群和低頻群兩個(gè)六階開關(guān)電容帶通濾波器,解碼采用數(shù)字計(jì)數(shù)器技術(shù)來確定輸入的DTMF音調(diào)的頻率,并將其譯成標(biāo)準(zhǔn)的四位二進(jìn)制碼。發(fā)送器采用開關(guān)電容D/A變換器。片內(nèi)使用了一個(gè)脈沖計(jì)數(shù)器,能合成精確的音調(diào)脈沖,保證音調(diào)脈沖準(zhǔn)確的定時(shí)發(fā)送。MT8888提供了一個(gè)標(biāo)準(zhǔn)的微處理器總線接口,可以直接與MCS-51系列微機(jī)接口。它還可以選用呼叫進(jìn)展方式工作,通過呼叫進(jìn)展濾波器來檢測(cè)特定通帶內(nèi)的信號(hào)頻率,供微處理機(jī)或計(jì)數(shù)器電路分析,以確定檢測(cè)到的呼叫進(jìn)展音的性質(zhì)。
MT8888的接收工作方式,從檢測(cè)DTMF信號(hào)到解碼的過程與MT8870完全一致,差異較大的是解碼后的二進(jìn)制碼的輸出。MT8888沒有延時(shí)導(dǎo)引輸出端stD,當(dāng)收到的有效音調(diào)對(duì)已被寄存且相對(duì)應(yīng)的四位二進(jìn)制碼已被鎖在接收數(shù)據(jù)寄存器中時(shí),片內(nèi)狀態(tài)寄存器中的延時(shí)控制標(biāo)志位b3復(fù)位,同時(shí)狀態(tài)寄存器中的接收數(shù)據(jù)寄存器滿標(biāo)志位b2置位,CPU可通過查詢這些狀態(tài)標(biāo)志來了解解碼的過程。如果選中的是中斷方式,當(dāng)延時(shí)控制標(biāo)志位復(fù)位時(shí),IRQ/CP端將變?yōu)榈碗娖?,向CPU發(fā)送中斷請(qǐng)求,當(dāng)CPU響應(yīng)此中斷,讀出狀態(tài)寄存器中的數(shù)據(jù)后,IRQ/CP端返回高電平狀態(tài)。
根據(jù)MT8888的以上特點(diǎn),它可以檢測(cè)出電話振鈴音、忙音等信號(hào)音。我設(shè)計(jì)了新的系統(tǒng)功能,改進(jìn)了的系統(tǒng)可以首先工作于第二方式,即電話線路信號(hào)音檢測(cè)狀態(tài),然后根據(jù)振鈴情況控制摘掛機(jī),摘機(jī)后MT8888工作于第四方式,即雙音頻解碼狀態(tài),后面就和8870一樣了。這樣就能節(jié)省硬件電路的設(shè)計(jì)制作,還可以大大縮小本裝置整體體積。
2、利用138譯碼器的STA、STB和STC還可以進(jìn)行級(jí)聯(lián)擴(kuò)展為24線譯碼器,若外接一個(gè)反向器還可以級(jí)聯(lián)擴(kuò)展成為32線譯碼器。
3、使用LM567鎖相環(huán)可以對(duì)電話信號(hào)音中的忙音進(jìn)行識(shí)別,使使用者更加方便,而且能夠提高本裝置的穩(wěn)定性。


上一頁(yè) 1 2 3 4 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉