51汇编模拟PT2272解码程序
2012-06-30
标签: PT2272


;软件解码程序(仿真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
;等待第二个码值的上升沿

        CLRT_OVER
        MOV TH1,#0FAH
        MOV TL1,#099H
        SETB TR1
RM3:    JB T_OVER,RM5
        JB R EM,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

        END


可能会用到的工具/仪表
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号