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

📄 test2.a51

📁 RC-5 decoding and device controlling serial controlling using vb
💻 A51
📖 第 1 页 / 共 2 页
字号:
INPUT   EQU     P3.2    ; Port3,Bit2 is used as input. The demodulated signal 
                        ; with active low level is connected to this pin 
    
LF      EQU     0AH     ; Linefeed     
CR      EQU     0DH     ; Carriage return
SPC     EQU     20H     ; Space
RB0     EQU     000H    ; Select Register Bank 0
RB1     EQU     008H    ; Select Register Bank 1  ...poke to PSW to use
SW1	equ P0.0	        ;Switch 1 connected here
SW2	equ P0.1	        ;Switch 2 connected here
SW3	equ P0.2	        ;Switch 3 connected here
SW4	equ P0.3	        ;Switch 4 connected here
SW5	equ P0.4	        ;Switch 5 connected here
SW6	equ P0.5	        ;Switch 6 connected here
SW7	equ P0.6	        ;Switch 7 connected here
SW8	equ P0.7	        ;Switch 8 connected here
SWA  	equ P0		        ;Port at which switches are connected
SWB   EQU P1
SWC   EQU P2
SWD	EQU P3
LAT1	EQU 01H
LAT2  EQU 02H
LAT3  EQU 04H



        DSEG            ; This is internal data memory
        ORG     20H     ; Bit adressable memory

FLAGS:  DS      1      
CONTROL BIT     FLAGS.0  ; toggles with every new keystroke
NEW     BIT     FLAGS.1  ; Bit set when a new command has been received 
PWR	  BIT     FLAGS.2
TMP	  BIT		 FLAGS.3
TMP1	  BIT     FLAGS.4


COMMAND: DS     1       ; Received command byte
SUBAD:  DS      1       ; Device subaddress 
TEMP:	  DS      1
TEMP1:  DS      1
TEMP2:  DS		 1
TEMP3:  DS      1
BUFFER: DS      30      ; Buffer to store length of transmitted pulses
STACK:  DS      1       ; Stack begins here  
             




        CSEG            ; Code begins here

         ORG     00H    ; Reset
         JMP     MAIN
        
         ORG     0003H  ; External Interrupt0
         JMP     RECEIVE
         
			ORG     000BH
			JMP     TMR_1


BIN2BCD:                ;Convert 8 bit value in Acc to 3 digit BCD 
        MOV     B,#100          
        DIV     AB
        ADD A,#30H      
        ACALL DATAWRT
        ;CALL    N_OUT
        XCH     A,B
        MOV     B,#10
        DIV     AB
        ADD A,#30H 
        ACALL DATAWRT
        ;CALL    N_OUT
        XCH     A,B
        ADD A,#30H 
        ACALL DATAWRT
        ;CALL    N_OUT
        RET



RECEIVE:	CLR TR0
         PUSH   PSW           ; save current registerset
         MOV    PSW,#RB1
         PUSH   ACC
         MOV    R0,#BUFFER
REC:     MOV    A,#0
REC0:    INC    A             ; Measure duration of low-level  
         NOP
         NOP                  ; Delay 
         NOP                 
         NOP
         JZ     TIMEOUT       ; End of transmission if duration exeeds 256 counts
         JNB    INPUT,REC0 
         MOV    @R0,A
         INC    R0
         MOV    A,#0          
REC1:    INC    A             ; Measure duration of high-level
         NOP
         NOP                  ; Delay
         NOP
         NOP
         JZ     TIMEOUT       ; End of transmission
         JB     INPUT,REC1
         MOV    @R0,A
         INC    R0
         JMP    REC    
TIMEOUT:  
         MOV    A,BUFFER      ; calculate threshold between short and long pulses 
         INC    R0            ; length of first low-pulse
         ADD    A,BUFFER+1    ; plus length of first high-pulse 
         CLR    C
         RRC    A             ; divided by two
         MOV    R1,A
         CLR    C
         RRC    A             ; plus half of the time
         ADD    A,R1
         MOV    R5,A          ; yields threshold
         MOV    R0,#BUFFER
         MOV    R1,#1         ; initial value  
         MOV    R2,#13        ; Number of bits to decode
DECODE:  MOV    A,@R0
         INC    R0
         CLR    C
         SUBB   A,R5          ; compare length with threshold
         MOV    A,#0
         CPL    C             ; short=1
         RLC    A
         JNZ    NOSKIP
         INC    R0            ; if short skip over next pulse
NOSKIP:  XRL    A,R1          ; new bit is calculated by XOR with previous bit
         MOV    R1,A          ; Store new bit
         RRC    A
         MOV    A,R3          ; Store new Bit in R3/R4 by rotating 
         RLC    A
         MOV    R3,A
         MOV    A,R4
         RLC    A
         MOV    R4,A
         DJNZ   R2,DECODE
         MOV    A,R3          
         ANL    A,#00111111B  ; extract command from R3
         MOV    COMMAND,A
         MOV    A,R3            
         RLC    A             ; do some rotating to extract       
         XCH    A,R4
         RLC    A             ;device address 
         XCH    A,R4
         RLC    A       
         XCH    A,R4    
         RLC    A   
         CLR    CONTROL
         CLR	 P2.1
         JNB    ACC.5,TZ      ; Check control bit
         SETB   CONTROL 
         SETB P2.1        
TZ:      ANL    A,#00011111B  ; mask device address
         MOV    SUBAD,A
         POP    ACC           ; Restore old registerset
         POP    PSW
         SETB   NEW           ; Set flag to indicate the new command
         JNB TMP,CLRT
         SETB TR0
         RETI 
CLRT:		CLR TR0
			RETI
;--------------------------------------------------------------------

TMR_1:	PUSH PSW
         MOV PSW,#RB0
         PUSH ACC
         DJNZ R7,RETT
         CLR EX0
         CLR TR0
         MOV R7,#20H
         MOV TH0,#00H
         MOV TL0,#00H
			ACALL LED_DISP1			
			ACALL CHK1
			CLR TMP
RETT:		POP ACC
			POP PSW
			SETB EX0
			RETI
			

;  ---------==========----------==========---------=========---------


MAIN:    MOV SWA,#00H
			MOV SWB,#00H
			MOV SWC,#00H
			MOV DPTR,#LINE1
			ACALL COMM
			MOV DPTR,#STAN
			ACALL DATA1
			CLR CONTROL
			CLR PWR
			CLR TMP
			MOV TEMP,#00H
			MOV SWA,#00H
			MOV IE,#10000011
			MOV TCON,#00H
			MOV TMOD,#01H
			MOV TH0,#00H
			MOV TL0,#00H
			
			;MOV    TCON,#00H     ; MAKE SURE TIMERS ARE SHUT DOWN.
         MOV    PSW,#RB0      ; Select register bank 0
         MOV    R7,#20H
         MOV    SP,STACK
         SETB   EX0           ; Enable external Interrupt0
         CLR    IT0           ; triggered by a high to low transition  
         SETB   EA   
         CLR    NEW
LOOP1:	SETB P3.6
			SETB P3.7         
LOOP:    JNB    NEW,LOOP     ; Wait until a command has been received
			JNB PWR,CHK_PWR
			;MOV    A,#CR
         ;CALL   C_OUT         ; Ouput carriage return and linefeed
         ;MOV    A,#LF
         ;CALL   C_OUT
         ;MOV    A,FLAGS
         ;ANL    A,#00000001B
         ;CALL   BIN2BCD       ; Output control Bit  
        ; MOV    A,#SPC
        ; CALL   C_OUT
		   
         ;**MOV DPTR,#LINE2
         ;**ACALL COMM
         ;MOV DPTR,#ADDR
         ;ACALL DATA1
         ;MOV    A,SUBAD
         ;ACALL BIN2BCD
         ;CALL   BIN2BCD       ; Output subaddress
         ;MOV    A,#SPC
         ;CALL   C_OUT
         ;**MOV DPTR,#COMM1
         ;**ACALL DATA1
         ;**MOV    A,COMMAND
         ;**ACALL   BIN2BCD       ; Output command
         CLR A
         ;CLR C
         ;MOV C,CONTROL
        ; RLC A
         ;ADD A,#30H
         ;ACALL DATAWRT
         ;CLR A
         ;CLR C
         ;MOV A,TEMP
         ;ADD A,#30H
         ;ACALL DATAWRT
         MOV A,COMMAND
         CJNE A,#0CH,CONT
         CLR    EX0           ; stop receiving
         CLR    EA            ; and 
         ;JB P2.0,$
         SJMP   MAIN         ; return to monitor which has its entry
                              ; point at 8000H
CHK_PWR:	MOV A,COMMAND
			CJNE A,#0CH,LOOP
			SETB PWR
			MOV DPTR,#LINE1
         ACALL COMM
         MOV DPTR,#POW
         ACALL DATA1
         MOV DPTR,#LINE2
         ACALL COMM
         MOV DPTR,#STR1
         ACALL DATA1
         CLR NEW
         SJMP LOOP
			
CONT:    CLR A
			MOV C,CONTROL
    		RLC A
    		CJNE A,TEMP,VALID
    		CLR NEW
         SJMP LOOP
         
    		;MOV    A,COMMAND
   		;CLR    C
    		;SUBB   A,#0CH        ; compare for standby command
    		;JNZ    LOOP          ; go on receiving   		       
VALID:	CLR NEW
			CLR A
			MOV C,CONTROL
			RLC A
			MOV TEMP,A
			MOV A,COMMAND
;-------------------------------------------------------------------
;			JB TMP,STR_VAL
;			CJNE A,#VAL,CHK1
;			SETB  TMP
;			SJMP LOOP
;STR_VAL: CJNE A,#VAL,NXT1
;			CLR TMP
;			SJMP LOOP
;NXT1:	
			JB TMP,SCND_VAL
			SETB TMP
			SETB TR0
			SWAP A
			MOV TEMP1,A
			ACALL LED_DISP
			SJMP LOOP
SCND_VAL:CLR TMP
			;MOV TEMP2,A
			;MOV A,TEMP1
			CLR TR0
			MOV R7,#20H
			MOV TH0,#00H
			MOV TL0,#00H
			ORL A,TEMP1
			MOV TEMP1,A
			ACALL LED_DISP
			SJMP CHK11
			;SJMP LOOP
;----------------------------------------------------------
			
CHK1:		MOV A,TEMP1
			SWAP A
			CJNE A,#01H,SKIP1
			JB SW1,ISSET1
			SETB SW1
			RET
ISSET1:	CLR SW1
			RET
SKIP1:	CJNE A,#02H,SKIP2		;CHECK FOR SW2
			JB SW2,ISSET2
			SETB SW2
			RET
ISSET2:	CLR SW2
			RET
SKIP2:	CJNE A,#03H,SKIP3		;CHECK FOR SW3
			JB SW3,ISSET3
			SETB SW3
			RET
ISSET3:	CLR SW3
			RET
SKIP3:	CJNE A,#04H,SKIP4		;CHECK FOR SW4
			JB SW4,ISSET4
			SETB SW4
			RET
ISSET4:	CLR SW4
			RET
SKIP4:	CJNE A,#05H,SKIP5		;CHECK FOR SW5
			JB SW5,ISSET5
			SETB SW5
			RET
ISSET5:	CLR SW5
			RET
SKIP5:	CJNE A,#06H,SKIP6		;CHECK FOR SW6
			JB SW6,ISSET6
			SETB SW6
			RET
ISSET6:	CLR SW6
			RET
SKIP6:	CJNE A,#07H,SKIP7		;CHECK FOR SW7
			JB SW7,ISSET7
			SETB SW7
			RET
ISSET7:	CLR SW7
			RET
SKIP7:	CJNE A,#08H,SKIP8		;CHECK FOR SW8
			JB SW8,ISSET8
			SETB SW8
			RET
ISSET8:	CLR SW8
			RET

SKIP8:	CJNE A,#09H,SKIPA9
			MOV A,R5
			CLR P3.7
			ACALL DELAY1
			JB ACC.0,ISSET9
			SETB SWB.0
			MOV R5,P1
			RET
ISSET9:	CLR SWB.0
   		MOV R5,P1
   		RET
	
SKIPA9:	RET
;======================------------------=============
CHK11:	MOV A,TEMP1
			CJNE A,#1,SKIPA1
			JB SW1,ISSETA1
			SETB SW1
			LJMP LOOP
ISSETA1:	CLR SW1
			LJMP LOOP
SKIPA1:	CJNE A,#2,SKIPA2		;CHECK FOR SW2
			JB SW2,ISSETA2
			SETB SW2

⌨️ 快捷键说明

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