⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8051参考解码程序.txt

📁 用8051模拟2262的汇编解码源程序
💻 TXT
字号:
参考解码软件

    说明:ADD1,ADD2中为8位地址,DAT0中为4位数据

REMOTE: CLR     TR2                     ;探头信号检测子程序
        CLR     RECEIVE                 ;清零接收标志位
        MOV     DETE_LOOP,#12           ;接收12位编码,将立即数12赋给DETE_LOOP
REMO0:  CLR     DETE_T_OVER             ;
        MOV     TH2,#0FEH               ;测第1位电平宽度
        MOV     TL2,#041H               ;    
        SETB    TR2                     ;
REMO1:  JB      REM,REMO2               ;等待出现高电平.如果直接寻址位REM为1则转到REM02。
        JB      DETE_T_OVER,REMO3       ;限时1500us,超时则认为误码,退出
        AJMP    REMO1                   ; AJMP:绝对转移
REMO2:  MOV     A,TH2                   ;测低电平宽度,0FF为宽脉冲,0FE为窄脉冲 
        CJNE    A,#0FFH,REMO4           ;若A的值不是宽脉冲,则跳至REM04去检测A的置是否为窄脉冲
        MOV     A,TL2                   ;
        CLR     C                       ;
        CJNE    A,#098H,$+3             ; 比较A与#098H,不相等则跳回前3句
        JNC     REMO3                   ;电平过宽(超过1150us),退出
        CLR     C                       ;
        CJNE    A,#020H,$+3             ; 
        JC      REMO3                   ;电平过窄(小于780us),退出。JC:如果进位位为1则转移
        SETB    C                       ;
        AJMP    REMO5                   ; 
REMO3:  AJMP    REMOTE_END              ;
REMO4:  CJNE    A,#0FEH,REMO3           ;A的值是否为窄脉冲?否则跳至REM0TE_END,退出
        MOV     A,TL2                   ;
        CLR     C                       ;
        CJNE    A,#0C7H,$+3             ; 
        JNC     REMO3                   ;电平过宽(超过450us),退出
        CLR     C                       ;
        CJNE    A,#060H,$+3             ; 
        JC      REMO3                   ;电平过窄(小于210us),退出
        CLR     C                       ;
REMO5:  MOV     A,DAT0                  ;存储电平值,DATA0的值从哪里来?
        RLC     A                       ;A左移
        MOV     DAT0,A                  ;
        MOV     A,ADD1                  ;
        RLC     A                       ;
        MOV     ADD1,A                   ;
REMO6:  JNB     REM,REMO7               ;等待出现低电平,JNB:如果直接寻址位REM为0则转移
        JB      DETE_T_OVER,REMO3       ;脉冲下降沿间隔限时1500us,超时则认为误码
        AJMP    REMO6                   ;
REMO7:  CLR     TR2                     ;
        CLR     DETE_T_OVER             ;
        MOV     A,TH2                   ;
        CJNE    A,#0FFH,REM13           ;脉冲间隔过小.若A与#0FFH不相等则转移,退出
        MOV     A,TL2                   ;
        CLR     C                       ;
        CJNE    A,#050H,$+3             ; 
        JC      REM13                   ;电平过窄(小于1200us),退出
        MOV     TH2,#0FEH               ;测第2位电平宽度
        MOV     TL2,#041H               ;    
        SETB    TR2                     ;
REM11:  JB      REM,REM12               ;等待出现高电平
        JB      DETE_T_OVER,REM13       ;限时1500us,超时则认为误码
        AJMP    REM11                   ; 
REM12:  MOV     A,TH2                   ;测低电平宽度,0FE为宽脉冲,0FF为窄脉冲 
        CJNE    A,#0FFH,REM14           ;
        MOV     A,TL2                   ;
        CLR     C                       ;
        CJNE    A,#098H,$+3             ; 
        JNC     REM13                   ;电平过宽(超过1100us),退出
        CLR     C                       ;
        CJNE    A,#020H,$+3             ; 
        JC      REM13                   ;电平过窄(小于1000us),退出
        SETB    C                       ;
        AJMP    REM15                   ; 
REM13:  AJMP    REMOTE_END              ;
REM14:  CJNE    A,#0FEH,REM13           ;
        MOV     A,TL2                   ;
        CLR     C                       ;
        CJNE    A,#0C7H,$+3             ; 
        JNC     REM13                   ;电平过宽(超过450us),退出
        CLR     C                       ;
        CJNE    A,#060H,$+3             ; 
        JC      REM13                   ;电平过窄(小于210us),退出
        CLR     C                       ;
REM15:  MOV     A,TEMP                  ;存储电平值
        RLC     A                       ;
        MOV     TEMP,A                  ;
        MOV     A,ADD2                  ;
        RLC     A                       ;
        MOV     ADD2,A                  ; 
REM16:  JNB     REM,REM18               ;等待出现低电平
        JB      DETE_T_OVER,REM13       ;脉冲下降沿间隔限时1500us,超时则认为误码
        AJMP    REM16                   ;  
REM17:  AJMP    REMO0 
REM18:  CLR     TR2                     ; 
        CLR     DETE_T_OVER             ;
        MOV     A,TH2
        CJNE    A,#0FFH,REM13           ;脉冲间隔过小
        MOV     A,TL2                   ;
        CLR     C                       ;
        CJNE    A,#050H,$+3             ; 
        JC      REM13                   ;电平过窄(小于1200us),退出
        DJNZ    DETE_LOOP,REM17         ; DETE_LOOP减1,不为0则跳至REM17,即接收下一位编码,直至接收完12位
REM19:  MOV     DETE_LOOP,#4            ;把接收的编码左移4位
REM20:  CLR     C                       ;将8位密码放在同一字节上
        MOV     A,DAT0                  ;
        RLC     A                       ;
        MOV     DAT0,A                  ;
        MOV     A,ADD1                  ;
        RLC     A                       ;
        MOV     ADD1,A                  ;
        CLR     C                       ;
        MOV     A,TEMP                  ;
        RLC     A                       ;
        MOV     TEMP,A                  ;
        MOV     A,ADD2                  ;
        RLC     A                       ;
        MOV     ADD2,A                  ;
        DJNZ    DETE_LOOP,REM20         ;
;把4 位数据编码由高4 位移到低4 位上     ;
        MOV     A,DAT0                  ;
        SWAP    A                       ;
        MOV     DAT0,A                  ;
        MOV     A,TEMP                  ;
        SWAP    A                       ;
        MOV     TEMP,A                  ;
        ANL     DAT0,#0FH               ;立即数与到直接字节
        SETB    RECEIVE                 ;
REMOTE_END:                             ;
        CLR     TR2
        CLR     REMOTING                ;
        RET                             ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -