cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1811|回复: 0

[转帖]软件解码程序(仿真PT2272)

[复制链接]
发表于 2005-9-22 22:36:18 | 显示全部楼层 |阅读模式
<>转贴自电子制作实验室:</P>
<>;软件解码程序(仿真PT2272)               ;
;晶体频率为11.0592Mhz
;本程序中的时间定位关系只适用于接3.3M振荡电阻的PT2262解码
;使用其它阻值电阻时,应将定位时间按电阻比例缩放
;下面的程序中 REM 为信号输入端
;RECEIVE        检测到有效信号标志位
;ENABLE_DETE    连续按键标志
;3AH,3BH用作定时器                      ;
T2262共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            ;


:   </P>
[此贴子已经被作者于2005-9-22 14:47:43编辑过]

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-5-5 02:20 , Processed in 0.735720 second(s), 7 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表