加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSSRSS-巴斯仪表网
您当前的位置:首页 > 电子发烧 > 单片机学习

51汇编模拟PT2272解码程序

时间:2013-09-03  来源:123485.com  作者:9stone

;软件解码程序(仿真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           


分享到:
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目导航->单片机学习
  • 电子应用基础
  • 电源技术
  • 无线传输技术
  • 信号处理
  • PCB设计
  • EDA技术
  • 单片机学习
  • 电子工具设备
  • 技术文章
  • 精彩拆解欣赏
  • 推荐资讯
    使用普通运放的仪表放大器
    使用普通运放的仪表放
    3V与5V混合系统中逻辑器接口问题
    3V与5V混合系统中逻辑
    数字PID控制及其改进算法的应用
    数字PID控制及其改进
    恶劣环境下的高性价比AD信号处理数据采集系统
    恶劣环境下的高性价比
    栏目更新
    栏目热门