• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 基于89C51設計的電話遠程控制開關

    基于89C51設計的電話遠程控制開關

    作者: 時間:2012-06-07 來源:網絡 收藏

    ORG 1500H
    DL10:MOV R5,#25 ;delay1.25ms,f=800HZ,fosc=12MHz,
    DL12:MOV R4,#25
    DL11:DJNZ R4,DL11
    DJNZ R5,DL12
    RET

    ORG 1600H
    DL20:MOV R5,#12 ;delay0.625ms,f=1600HZ,fosc=12MHz,
    DL22:MOV R4,#25
    DL21:DJNZ R4,DL21
    DJNZ R5,DL22
    RET

    ORG 1650H
    DL30:MOV R5,#50 ;delay20ms
    DL32:MOV R4,#200
    DL31:DJNZ R4,DL31
    DJNZ R5,DL32
    RET

    4.2 密碼檢測部分

    本系統密碼校驗的基本原理是:在系統初始化的時候把原始密碼寫入地址為30H開始的存儲空間內,密碼的位數“5”賦給R7。當系統摘機時,要求輸入密碼,單片機把解碼后的數據(使用者輸入的密碼)存儲在38H開始的存儲空間內。然后單片機對進行兩個存儲地址的內容逐位進行比較,直到完全相等才能轉到下一進程,有一位不同,程序就轉到出錯程序。

    子程序代碼:
    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,#5H ;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,#5H ;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

    4.3 密碼修改部分

    本系統是通過在線輸入密碼而改變特定存儲器中的密碼值的。
    程序代碼:
    ORG 1700H
    KEYIN: SETB RS1 ;當前工作寄存器第二工作區
    CLR RS0
    ANL A,#00H ;清零A寄存器
    MOV B,#05H
    LCALL RING10 ;發提示音:輸入密碼***
    MOV R7,#5H
    MOV R1,#38H
    WPIN: JBC 7EH,READ ;等待INT0中斷
    LJMP WPIN
    READ: MOV R1,#38H
    MOV R0,#40H
    MOV R7,#05H
    READ1: MOV A,@R1
    MOV @R0,A
    INC R0
    INC R1
    DJNZ R7,READ1 ;判斷輸入密碼是否為5位,否跳轉READ1
    LCALL RING10 ;滿5位,發提示音:再輸入新密碼
    MOV R7,#5H
    MOV R1,#38H
    WRE: JBC 7EH,KEYCMP ;等待中斷INT1
    LJMP WRE
    KEYCMP:MOV R6,#05H
    MOV R0,#40H
    MOV R1,#38H
    KEYCP:MOV A,@R0
    CLR C
    SUBB A,@R1 ;A減((R1))
    INC R1
    INC R0
    JZ BBB ;A的內容如果為0,則跳轉BBB
    LJMP LL
    BBB: DJNZ R6,KEYCP ;R6減1不為0,則跳轉KEYCP,即循環比較密碼的五位
    MOV R1,#38H
    MOV R0,#30H
    MOV R6,#5H
    KEYREIN:MOV A,@R1
    MOV @R0,A
    INC R1
    INC R0
    DJNZ R6,KEYREIN ;R6減1不為0,則跳轉,即循環比較密碼的五位
    LCALL RING50 ;發提示音:新密碼已經設置
    LJMP STOP
    RET

    4.4 控制電器部分

    本系統首先通過外圍雙音頻解碼電路解碼的信息(選擇電器)判斷所選擇的電器,然后跳轉到每一個子程序,通過單片機向P1口的低四位發送數據,這些控制信息表示對不同的電器進行控制的控制字。為了簡單表示,在這里只寫出了電器“一”的控制子程序,其它子程序很相似,詳見附錄。

    程序代碼:
    LL: LCALL RING30 ;sound:input control
    MOV R7,#1H ;***
    MOV R1,#38H
    CLR 7EH
    WAIT0: JBC 7EH,DD ;wait INT0
    LJMP WAIT0
    DD: MOV R1,#38H
    MOV A,@R1
    RR A
    RR A
    RR A
    RR A
    MOV R4,A
    RL A
    ADD A,R4
    MOV DPTR,#TAB
    JMP @A+DPTR
    TAB: LJMP ZERO
    LJMP EIGHT;8
    LJMP FOUR ;4
    LJMP STOP ;#
    LJMP TWO ;2
    LJMP ZERO ;0
    LJMP SIX ;6
    LJMP LL ;**
    LJMP ONE ;1
    LJMP LL ;9,**
    LJMP FIVE ;5
    LJMP LL ;A,**
    LJMP THREE;3
    LJMP LL ;*,**
    LJMP SEVEN;7
    LJMP LL ;C,**

    ORG 0250H
    ZERO: LJMP LL

    ONE: LCALL RING40 ;發提示音:請操作電器
    OO1: MOV R7,#01H
    CLR 7EH
    WAIT1: JBC 7EH,WW1 ;wait INT0
    LJMP WAIT1
    WW1:MOV R1,#38H ;檢查信號首位
    MOV A,@R1
    CJNE A,#50H,BB1 ;(38)不等于0AH(0),則跳轉BB1
    LJMP ZZ1 ;(38)等于0AH(0),則跳轉ZZ1
    BB1: CJNE A,#80H,QUIT1 ;(38)不等于01H(1),則跳轉QUIT1
    SETB P1.3 ;open 1
    CLR P1.2
    CLR P1.1
    CLR P1.0
    LJMP QUIT1
    ZZ1: CLR P1.3 ;close all
    CLR P1.2
    CLR P1.1
    CLR P1.0
    LCALL RING50 ;finsh
    QUIT1: LJMP LL

    4.5 振鈴計數部分

    本單元是通過計數器T0的外部中斷方式來計數的,程序代碼:

    ORG 0090H
    TT0: SETB 7DH
    RETI


    第五章 系統調試

    5.1 整體調試

    整體調試所使用的測試儀器儀表和工具:

    1、IBM-PC/XT兼容機一臺,主頻:50Hz,有軟驅和25針串行接口;
    2、ME-5103單片機仿真機一個;
    3、MF116萬用表一個;
    4、計算機5V穩壓電源一個;
    5、SR8雙蹤示波器;
    6、Manley In-Circuit Emulator Debugger(MBUG)開發軟件;

    本裝置的調試主要分為硬件調試、軟件調試和聯機調試等三大部分。
    經過初步的分析設計后,在制作硬件電路的同時,調試也在穿插進行。這樣有利于問題的分析和解決,不會造成問題的積累,而且不會因為一個小問題而進行整體電路的檢查,從而可以節約大量的調試時間。軟件編程中,我是首先完成單元功能模塊的調試,然后進行系統調試,整體上與硬件調試的方法差不多。聯機調試是最重要的一部分,同時也是本裝置成功的關鍵。有許多新問題都不是很容易解決的。

    調試的步驟

    5.2 硬件單元電路 5.2.1 5V穩壓電源

    本裝置使用單5V穩壓電源供電,要求交流成分小。經過示波器測量5V穩壓電源輸出端,其交流部分電壓的峰-峰值為6mV,符合本裝置的電源要求,穩壓電源調試完畢。

    5.2.2 振鈴音檢測

    在本單元電路制作前期,實驗室中無模擬交換機,無法產生振鈴信號,我只好在完成此部分的焊接后回寢室中完成其測試。將本裝置的電話線兩端并聯在電話機兩端,摘機撥打“190”,然后掛機,市交換機會回送連續的測試振鈴音。經過測量,這種測試振鈴音和正常的振鈴信號的頻率、振幅等特性都一樣,只是正常的振鈴信號是1秒通4秒斷,而這種測試振鈴音是連續的。當送測試振鈴音時,用萬用表的直流檔測量光電耦合器4N25的輸出端,有明顯的電壓,這說明可以形成中斷響應信號。后接振鈴指示燈,發現在送鈴流 圖5.1信號時,指示燈亮,但是燈在閃爍。分析得光耦輸出端所接的濾波電容C2太小,于是把原來的1μF換成現在的100μF,如右圖5.1所示,問題得到解決。
    因為單片機T0所響應的外部中斷信號是低電平有效,所以在光耦輸出端接了一個開關三極管T1控制指示燈,在三極管的輸出端接了三個反向器。經過三極管T1的開關作用和三個反向器的反向作用,輸出應該為低電平。但是在測量反向器輸出端時發現:振鈴指示燈亮,但反向器輸出端為高電平。說明振鈴信號可以通過三極管,但無法通過反向器。分析原因可能是反向器74LS04壞了,換之,再測,還是老問題。經過細心測量三極管的發射極電壓發現:有振鈴時Ve=1.1V,這時反向器74LS04認為是低電平,當無振鈴脈沖信號時,還是認為是低電平,所以振鈴信號無法通過反向器。解決方法很簡單,把三極管的發射極端的下拉電阻R4從原來的20kΩ改成5.1kΩ,提升三極管的發射極電壓。
    在畢業設計的后期,實驗室有了模擬小交換機,經測試,本單元電路完全正常,振鈴檢測部分調試完畢。

    5.2.3 模擬摘掛機

    此部分的調試較為容易,電路接好后,用5V高電平測試之,指示燈亮,繼電器吸合正常。接入模擬小交換機,控制摘機時,交換機的端口指示燈亮,反之掛機時,指示燈滅。說明此部分完全正常。接入仿真機測試時發現:單片機的TXD端不能控制模擬摘掛機部分的摘掛機。分析得出結論:可能是接口的電平不相符合。解決方法:加上一個三極管模擬開關,加上一個反向器(74LS04)進行控制隔離作用。經過接入仿真機測試表明反向器的作用很明顯,于是在后面的電路設計當中,我在許多的接口上大多使用了反向器。至此,模擬摘掛機部分調試完畢。



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 惠水县| 岐山县| 宣恩县| 绩溪县| 岫岩| 枞阳县| 白河县| 镇沅| 岳池县| 民勤县| 积石山| 西平县| 平乡县| 上犹县| 灌南县| 上犹县| 嘉峪关市| 明水县| 嘉义市| 互助| 闽侯县| 清水河县| 芦溪县| 庐江县| 阿拉善左旗| 常宁市| 淳安县| 屏东市| 铜梁县| 珲春市| 社会| 新宁县| 曲松县| 荥阳市| 宁南县| 玛沁县| 蒲江县| 开平市| 江西省| 普洱| 林甸县|