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

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

📁 带红外学习功能的电话远程遥控
💻 TXT
📖 第 1 页 / 共 4 页
字号:
                MOV     TH1,A 
                CLR     RS0
                RET

;----------------------------------------------------------------------
;自动搜索
AUTO_SEARCH:    MOV     RDATA_PO,#00H      ;清指针 
                CLR     SE_STOP
                SETB    ON_OFF
                MOV     R1,#50
AUTO_DEL:       LCALL   DEL_20MS
                DJNZ    R1,AUTO_DEL
AU_SE0:         CLR     LED1
                LCALL   BZ_800
                LCALL   DM2
                LCALL   EMIT
                SETB    LED1
                SETB    GV_XSFLAG 
                MOV     GV_XS,#3
AU_SE1:         LCALL   KEY_SE
                JB      SE_STOP,AU_SE5
                JB      GV_XSFLAG,AU_SE1
                INC     RDATA_PO
                MOV     R1,RDATA_PO 
                CJNE    R1,#3,AU_SE0

                MOV     R1,#5                            
AU_SE4:         LCALL   BZ_800            ;失败一长声
                DJNZ    R1,AU_SE4
                JMP     AU_SE6               
AU_SE5:         LCALL   BZ_MU             ;成功声
AU_SE6:         RET    
;----------------------------------------------------------------------
;
KEY_SE:         JB      KEY_SEC,KEY_SE1
                LCALL   DEL_20MS
                LCALL   DEL_20MS
                JB      KEY_SEC,KEY_SE1
                SETB    SE_STOP
KEY_SE1:        RET


;---------------------------------------------------------------
;空调遥控器代码读取
DM2:            MOV     A,RDATA_PO
                MOV     B,#64
                MUL     AB               ;开信号地址
                JB      ON_OFF,DM21
                ADD     A,#32            ;关信号地址

DM21:           MOV     R0,A
                MOV     R1,#30H
                MOV     R2,#32            ;32字节
                MOV     DPTR,#TAB
   
DM22:           MOV     A,R0
                MOVC    A,@A+DPTR
                MOV     @R1,A
                INC     R0
                INC     R1
                DJNZ    R2,DM22
                RET
TAB:            DB      019H,055H,01EH,07AH,002H,0ABH,010H,00EH    ;388ON
                DB      005H,0D4H,01EH,0CEH,031H,000H,000H,000H
                DB      0F7H,008H,0E1H,01EH,054H,0ABH,000H,000H
                DB      000H,000H,000H,000H,000H,000H,000H,000H

                DB      019H,055H,01EH,07AH,002H,0ABH,010H,00EH    ;388OFF
                DB      005H,0D4H,01EH,0CEH,031H,000H,000H,000H
                DB      0F7H,008H,0F1H,00EH,054H,0ABH,000H,000H
                DB      000H,000H,000H,000H,000H,000H,000H,000H

                DB      00DH,030H,006H,0E0H,002H,03BH,004H,0B0H    ;09ON
                DB      001H,05DH,01EH,0D6H,071H,000H,000H,000H               
                DB      0C4H,0D3H,064H,080H,000H,024H,010H,0E0H
                DB      000H,000H,000H,000H,000H,012H,000H,000H

                DB      00DH,030H,006H,0E0H,002H,03BH,004H,0B0H    ;09OFF
                DB      001H,05DH,01EH,0D6H,071H,000H,000H,000H
                DB      0C4H,0D3H,064H,080H,000H,004H,010H,0E0H
                DB      000H,000H,000H,000H,000H,022H,000H,000H

                DB      00DH,030H,006H,0E0H,002H,03BH,004H,0B0H    ;2GJON
                DB      001H,05DH,01EH,0D6H,071H,000H,000H,000H
                DB      088H,088H,088H,088H,088H,024H,0C0H,060H
                DB      038H,000H,000H,000H,000H,079H,000H,000H

                DB      00DH,030H,006H,0E0H,002H,03BH,004H,0B0H    ;2GJON
                DB      001H,05DH,01EH,0D6H,071H,000H,000H,000H
                DB      088H,088H,088H,088H,088H,004H,0C0H,060H
                DB      038H,000H,000H,000H,000H,059H,000H,000H



;-------------------------------------------------------------------------
;发射子程序,数据放在20-3F
EMIT:           SETB    ES_END    
                CLR     ES_END 
                MOV     IE,#10001000B       ;仅允许T1中断
                MOV     TMOD,#00010001B     ;T1--16位定时方式
                MOV     TH1,#00H
                MOV     TL1,#00H
                CLR     TR1

                MOV     A,RDATA_HWL3        ;数据脉冲高电平宽度3不位0
                JZ      EMIT1
                MOV     A,RDATA_HWH3
                JZ      EMIT1
                SETB    ES_END              ;特殊结束位标志

EMIT1:          MOV     A,#0FFH             ;引导脉冲1
                CLR     C
                SUBB    A,RLEAD_LWH
                MOV     TH1,A
                MOV     A,#0FFH
                CLR     C
                SUBB    A,RLEAD_LWL
                MOV     TL1,A
                SETB    TR1
                CLR     TOF1
                LCALL   E38KHZ
                CLR     TR1

                
                MOV     A,#0FFH             ;引导脉冲2
                CLR     C
                SUBB    A,RLEAD_HWH
                MOV     TH1,A
                MOV     A,#0FFH
                CLR     C
                SUBB    A,RLEAD_HWL
                MOV     TL1,A
                SETB    TR1
                CLR     TOF1
                JNB     TOF1,$ 
                CLR     TOF1
                CLR     TR1

EMIT2:          MOV     R0,#40H             ;调数据位地址
                MOV     R7,RDATA_LCON
                JNB     ES_END,EMIT3
                DEC     R7                  ;数据脉冲底电平计数放在R7
                               
EMIT3:          MOV     R6,#8
EMIT4:          MOV     A,#0FFH             ;数据脉冲底电平
                CLR     C
                SUBB    A,RDATA_LWH
                MOV     TH1,A
                MOV     A,#0FFH
                CLR     C
                SUBB    A,RDATA_LWL
                MOV     TL1,A
                SETB    TR1
                CLR     TOF1 
                LCALL   E38KHZ
                CLR     TR1

                CLR     C
                MOV     A,@R0
                RLC     A
                MOV     @R0,A
                JNC      EMIT5

                MOV     A,#0FFH           ;数据脉冲1高电平1
                CLR     C
                SUBB    A,RDATA_HWH1
                MOV     TH1,A
                MOV     A,#0FFH
                CLR     C
                SUBB    A,RDATA_HWL1
                MOV     TL1,A
                SETB    TR1
                CLR     TOF1 
                JNB     TOF1,$
                CLR     TOF1 
                CLR     TR1
                JMP     EMIT6                

EMIT5:          MOV     A,#0FFH           ;数据脉冲0高电平2
                CLR     C
                SUBB    A,RDATA_HWH2
                MOV     TH1,A
                MOV     A,#0FFH
                CLR     C
                SUBB    A,RDATA_HWL2
                MOV     TL1,A
                SETB    TR1
                CLR     TOF1 
                JNB     TOF1,$ 
                CLR     TOF1 
                CLR     TR1
                
EMIT6:          DEC     R7
                MOV     A,R7
                JZ      EMIT_END
                DJNZ    R6,EMIT4
                INC     R0
                JMP     EMIT3

EMIT_END:       MOV     A,#0FFH           ;附加数据脉冲底电平1
                CLR     C
                SUBB    A,RDATA_LWH
                MOV     TH1,A
                MOV     A,#0FFH
                CLR     C
                SUBB    A,RDATA_LWL
                MOV     TL1,A
                SETB    TR1
                CLR     TOF1 
                LCALL   E38KHZ
                CLR     TR1
                JNB     ES_END,EMIT_END1
                                       
                MOV     A,#0FFH           ;发射特殊结束位
                CLR     C
                SUBB    A,RDATA_HWH3
                MOV     TH1,A
                MOV     A,#0FFH
                CLR     C
                SUBB    A,RDATA_HWL3
                MOV     TL1,A
                SETB    TR1 
                CLR     TOF1 
                JNB     TOF1,$
                CLR     TOF1 
                CLR     TR1

                MOV     A,#0FFH           ;附加数据脉冲底电平2
                CLR     C
                SUBB    A,RDATA_LWH
                MOV     TH1,A
                MOV     A,#0FFH
                CLR     C
                SUBB    A,RDATA_LWL
                MOV     TL1,A
                SETB    TR1
                CLR     TOF1  
                LCALL   E38KHZ
                CLR     TR1
                

EMIT_END1:      MOV     IE,#0FFH
                SETB    RED_EMI
                MOV     R4,#30
EMIT_END2:      LCALL   DEL_20MS
                DJNZ    R4,EMIT_END2
                LCALL   BZ_800             ;BZ0.5秒
                RET    
;-----------------------------------------------------
;发射38KHZ调制脉冲
E38KHZ:         CPL     RED_EMI
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                JNB     TOF1,E38KHZ
                CLR     TOF1
                SETB    RED_EMI
                RET
;*********************************************************************************
;发送数据到2402子程序
STR_2402:                               
                MOV       BYTECNT,#8        ;发送8位数据
                MOV       SLAADR,#EEPROM    ;数据地址
                LCALL     SENDDATA          
                JB        F0,STR_OUT        
STR_OUT:        RET

;*********************************************************************************
;从2402接收数据子程序
RCV_2402:                               
                MOV       BYTECNT,#16       ;接收16位数据
                MOV       SLAADR,#EEPROM    ;数据地址
                LCALL     RCVDATA           
                JB        F0,RCV_OUT        
RCV_OUT:        RET

;*********************************************************************************
;发送数据到2402子程序
SENDDATA:
            LCALL     START               ;起始位
            MOV       A,SLAADR            ;2402器件地址
            LCALL     SENTBYTE
            JB        F0,SENDRETURN
            MOV       A,SUBADR            ;2402字节地址
            LCALL     SENTBYTE
            JB        F0,SENDRETURN
            MOV       R0,XMTDAT          
SENTNEXT:
            MOV       A,@R0
            LCALL     SENTBYTE            ;发送一个字节
            JB        F0,SENDRETURN
            INC       R0                  
            DJNZ      BYTECNT,SENTNEXT    
            LCALL     STOP                ;停止位
DELAY10:
            MOV       R7,#30H             ;延时10毫秒
D1:
            MOV       R6,#34H
D2:
            DJNZ      R6,D2
            DJNZ      R7,D1
SENDRETURN:
            RET
;2***************************************
;从2402接收数据子程序
RCVDATA:
            LCALL     START                ;起始位
            MOV       A,SLAADR             ;2402器件地址
            LCALL     SENTBYTE
            JB        F0,RCVRETURN
            MOV       A,SUBADR             ;2402字节地址
            LCALL     SENTBYTE
            JB        F0,RCVRETURN       
            LCALL     START                ;重发起始位
            MOV       A,SLAADR
            SETB      ACC.0                ;读信号
            LCALL     SENTBYTE
            JB        F0,RCVRETURN
            CLR       ACK                  
            MOV       R0,RCVDAT            
            DJNZ      BYTECNT,RCVNEXT      
            SJMP      RCVLAST              
RCVNEXT:
            LCALL     RCVBYTE
            MOV       @R0,A                 
            INC       R0                    
            DJNZ      BYTECNT,RCVNEXT       
RCVLAST:
            SETB      ACK                  ;设置应答位
            LCALL     RCVBYTE              
            MOV       @R0,A
            LCALL     STOP
RCVRETURN:
            RET
;3********************************************
;起始位
;3.1------------------------------------------
START:
            SETB      SDA        
            NOP
            SETB      SCL 
            NOP                     
            NOP
            NOP
            NOP
            NOP
            CLR        SDA          
            NOP                    
            NOP
            NOP
            NOP
            NOP
            CLR        SCL         
            RET
;3.2-------------------------------------------------------
;停止位
STOP:
            CLR        SDA
            NOP
            SETB       SCL
            NOP                 
            NOP
            NOP
            NOP
            NOP
            SETB       SDA     
            NOP                 
            NOP
            NOP
            NOP
            RET
;3.3------------------------------------------------------
;发送1个字节数据
SENTBYTE:
            MOV        BITCNT,#08H
SENTB:
            RLC        A
            JC         SENT1
            CLR        SDA
            SJMP       SENT

⌨️ 快捷键说明

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