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

📄 学习型电话网络远程控制器源程序.asm.txt

📁 带红外学习功能的电话远程遥控
💻 TXT
📖 第 1 页 / 共 4 页
字号:
;定时器T1中断服务子程序          
INT_T1:         SETB    TOF1
                RETI
;**************************************************************************
;按键处理子程序
KEY_IN:         CLR     EX0
                MOV     C,KEY_ON
                JNC     KEY_ON1                ;有按键按下为低电平
                MOV     C,KEY_OFF
                JNC     KEY_OFF1               
                MOV     C,KEY_SEC
                JNC     KEY_SEC1               
                JMP     KEY_BACK               ;无键按下返回
                
                
KEY_ON1:        MOV     R1,#5
KEY_ON10:       LCALL   DEL_20MS
                DJNZ    R1,KEY_ON10

                MOV     C,KEY_ON
                JC      KEY_BACK               ;延时100MS去抖动
                SETB    GV_XSFLAG 
                MOV     GV_XS,#3
               
KEY_ON2:        MOV     C,KEY_ON
                JC      KEY_1                  ;<3S为K1
                LCALL   DEL_20MS
                MOV     C,GV_XSFLAG 
                JNC     KEY_3                  ;>3S为K3
                AJMP    KEY_ON2


KEY_OFF1:       MOV     R1,#5
KEY_OFF10:      LCALL   DEL_20MS
                DJNZ    R1,KEY_OFF10

                MOV     C,KEY_OFF
                JC      KEY_BACK               
                SETB    GV_XSFLAG 
                MOV     GV_XS,#3

KEY_OFF2:       MOV     C,KEY_OFF
                JC      KEY_2                  ;<3S为K2
                LCALL   DEL_20MS
                MOV     C,GV_XSFLAG 
                JNC     KEY_4                  ;>3S为K4
                AJMP    KEY_OFF2

KEY_SEC1:       MOV     R1,#150
KEY_SEC10:      LCALL   DEL_20MS
                DJNZ    R1,KEY_SEC10

                MOV     C,KEY_SEC
                JC      KEY_BACK               
                JNC     KEY_5
                 
KEY_BACK:       CLR     GV_XSFLAG
                SETB    EX0
                RET  
;*************************************************************************
;按键执行子程序

KEY_1:          CLR     GV_XSFLAG
                LCALL   KEY_10
                RET
KEY_2:          CLR     GV_XSFLAG
                LCALL   KEY_20
                RET
KEY_3:          LCALL   KEY_30
                RET
KEY_4:          LCALL   KEY_40
                RET
KEY_5:          LCALL   KEY_50
                RET


;-------------------------------------------------------------------------
;发射开关信号
KEY_10:         CLR     LED1
                LCALL   BZ_800                 ;BZ0.5秒
                MOV     R1,RDATA_PO
                CJNE    R1,#3,KEY_11
                MOV     RCVDAT,#30H     
                MOV     SUBADR,#20H            ;RCV BUFFER ADR 20H
                LCALL   RCV_2402               ;从2402接收数据
                LCALL   DEL_20MS
                MOV     RCVDAT,#40H 
                MOV     SUBADR,#30H            ;RCV BUFFER ADR 20H
                CALL    RCV_2402               ;从2402接收数据
                LCALL   DEL_20MS

                MOV     A,RDATA_LCON           ;数据脉冲高电平计数为0退出
                JZ      KEY_13
                JMP     KEY_12
KEY_11:         SETB    ON_OFF                 ;取当前开机数据
                LCALL   DM2
KEY_12:         LCALL   EMIT
KEY_13:         SETB    LED1
                RET

KEY_20:         CLR     LED1
                LCALL   BZ_800                 ;BZ0.5秒
                MOV     R1,RDATA_PO
                CJNE    R1,#3,KEY_21
                MOV     RCVDAT,#30H     
                MOV     SUBADR,#40H            ;RCV BUFFER ADR 20H
                LCALL   RCV_2402               ;从2402接收数据
                LCALL   DEL_20MS
                MOV     RCVDAT,#40H 
                MOV     SUBADR,#50H            ;RCV BUFFER ADR 20H
                CALL    RCV_2402               ;从2402接收数据
                LCALL   DEL_20MS
     
                MOV     A,RDATA_LCON           ;数据脉冲高电平计数为0退出
                JZ      KEY_23
                JMP     KEY_22
KEY_21:         CLR     ON_OFF                 ;取当前关机数据
                LCALL   DM2
KEY_22:         LCALL   EMIT           
KEY_23:         SETB    LED1
                RET

;-------------------------------------------------------------------------
;学习开关信号
KEY_30:         SETB    PIK_HANG
                CLR     P3.4
                CLR     LED1
                LCALL   BZ_800                 ;长鸣2S
                LCALL   BZ_800
                LCALL   BZ_800
                LCALL   BZ_800
                CLR     STUDY_OK
                SETB    GV_XSFLAG 
                MOV     GV_XS,#5              
KEY_31:         JNB     RED_REC,KEY_32         ;有信号学习
                MOV     C,GV_XSFLAG 
                JC      KEY_31
                LCALL   BZ_800                 ;5S内无信号退出
                LCALL   BZ_800                 ;BZ一秒
                JMP     KEY_3BACK
              
KEY_32:         LCALL   STUDY
                JNB     STUDY_OK,KEY_3BACK
                MOV     SUBADR,#20H            ;2402 BYTE ADR 20H
                MOV     XMTDAT,#30H 
                LCALL   STR_2402               ;发送数据到2402
                LCALL   DEL_20MS
                MOV     SUBADR,#28H 
                MOV     XMTDAT,#38H 
                LCALL   STR_2402               ;发送数据到2402
                LCALL   DEL_20MS
                MOV     SUBADR,#30H 
                MOV     XMTDAT,#40H 
                LCALL   STR_2402               ;发送数据到2402
                LCALL   DEL_20MS
                MOV     SUBADR,#38H 
                MOV     XMTDAT,#48H 
                LCALL   STR_2402               ;发送数据到2402
                LCALL   DEL_20MS                

KEY_3BACK:      CLR     PIK_HANG
                SETB    P3.4
                SETB    LED1
                RET


KEY_40:         SETB    PIK_HANG
                CLR     P3.4
                CLR     LED1
                LCALL   BZ_800                 ;长鸣2S
                LCALL   BZ_800
                LCALL   BZ_800
                LCALL   BZ_800
                CLR     STUDY_OK
                SETB    GV_XSFLAG 
                MOV     GV_XS,#5               
KEY_41:         JNB     RED_REC,KEY_42         ;有信号学习
                MOV     C,GV_XSFLAG 
                JC      KEY_41
                LCALL   BZ_800                 ;5S内无信号退出
                LCALL   BZ_800                 ;BZ一秒
                JMP     KEY_4BACK

KEY_42:         LCALL   STUDY
                JNB     STUDY_OK,KEY_4BACK
                MOV     SUBADR,#40H            ;2402 BYTE ADR 20H
                MOV     XMTDAT,#30H 
                LCALL   STR_2402               ;发送数据到2402
                LCALL   DEL_20MS
                MOV     SUBADR,#48H 
                MOV     XMTDAT,#38H 
                LCALL   STR_2402               ;发送数据到2402
                LCALL   DEL_20MS
                MOV     SUBADR,#50H 
                MOV     XMTDAT,#40H 
                LCALL   STR_2402               ;发送数据到2402
                LCALL   DEL_20MS
                MOV     SUBADR,#58H 
                MOV     XMTDAT,#48H 
                LCALL   STR_2402               ;发送数据到2402
                LCALL   DEL_20MS
            
KEY_4BACK:      CLR     PIK_HANG
                SETB    P3.4
                SETB    LED1
                RET
;-------------------------------------------------------------------------
;自动搜索
KEY_50:         MOV     R1,#5                            
KEY_51:         LCALL   BZ_800                 ;一长声
                DJNZ    R1,KEY_51   
                LCALL   AUTO_SEARCH
               
                RET

;----------------------------------------------------------------------
;学习子程序
STUDY:          MOV     RDATA_HWH1,#00H
                MOV     RDATA_HWL1,#00H
                MOV     RDATA_HWH2,#00H
                MOV     RDATA_HWL2,#00H
                MOV     RDATA_HWH3,#00H
                MOV     RDATA_HWL3,#00H
                CLR     ET0
                CLR     STUDY_OK               ;清学习成功标志
                MOV     TMOD,#00010001B
                MOV     TH1,#00H
                MOV     TL1,#00H
                SETB    TR1
                MOV     R2,#30
STUDY1:         MOV     R1,#250
STUDY2:         JB      RED_REC,STUDY3         ;高电平转下一步        
                DJNZ    R1,STUDY2
                DJNZ    R2,STUDY1
                JMP     STUDY_BACK1            ;超过30MS错误退出

STUDY3:         CLR     TR1            
                LCALL   BC2
                MOV     RLEAD_LWH,TH1          ;存引导脉冲低电平宽度
                MOV     RLEAD_LWL,TL1
                MOV     TH1,#00H
                MOV     TL1,#00H
                SETB    TR1
                MOV     R2,#30
STUDY4:         MOV     R1,#250
STUDY5:         JNB     RED_REC,STUDY6         ;低电平转下一步        
                DJNZ    R1,STUDY5
                DJNZ    R2,STUDY4
                JMP     STUDY_BACK1            ;超过30MS错误退出

STUDY6:         CLR     TR1
                LCALL   BC1
                MOV     RLEAD_HWH,TH1          ;存引导脉冲高电平宽度
                MOV     RLEAD_HWL,TL1
                MOV     RDATA_LCON,#00H        ;数据位计数
              

                MOV     R0,#40H                ;8个数据位,从2F--36H
STUDY7:         MOV     R5,#08H                ;输入数据
 

STUDY8:         MOV     TH1,#00H
                MOV     TL1,#00H
                SETB    TR1

                MOV     R2,#10
STUDY9:         MOV     R1,#250
STUDY10:        JB      RED_REC,STUDY11         ;高电平转下一步        
                DJNZ    R1,STUDY10
                DJNZ    R3,STUDY9
                JMP     STUDY_BACK1            ;超过10MS错误退出

STUDY11:        CLR     TR1
                LCALL   BC2
                MOV     RDATA_LWH,TH1           ;存数据脉冲第低电平宽度
                MOV     RDATA_LWL,TL1

                MOV     TH1,#00H
                MOV     TL1,#00H
                SETB    TR1

                MOV     R2,#10
STUDY12:        MOV     R1,#250
STUDY13:        JNB     RED_REC,STUDY14        ;低电平转下一步        
                DJNZ    R1,STUDY13
                DJNZ    R2,STUDY12
                JMP     STUDY_BACK2            ;超10ms过正确退出

STUDY14:        CLR     TR1
                LCALL   BC1
                MOV     A,RDATA_HWL1
                JZ      STUDY15                ;第1位低位宽度为0,不比较直接存储宽度
                MOV     A,TH1
                CJNE    A,RDATA_HWH1,STUDY16   ;与第一次存储高位宽度比较,不等则另行存储
                                               ;只比较高字节

STUDY15:        MOV     RDATA_HWH1,TH1
                MOV     RDATA_HWL1,TL1         ;记做1
                SETB    C
                JMP     STUDY19             
        
STUDY16:        MOV     A,RDATA_HWL2          ;第2位低位宽度为0,不比较直接存储宽度
                JZ      STUDY17
                MOV     A,TH1
                CJNE    A,RDATA_HWH2,STUDY18   ;与第一次存储高位宽度比较,不等则另行存储

STUDY17:        MOV     RDATA_HWH2,TH1
                MOV     RDATA_HWL2,TL1         ;记做0
                CLR     C
                JMP     STUDY19

STUDY18:        MOV     RDATA_HWH3,TH1
                MOV     RDATA_HWL3,TL1  
                CLR     C

STUDY19:        MOV     A,@R0
                RLC     A                      ;低位在前
                MOV     @R0,A
                INC     RDATA_LCON
                DJNZ    R5,STUDY8
                INC     R0
                JMP     STUDY7

STUDY_BACK1:    MOV     R3,#3
STUDY_B11:      ACALL   BZ_800                 ;学习失败,3声短促音

                MOV     R4,#30
STUDY_B12:      LCALL   DEL_20MS
                DJNZ    R4,STUDY_B12
                DJNZ    R3,STUDY_B11
                CLR     GV_XSFLAG
                SETB    ET0               
                JMP     STUDY_B23

STUDY_BACK2:    MOV     A,R5                   ;R5不为0对齐数据
                JZ      STUDY_B22
STUDY_B21:      MOV     A,R4                   
                MOV     R0,A   
                MOV     A,@R0
                RLC     A
                MOV     @R0,A
                DJNZ    R5,STUDY_B21


STUDY_B22:      LCALL   BZ_MU                  ;学习成功,5声短低音
                CLR     GV_XSFLAG
                SETB    STUDY_OK               ;置学习成功标志 
                SETB    ET0         
STUDY_B23:       RET
;----------------------------------------------------------------------
;补偿+145US
BC1:            MOV     A,TL1                 
                CLR     C
                ADDC    A,#140
                MOV     TL1,A 
                CLR     A
                RLC     A
                ADD     A,TH1
                MOV     TH1,A 
                RET
;----------------------------------------------------------------------
;补偿-75US
BC2:            SETB    RS0
                MOV     A,TL1                 
                CLR     C
                SUBB    A,#70
                MOV     TL1,A 
                CLR     A
                RLC     A
                MOV     R0,A
                MOV     A,TH1
                SUBB    A,R0
                MOV     TH1,A 
                CLR     RS0
                RET
;----------------------------------------------------------------------
;补偿-10US
BC3:            SETB    RS0
                MOV     A,TL1                 
                CLR     C
                SUBB    A,#120
                MOV     TL1,A 
                CLR     A
                RLC     A
                MOV     R0,A
                MOV     A,TH1
                SUBB    A,R0

⌨️ 快捷键说明

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