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

📄 main.asm

📁 公司遥控器IC
💻 ASM
字号:
/*------------------------------------------------------------------------------
Copyright 2006 Dragonchip Ltd.


Version: 1.00
Writer: Danny Ho
------------------------------------------------------------------------------*/
#include <\Register\6688.inc>
#include <\RAM\RAM.asm>

ORG      0000H           ; code segment start at 0000H

        JMP     RESET
ORG      0030H




RESET:
       

	    MOV	R0,#PBCONH				;PB7-4 open drain out
	    MOV	A,#01010101B
	    MOVX	@R0,A
	
	    MOV	R0,#PBCONL				;PB3-0 open drain out
	    MOV	A,#01010101B
	    MOVX	@R0,A

        MOV	R0,#PACONH				;PA7-4 IN int falling edge
	    MOV	A,#00000000B
    	MOVX	@R0,A
			;
    	MOV	R0,#PACONL				;PA3-0 IN int falling edge
    	MOV	A,#00000000B
    	MOVX	@R0,A
			;
    	MOV	R0,#PAPUR				;PULL-UP ENABLE
    	MOV	A,#11111111B
    	MOVX	@R0,A


        MOV     R0,#PCCON		;PC1 = push pull outpot  
    	MOV	A,#10101011B		;REM Port Normal I/O Carrier on
        MOVX    @R0,A
        MOV	R0,#PC				; init PC0 to low
    	MOVX	A,@R0
    	ANL	A,#11111110B
    	MOVX	@R0,A



        MOV	A,#0                            ;
    	MOV	R0,#3FH
INIT_SRAM64BYTE_LOOP:                          ;
    	MOV	@R0,A                           ;
    	DJNZ	R0,INIT_SRAM64BYTE_LOOP
           


	
	   
MAIN1:
       MOV    R0,#PA
	   MOVX   A,@R0
	   MOV    PATEMP,A
       CALL  IR_IN                          ;等待红外有效信号
       JNB  RUNOK,MAIN1
       clr  RUNOK

           
           

	   CJNE  A,#06H,RUN1
       ACALL  LOOP1
       AJMP  MAIN1
RUN1:
       CJNE  A,#0DH,RUN2
	   ACALL  LOOP2
	   AJMP  MAIN1
RUN2:
       CJNE  A,#0EH,RUN3
	   ACALL  LOOP3
	   AJMP  MAIN1
RUN3:
       CJNE  A,#0FH,RUN4
	   ACALL  LOOP4
	   AJMP  MAIN1
RUN4:
       CJNE  A,#01DH,RUN5
	   ACALL  LOOP5
	   AJMP  MAIN1
RUN5:
       CJNE  A,#1EH,RUN6
	   ACALL  LOOP6
	   AJMP  MAIN1
RUN6:
       CJNE  A,#1FH,RUN7
	   ACALL  LOOP7
	   AJMP  MAIN1
RUN7:
       CJNE  A,#04H,RUN8
	   ACALL  LOOP8
	   AJMP  MAIN1
RUN8:
       CJNE  A,#05H,RUN9
	   ACALL  LOOP9
	   AJMP  MAIN1
RUN9:
       CJNE  A,#16H,RUN10
	   ACALL  LOOP10
	   AJMP  MAIN1
RUN10:
       CJNE  A,#1AH,RUN11
	   ACALL  LOOP11
	   AJMP  MAIN1
RUN11:
       CJNE  A,#00H,RUNOVER
	   ACALL  LOOP12
	   AJMP  MAIN1

RUNOVER:
       AJMP  MAIN1
           
 ;**********************************************************
 ; 0.14MS延时子程序
 ; IR解码使用
 ;**********************************************************
DEL:
	   MOV	R6,#140
DLA:   
       DJNZ    R6,DLA          ; T3=3
	   RET

IR_IN:
       MOV  R0,#CODE0
       MOV  R4,#28
IR_IN1:
       CALL  DEL                  ;延时4ms,去干扰再确认IR信号是否出现
       DJNZ  R4,IR_IN1
	   
	   MOV    R1,#PA
	   MOVX   A,@R1
	   MOV    PATEMP,A
	  
       JB  IRIN,IR_END         ;如果IRIN=1没有IR信号出现,则退出
WAIT_H:   
           
	   MOV    R1,#PA
	   MOVX   A,@R1
	   MOV    PATEMP,A
	  
       JB  IRIN,WAIT_H1      ;等IR变为高电平避开9ms低电平引导脉冲
       CALL  DEL
       JMP   WAIT_H
WAIT_H1:
       MOV  R3,#0               ;8位数清为0
WAIT_L:   
     
	   MOV    R1,#PA
	   MOVX   A,@R1
	   MOV    PATEMP,A

       JNB  IRIN,WAIT_H2      ;等 IR 变为低电平
       CALL  DEL
       JMP  WAIT_L
WAIT_H2: 
      
	   MOV    R1,#PA
	   MOVX   A,@R1
	   MOV    PATEMP,A

       JB  IRIN,IR_COUN        ;等 IR 变为高电平
       CALL  DEL
       JMP  WAIT_H2
IR_COUN:
       MOV  R2,#0                 ;对高电平进行0.14ms计数
IR_COUN1:
       CALL  DEL

	   MOV    R1,#PA
	   MOVX   A,@R1
	   MOV    PATEMP,A

       JB  IRIN, IR_COUN2    ;等 IR 变为高电平
                                         ;IR=0,检查R2中的计数值
       MOV  A,#8
       CLR  C                       ;清借位标志
       SUBB  A,R2          ;判断高低位
                                         ;若C=0,则解码为“0"
                                          ;若C=1,则解码为“1"
       MOV  A,@R0             ;取出原先的数据
       RRC  A                ;将借位标志C移入A
       MOV  @R0,A            ;处理完一位,将数据写入
       INC  R3               ;接收字节计数加1
       CJNE  R3,#8,WAIT_L  ;需处理完8位
       MOV  R3,#0
       INC  R0               ;存放IR数据值加1
       CJNE  R0,#CODE0+4,WAIT_L    ;收集到4字节了
       JMP   IR_NUM
IR_COUN2:
       INC  R2
       CJNE  R2,#20,IR_COUN1     ;0.14ms计数过长,则自动离开
IR_END:   
       RET


 ;**********************************************************
IR_NUM:
       MOV A,DATA1
       CPL A                     ;将(25H)取反后和24H比较
       CJNE A,DATA0,IR_NUM1   ;如果不等表示接收数据错误,放弃。
	   MOV A,CODE0
       CPL A
	   CJNE A,CODE1,IR_NUM1

       MOV A,CODE0               ;效验用户码是否为 "00"
	   CJNE  A,#53H,IR_NUM1
		   ;dec a
           ;JNZ  IR_NUM1
       ACALL  BEEP_BL

       SETB  RUNOK               ;解码成功20H.0置1。



	   mov a,DATA0



IR_NUM1:
           RET
LASE:


LOOP1:      
        MOV  R0,#PB
	    MOV  A,#0
	    MOVX @R0,A
        ACALL DELAY
        RET
LOOP2:
        MOV  R0,#PB
	    MOV  A,#3
	    MOVX @R0,A
        ACALL DELAY
        RET
LOOP3:
	    MOV  R0,#PB
	    MOV  A,#7
	    MOVX @R0,A
        ACALL DELAY
        RET
LOOP4:
	    MOV  R0,#PB
	    MOV  A,#0FH
	    MOVX @R0,A
        ACALL DELAY
        RET
LOOP5:
	    MOV  R0,#PB
	    MOV  A,#1FH
	    MOVX @R0,A
        ACALL DELAY
        RET
LOOP6:
	    MOV  R0,#PB
	    MOV  A,#3FH
	    MOVX @R0,A
        ACALL DELAY
        RET
LOOP7:
	    MOV  R0,#PB
	    MOV  A,#7FH
	    MOVX @R0,A
        ACALL DELAY
        RET
LOOP8:
	    MOV  R0,#PB
	    MOV  A,#0FFH
	    MOVX @R0,A
        ACALL DELAY   
	    RET


LOOP9:
            
        MOV  R0,#PB
	    MOV  A,#1
	    MOVX @R0,A
        ACALL DELAY
 
        MOV  R0,#PB
	    MOV  A,#3
	    MOVX @R0,A
        ACALL DELAY
	    MOV  R0,#PB
	    MOV  A,#7
	    MOVX @R0,A
        ACALL DELAY

	    MOV  R0,#PB
	    MOV  A,#0FH
	    MOVX @R0,A
        ACALL DELAY

	    MOV  R0,#PB
	    MOV  A,#1FH
	    MOVX @R0,A
        ACALL DELAY
 
	    MOV  R0,#PB
	    MOV  A,#3FH
	    MOVX @R0,A
        ACALL DELAY

	    MOV  R0,#PB
	    MOV  A,#7FH
	    MOVX @R0,A
        ACALL DELAY

	    MOV  R0,#PB
	    MOV  A,#0FFH
	    MOVX @R0,A
        ACALL DELAY   
	    RET

LOOP10:
        MOV   DPTR,#ONLY1
		MOV   A,#0
                MOV  TEMP,#0
LOOP101:
       ; MOV   A,TEMP
       	MOVC  A,@A+DPTR
		MOV  R0,#PB
	    
	    MOVX @R0,A
        ACALL DELAY
		INC   TEMP
		MOV   A,TEMP
		CJNE  A,#9,LOOP101
		RET

LOOP11:
	    MOV   DPTR,#ADDLED
		MOV   A,#0
              MOV  TEMP,#0
LOOP111:
       	MOVC  A,@A+DPTR
		MOV  R0,#PB
	    
	    MOVX @R0,A
        ACALL DELAY
		INC   TEMP
		MOV  A,TEMP
		CJNE  A,#9,LOOP111
		RET



LOOP12:
        MOV   DPTR,#ROUND
		MOV   A,#0
           MOV  TEMP,#0
LOOP121:
       	MOVC  A,@A+DPTR
		MOV  R0,#PB
	    
	    MOVX @R0,A
        ACALL DELAY
		INC   TEMP
		MOV   A,TEMP
		CJNE  A,#9,LOOP121
		RET





BEEP_BL:
         MOV  R6,#100
  BL1:
         CALL  DEX1
       
	    MOV	R0,#PC				; init PC0 to low
	    MOVX	A,@R0
	    ORL     A,#00000001B
	    MOVX	@R0,A
       
        DJNZ  R6,BL1

	    MOV	R0,#PC				; init PC0 to low
    	MOVX	A,@R0
    	ANL     A,#11111110B
    	MOVX	@R0,A

         RET
 DEX1:
         MOV  R7,#180
 DEX2:
         NOP
         DJNZ  R7,DEX2
         RET



DELAY:
         MOV  R6,#055H
 D1:
         MOV  R7,#0FFH
 D2:   
         MOV  R5,#10

 D3:     DJNZ R5,D3
         DJNZ R7,D2
         DJNZ R6,D1
         RET

FLASHDATA:
 

ONLY1:
       DB  0FFH,0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
ADDLED:
       DB  0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,000H
ROUND:
       DB  0FFH,0E7H,0C3H,081H,000H,081H,0C3H,0E7H,0FFH
SHUZHI:

       END


⌨️ 快捷键说明

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