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

📄 po.asm

📁 使用8051开发的 远程控制强电家电的程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;  ---------==========----------==========---------=========---------
;      PROGRAM FOR REMOTE CONTROL FOR 8+2
;  ---------==========----------==========---------=========---------
 
$MOD51
 
INPUT   EQU     P3.2    ; Port3,Bit2 is used as input. The demodulated signal
             		           ; with active low level is connected to this pin
ZERO    EQU    P3.3  ; Zero Crossing Input

OUTPUT EQU P2
OP1	EQU	P2.2	
OP2	EQU	P2.3
OP3	EQU	P2.4	
OP4	EQU	P2.7	
OP5	EQU	P2.6	
OP6	EQU	P2.5	

FAN	EQU	P0.7	
FANL	EQU	P3.6
SWITCH 	EQU 	P3.7


OP7	EQU	P0.0	;A,7
OP8	EQU	P0.1	;B,6
OP9	EQU	P0.2	;C,4
OP10	EQU	P0.3	;D,2
OP11	EQU	P0.4	;E,1
OP12	EQU	P0.5	;F,9
OP13	EQU	P0.6	;G,10

SDA EQU P2.1  	;SDA=PIN5
SCL EQU P2.0	;SCL=PIN6
WTCMD   EQU     10100000B       ;WRITE DATA COMMAND Note 3
RDCMD   EQU     10100001B       ;READ DATA COMMAND Note 3


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

STATUS:	DS	1		;Lights Status Bits
LIG1	BIT	STATUS.0
LIG2	BIT	STATUS.1
LIG3	BIT	STATUS.2
LIG4	BIT	STATUS.3
LIG5	BIT	STATUS.4
LIG6	BIT	STATUS.5
LIG7	BIT	STATUS.6		;FAN



COMMAND: DS     1       ; Received command byte
SUBAD:  DS      1       ; Device subaddress
BUFFER: DS      30      ; Buffer to store length of transmitted pulses
TOGGLE: DS     1	;Toggle every bit
ANS: DS	1	;
SPEED:	DS	1 ; Speed control Register
SPEED1:	DS	1
ADDR:	DS	1
STACK:  DS      1       ; Stack begins here
CSEG            ; Code begins here
 
;---------==========----------==========---------=========---------
;              PROCESSOR INTERRUPT AND RESET VECTORS
;---------==========----------==========---------=========---------
 
         ORG     00H    ; Reset
         JMP     MAIN
 
         ORG     0003H  ; External Interrupt0
         JMP     RECEIVE

         ORG 000BH        ;Timer Interrupt 0
          JMP TRIGGER

         ORG 0013H ; External Interrupt 1
         JMP SPED
 
                  
	 
;  ---------==========----------==========---------=========---------
;  Interrupt 0  routine
;  ---------==========----------==========---------=========---------
 
RECEIVE:
      	  MOV  2,#255               ; Time Loop (3/4 bit time) 
             DJNZ 2,$                  ; Waste Time to sync second bit 
                MOV  2,#255               ; Time Loop (3/4 bit time) 
             Djnz 2,$                  ; Waste Time to sync second bit 
	Mov  2,#145               ; Time Loop (3/4 bit time) 
             Djnz 2,$                  ; Waste Time to sync second bit               
	clr	a
	mov	r6,#07h

pol1:	mov	c,Input
	rlc	a
	Mov  2,#255               ; Waste time for next BIT 
             Djnz 2,$      
	Mov  2,#255               ; Time Loop (3/4 bit time) 
             Djnz 2,$                  ; Waste Time to sync second bit 
	Mov  2,#255               ; Time Loop (3/4 bit time) 
             Djnz 2,$                  ; Waste Time to sync second bit 
	Mov  2,#114               ; Time Loop (3/4 bit time) 
             Djnz 2,$                  ; Waste Time to sync second bit 
	djnz	r6,pol1
	MOV SUBAD,A
	
	mov	r6,#06h
pol2:	
	mov	c,Input
	rlc	a

	Mov  2,#255               ; Waste time for next BIT 
             Djnz 2,$      
	Mov  2,#255               ; Time Loop (3/4 bit time) 
             Djnz 2,$                  ; Waste Time to sync second bit 
	Mov  2,#255               ; Time Loop (3/4 bit time) 
             Djnz 2,$                  ; Waste Time to sync second bit 
	Mov  2,#114               ; Time Loop (3/4 bit time) 
             Djnz 2,$                  ; Waste Time to sync second bit 
	djnz	r6,pol2
	Mov  COMMAND,A             ; Save Command at IRData memory 
	

	MOV A,SUBAD
	MOV ADDR,A
	ANL A,#0FH
	MOV SUBAD,A
	CJNE A,#03H,ZXC1
	MOV A,COMMAND
	CPL A
	MOV COMMAND,A
	AJMP ASZ
ZXC1:	MOV A,SUBAD
	CJNE A,#00H,ANSS
	AJMP ASZ

ASZ:	MOV A,ADDR
	ANL A,#20H
	MOV TOGGLE,A
	CJNE A,ANS,ANSS
	AJMP WAR
ANSS:	JMP ANS1	
WAR:	
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!     	
	MOV A,COMMAND
;-------------------------------------------
	MOV R0,A
	XRL A,#01H		; device 1
	JNZ CH1
	CALL DEV1
	AJMP GO
CH1:	MOV A,R0
	XRL A,#02H		; device 2
	JNZ CH2
	CALL DEV2
	AJMP GO
CH2:	MOV A,R0
	XRL A,#03H		; device 3
	JNZ CH3
	CALL DEV3
	AJMP GO
CH3:	MOV A,R0
	XRL A,#04H		; device 4
	JNZ CH4
	CALL DEV4
	AJMP GO
CH4:	MOV A,R0
	XRL A,#05H		; device 5
	JNZ CH5
	CALL DEV5
	AJMP GO
CH5:	MOV A,R0
	XRL A,#06H		; device 6
	JNZ CH6
	CALL DEV6
	AJMP GO
CH6:	MOV A,R0
	XRL A,#0DH		; Fan1 on/off
	JNZ CH7
	CALL DEV7
	AJMP GO
CH7:	MOV A,R0
	XRL A,#0CH		; all devices off
	JNZ CH8
	CALL DEV8
	AJMP GO
CH8:	MOV A,R0
	XRL A,#10H		; Fan1 speed +
	JNZ CH9
	CALL DEV9
	AJMP GO
CH9:	MOV A,R0
	XRL A,#11H		; Fan1 speed -
	JNZ GO
	CALL DEV10
	AJMP GO
GO:
;***********************************************************
; This routine writes a byte of data to EEPROM
; The EEPROM address is assumed to be in R4.  See NOTE 3
; The DATA to be written is asumed to be in R1
;***********************************************************
	MOV     A,#WTCMD        ;LOAD WRITE COMMAND
      	  CALL    OUTS            ;SEND IT
     	   MOV     A,#05H            ;GET BYTE ADDRESS
    	    CALL    OUT             ;SEND IT
    	    MOV     A,STATUS            ;GET DATA
    	    CALL    OUT             ;SEND IT
    	    CALL    STOP            ;SEND STOP CONDITION
 ;*********************************************************** 
	MOV ANS,TOGGLE
	MOV A,ANS
	CPL ACC.5
	MOV ANS,A
	 SETB   NEW           ; Set flag to indicate the new command

;################################################################	
ANS1:        
	RETI
 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 	DEVICE DECODING
 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DEV1:	CPL OP1			;Light 1
	JB OP1,DE1
	SETB LIG1
	RET
DE1:	CLR LIG1
	RET
;-------------------------------------------
DEV2:	CPL OP2			;Light 2
	JB OP2,DE2
	SETB LIG2
	RET
DE2:	CLR LIG2
	RET
;-------------------------------------------
DEV3:	CPL OP3			;Light 3
	JB OP3,DE3
	SETB LIG3
	RET
DE3:	CLR LIG3
	RET
;-------------------------------------------
DEV4:	CPL OP4			;Light 4
	JB OP4,DE4	
	SETB LIG4
	RET
DE4:	CLR LIG4
	RET
;-------------------------------------------
DEV5:	CPL OP5			;Light 5
	JB OP5,DE5
	SETB LIG5
	RET
DE5:	CLR LIG5
	RET
;-------------------------------------------
DEV6:	CPL OP6			;Light 6
	JB OP6,DE6
	SETB LIG6
	RET
DE6:	CLR LIG6
	RET
;-------------------------------------------
DEV7:	CPL LIG7			;Fan
	JNB LIG7,KLJ
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;	SPEED RESTORATION
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
	MOV     A,#WTCMD        ;LOAD WRITE COMMAND TO SEND ADDRESS
        	CALL    OUTS            ;SEND IT
       	 MOV     A,#06H            ;GET LOW BYTE ADDRESS
       	 CALL    OUT             ;SEND IT
       	 CALL    CREAD           ;GET DATA BYTE
	MOV SPEED,R1
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
	CLR FANL
	RET
KLJ:	SETB FANL
	RET		; Fan off

;-------------------------------------------
DEV8:			;all off
	MOV STATUS,#00H
	MOV OUTPUT,#0FFH
	CLR TR0
	SETB FANL
	RET
;-------------------------------------------
DEV9:			; Increase Speed 
	MOV R2,SPEED
	MOV A,#08H		;Chk If > than 08
	CLR C
	SUBB A,R2
	JNC DFDF
	MOV SPEED,#00H
DFDF:	CJNE R2,#08,DFF
	RET
DFF:	INC SPEED
;***********************************************************
	MOV     A,#WTCMD        ;LOAD WRITE COMMAND
      	  CALL    OUTS            ;SEND IT
     	   MOV     A,#06H            ;GET BYTE ADDRESS
    	    CALL    OUT             ;SEND IT
    	    MOV     A,SPEED            ;GET DATA
    	    CALL    OUT             ;SEND IT
    	    CALL    STOP            ;SEND STOP CONDITION
 ;*********************************************************** 
	CALL DISP
	RET
;-------------------------------------------
DEV10:			;Decrease Speed
	MOV R2,SPEED
	MOV A,#08H
	CLR C
	SUBB A,R2
	JNC DYDF
	MOV SPEED,#01H
DYDF:	CJNE R2,#00,DFG
	RET
DFG:	DEC SPEED
;***********************************************************
	MOV     A,#WTCMD        ;LOAD WRITE COMMAND
      	  CALL    OUTS            ;SEND IT
     	   MOV     A,#06H            ;GET BYTE ADDRESS
    	    CALL    OUT             ;SEND IT
    	    MOV     A,SPEED            ;GET DATA
    	    CALL    OUT             ;SEND IT
    	    CALL    STOP            ;SEND STOP CONDITION
 ;*********************************************************** 
	CALL DISP
	RET

;  ---------==========----------==========---------=========---------
;  Interrupt 1  routine
;  ---------==========----------==========---------=========---------
SPED:	
	SETB FAN
	JB LIG7,QWZ
	CLR TR0
	RETI
QWZ:	MOV R2,SPEED
	CJNE R2,#00H,QW1		; Fan Off
	SETB FAN
	CLR TR0
	RETI

QW1:	CJNE R2,#01H,QW2		;Fan Speed 1
	MOV TL0,#011H
	MOV TH0,#0F0H
	SETB TR0
	RETI

QW2:	CJNE R2,#02H,QW3		;Fan Speed 2
	MOV TL0,#0FFH
	MOV TH0,#0F0H
	SETB TR0
	RETI

QW3:	CJNE R2,#03H,QW4		;Fan Speed 3
	MOV TL0,#0FFH
	MOV TH0,#0F4H
	SETB TR0
	RETI

QW4:	CJNE R2,#04H,QW5		;Fan Speed 4
	MOV TL0,#0FFH
	MOV TH0,#0F6H
	SETB TR0
	RETI
QW5:	CJNE R2,#05H,QW6		;Fan Speed 5
	MOV TL0,#0FFH
	MOV TH0,#0F7H
	SETB TR0
	RETI

⌨️ 快捷键说明

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