新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51匯編模擬PT2272解碼程序

        51匯編模擬PT2272解碼程序

        作者: 時間:2012-10-16 來源:網絡 收藏
        ;軟件(仿真PT2272)
        ;晶體頻率為11.0592Mhz
        ;本程序中的時間定位關系只適用于接3.3M振蕩電阻的PT2262解碼
        ;使用其它阻值電阻時,應將定位時間按電阻比例縮放
        ;下面的程序中 REM 為信號輸入端
        ;RECEIVE 檢測到有效信號標志位
        ;ENABLE_DETE 連續按鍵標志
        ;3AH,3BH用作定時器
        ;PT2262共12根地址線
        ;31H,32H:接收的前8 位地址編碼
        ;33H,30H:接收的后4 位地址編碼(若最后4位用作數據端,則只須讀第33H單元的內容即可)
        ;當用作數據端時,PT2262對應腳懸空被認為是低電平。
        ;地址數據說明
        ;以31H.0 和32H.0 為例
        ;懸空 : 31H.0=0 32H.0=1
        ; 1: 31H.0=1 32H.0=1
        ; 0: 31H.0=0 32H.0=0
        ;出錯 31H.0=1 32H.0=0
        ;
        ;說明:為了能可靠檢測到有效信號,建議每次接收至少檢測3次,然后比較3次檢測值
        ;3次值相同才認為收到了正確信號。可在主程序中如下處理:第1次檢測時調用REMOTE
        ;第2、3次檢測時調用REMOTES,請注意必需連續調用,否則得不到正確的數據
        ;
        ;注意:將T1設定為16位定時器,允許中斷,否則將導致接收數據錯誤
        ;---------------------------------------;
        REMOTE:
        CLR RECEIVE
        ;檢測50ms 內有沒有編碼接收
        MOV 3AH,#55
        REMOTEA:
        MOV 3BH,#250
        REMOTEB:
        JB REM,REMOTE0 ;有碼發送則跳轉
        DJNZ 3BH,REMOTEB
        DJNZ 3AH,REMOTEA
        REMOTE_END_1:
        CLR ENABLE_DETE
        REMOTE_END:
        CLR REMOTING ;清除探頭檢測標志
        RET
        REMOTE0:
        JB ENABLE_DETE,REMOTE_END_1;按鍵沒有放開則返回
        REMOTES:
        MOV 34H,#12 ;接收12位編碼
        ;解碼 ;
        ;先找出接收碼的開頭即10ms 左右的高電平 ;
        ;設置高電平時間為8~12ms ;
        ;檢測和等待8ms 的低電平,70ms門限 ;
        CLR T_OVER
        MOV TH1,#00H
        MOV TL1,#00H
        SETB TR1
        REMOTE1:
        MOV 3AH,#50
        REMOTE2:
        MOV 3BH,#25
        REMOTE3:
        JB REM,REMOTE1
        JB T_OVER,REMOTE_END
        DJNZ 3BH,REMOTE3
        DJNZ 3AH,REMOTE2

        ;等待在4ms 內接收到的高電平
        CLR T_OVER
        MOV TH1,#0F1H
        MOV TL1,#0F0H
        SETB TR1
        REMOTE_4:
        JB T_OVER,REMOTE_5
        JNB REM,REMOTE_4
        CLR TR1
        AJMP REMOTE6
        ;超出12ms 接收錯誤返回
        REMOTE_5:
        AJMP REMOTE_END
        REMOTE6:
        ;等待550us 后采集接收信號
        MOV 3AH,#00
        DJNZ 3AH,$
        ;采集接收信號并記錄
        MOV C,REM
        MOV A,33H
        RLC A
        MOV 33H,A
        MOV A,31H
        RLC A
        MOV 31H,A
        ;等待第二個上升沿,限時1.5ms ;
        CLR T_OVER
        MOV TH1,#0FAH
        MOV TL1,#099H
        SETB TR1
        RM1: JB T_OVER,REMOTE_END
        JB REM,RM1
        CLR TR1

        CLR T_OVER
        MOV TH1,#0FAH
        MOV TL1,#099H
        SETB TR1
        RM2: JB T_OVER,REMOTE_END
        JNB REM,RM2
        CLR TR1
        ;等待550us 后采集接收信號
        MOV 3AH,#00
        DJNZ 3AH,$
        MOV C,REM
        MOV A,30H
        RLC A
        MOV 30H,A
        MOV A,32H
        RLC A
        MOV 32H,A
        ;等待第二個碼值的上升沿
        CLR T_OVER
        MOV TH1,#0FAH
        MOV TL1,#099H
        SETB TR1
        RM3: JB T_OVER,RM5
        JB REM,RM3
        CLR TR1

        CLR T_OVER
        MOV TH1,#0FAH
        MOV TL1,#099H
        SETB TR1
        RM4: JB T_OVER,RM5
        JNB REM,RM4
        CLR TR1
        DJNZ 34H,REMOTE6
        ;把接收的編碼左移4 位將8 位密碼放在同一字節上
        MOV 34H,#4
        AJMP REMOTE7
        RM5: AJMP REMOTE_END
        REMOTE7:
        CLR C
        MOV A,33H
        RLC A
        MOV 33H,A
        MOV A,31H
        RLC A
        MOV 31H,A
        CLR C
        MOV A,30H
        RLC A
        MOV 30H,A
        MOV A,32H
        RLC A
        MOV 32H,A
        DJNZ 34H,REMOTE7
        ;把4 位數據編碼由高4 位移到低4 位上 ;
        MOV A,33H
        SWAP A
        MOV 33H,A
        MOV A,30H
        SWAP A
        MOV 30H,A
        SETB ENABLE_DETE
        SETB RECEIVE

        AJMP REMOTE_END_1


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 抚顺市| 高陵县| 伊通| 罗山县| 尚义县| 乐亭县| 都昌县| 长春市| 岚皋县| 田林县| 四子王旗| 威信县| 牙克石市| 攀枝花市| 民乐县| 普兰店市| 玛沁县| 石楼县| 抚远县| 合山市| 茂名市| 新丰县| 桂平市| 延川县| 美姑县| 雅江县| 舒城县| 宜丰县| 井研县| 云林县| 台东市| 麻江县| 茂名市| 鹤壁市| 侯马市| 安宁市| 英山县| 迁西县| 田东县| 泽州县| 临夏市|