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

📄 po.asm

📁 使用8051开发的 远程控制强电家电的程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
QW6:	CJNE R2,#06H,QW7		;Fan Speed 6
	MOV TL0,#0FFH
	MOV TH0,#0F9H
	SETB TR0
	RETI
QW7:	CJNE R2,#07H,QW8		;Fan Speed 7
	MOV TL0,#0FFH
	MOV TH0,#0FAH
	SETB TR0
	RETI
QW8:	CJNE R2,#08H,QW9		;Fan full Speed
	CLR TR0
	CLR FAN
QW9:	RETI
	
	


;  ---------==========----------==========---------=========---------
;  Timer 0  routine
;  ---------==========----------==========---------=========---------
TRIGGER:
	CLR FAN
	CLR TR0
	RETI


;  ---------==========----------==========---------=========---------
;  Main routine. Program execution starts here.
;  ---------==========----------==========---------=========---------
MAIN:    
	MOV SP,#60H
	MOV OUTPUT,#0FFH	;Switch off all devices
	MOV STATUS,#00H		;Clear all devices bits
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;	RESTORATION
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
	SETB SWITCH
	JB SWITCH,NMB
	MOV     A,#WTCMD        ;LOAD WRITE COMMAND TO SEND ADDRESS
        CALL    OUTS            ;SEND IT
       	MOV     A,#05H            ;GET LOW BYTE ADDRESS
       	CALL    OUT             ;SEND IT
       	CALL    CREAD           ;GET DATA BYTE
	MOV STATUS,R1
	CALL RESTORE
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;	SPEED RESTORATION
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
NMB:	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
	CALL DISP
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

      	SETB   EX0          		 ; Enable external Interrupt0
        	CLR    IT0          		 ; triggered by a high to low transition
	SETB EX1
	CLR    IT1          		 ; triggered by a high to low transition
	MOV TMOD,#11H
	SETB ET0
	SETB ET1
	SETB   EA

         	MOV ANS,#00H		;clear temp toggle bit
    	
	CLR   NEW
	
	
LOO:	
	JNB NEW,LOO
	CLR NEW
	AJMP LOO

;&&&&&&&&&&&&&&&&&&&&&&&&&&&&
; 	POWER RESTORE
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&
RESTORE:
	JB STATUS.0,UTR1
	SETB OP1
	AJMP MN1
UTR1:	CLR OP1
MN1:	JB STATUS.1,UTR2
	SETB OP2
	AJMP MN2
UTR2:	CLR OP2
MN2:	JB STATUS.2,UTR3
	SETB OP3
	AJMP MN3
UTR3:	CLR OP3
MN3:	JB STATUS.3,UTR4
	SETB OP4
	AJMP MN4
UTR4:	CLR OP4
MN4:	JB STATUS.4,UTR5
	SETB OP5
	AJMP MN5
UTR5:	CLR OP5
MN5:	JB STATUS.5,UTR6
	SETB OP6
	AJMP MN6
UTR6:	CLR OP6
MN6:	JB STATUS.6,UTR7
	SETB FANL
	AJMP MN7
UTR7:	CLR FANL
MN7:	RET	

;&&&&&&&&&&&&&&&&&&&&&&&&&&&&
; 	7 SEGMENT DISPLAY
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DISP:
	MOV R2,SPEED
	CJNE R2,#00H,AAS1
	CLR OP7
	CLR OP8
	CLR OP9
	CLR OP10
	CLR OP11
	CLR OP12
	SETB OP13
	RET
AAS1:	MOV R2,SPEED
	CJNE R2,#01H,AS2
	CLR OP8
	CLR OP9
	SETB OP7
	SETB OP10
	SETB OP11
	SETB OP12
	SETB OP13
	RET
AS2:	MOV R2,SPEED
	CJNE R2,#02H,AS3
	CLR OP7
	CLR OP8
	CLR OP10
	CLR OP11
	CLR OP13
	SETB OP9
	SETB OP12
	RET
AS3:	MOV R2,SPEED
	CJNE R2,#03H,AS4
	CLR OP7
	CLR OP8
	CLR OP9
	CLR OP10
	CLR OP13
	SETB OP11
	SETB OP12
	RET
AS4:	MOV R2,SPEED
	CJNE R2,#04H,AS5
	CLR OP8
	CLR OP9
	CLR OP12
	CLR OP13
	SETB OP7
	SETB OP10
	SETB OP11
	RET
AS5:	MOV R2,SPEED
	CJNE R2,#05H,AS6
	CLR OP7
	CLR OP9
	CLR OP10
	CLR OP12
	CLR OP13
	SETB OP8
	SETB OP11
	RET
AS6:	MOV R2,SPEED
	CJNE R2,#06H,AS7
	CLR OP7
	CLR OP9
	CLR OP10
	CLR OP11
	CLR OP12
	CLR OP13
	SETB OP8
	RET
AS7:	MOV R2,SPEED
	CJNE R2,#07H,AS8
	CLR OP7
	CLR OP8
	CLR OP9
	SETB OP10
	SETB OP11
	SETB OP12
	SETB OP13
	RET
AS8:	MOV R2,SPEED
	CJNE R2,#08H,AS9
	CLR OP7
	CLR OP8
	CLR OP9
	CLR OP10
	CLR OP11
	CLR OP12
	CLR OP13
AS9:	RET
	


 ;***********************************************************************
; THIS ROUTINE SENDS OUT CONTENTS OF THE ACCUMULATOR
; to the EEPROM and includes START condition.  Refer to the data sheets
; for discussion of START and STOP conditions.
;***********************************************************************

OUTS:   MOV     R2,#8           ;LOOP COUNT -- EQUAL TO BIT COUNT
        SETB   SDA            ;INSURE DATA IS HI               
        SETB    SCL            ;INSURE CLOCK IS HI
        NOP                     ;NOTE 1
        NOP                     
        NOP
        CLR     SDA            ;START CONDITION -- DATA = 0
        NOP                     ;NOTE 1
        NOP      
        NOP
          CLR     SCL            ;CLOCK = 0
OTSLP:  RLC     A               ;SHIFT BIT
        JNC     BITLS
        SETB    SDA            ;DATA = 1
        JMP     OTSL1           ;CONTINUE
BITLS:  CLR     SDA            ;DATA = 0
OTSL1:  SETB    SCL            ;CLOCK HI
        NOP                     ;NOTE 1
        NOP
        NOP
        
        CLR     SCL            ;CLOCK LOW
        DJNZ    R2,OTSLP        ;DECREMENT COUNTER
        SETB    SDA            ;TURN PIN INTO INPUT
        NOP                     ;NOTE 1
                             
        SETB    SCL            ;CLOCK ACK
        NOP                     ;NOTE 1
        NOP
        NOP
      
        CLR     SCL
        RET

;**********************************************************************
; THIS ROUTINE SENDS OUT CONTENTS OF ACCUMLATOR TO EEPROM
; without sending a START condition.
;**********************************************************************

OUT:    MOV     R2,#8           ;LOOP COUNT -- EQUAL TO BIT COUNT
OTLP:   RLC     A               ;SHIFT BIT
        JNC     BITL            
        SETB    SDA            ;DATA = 1
        JMP     OTL1            ;CONTINUE
BITL:   CLR     SDA            ;DATA = 0
OTL1:   SETB    SCL            ;CLOCK HI
        NOP                     ;NOTE 1
        NOP
        NOP
     
        CLR     SCL            ;CLOCK LOW
        DJNZ    R2,OTLP         ;DECREMENT COUNTER
        SETB    SDA            ;TURN PIN INTO INPUT
        NOP                     ;NOTE 1
     
        SETB    SCL            ;CLOCK ACK
        NOP                     ;NOTE 1
        NOP
        NOP
      
        CLR     SCL
        RET


STOP:   CLR     SDA            ;STOP CONDITION SET DATA LOW
        NOP                     ;NOTE 1
        NOP
        NOP
      
        SETB    SCL            ;SET CLOCK HI
        NOP                     ;NOTE 1
        NOP
        NOP
      
        SETB    SDA            ;SET DATA HIGH
        RET
        

;*******************************************************************
; THIS ROUTINE READS A BYTE OF DATA FROM EEPROM
; From EEPROM current address pointer.
; Returns the data byte in R1
;*******************************************************************
CREAD:  MOV     A,#RDCMD        ;LOAD READ COMMAND
        CALL    OUTS            ;SEND IT
        CALL    IN              ;READ DATA
        MOV     R1,A            ;STORE DATA
        CALL    STOP            ;SEND STOP CONDITION
        RET

;**********************************************************************
; THIS ROUTINE READS IN A BYTE FROM THE EEPROM
; and stores it in the accumulator
;**********************************************************************

IN:     MOV     R2,#8           ;LOOP COUNT
        SETB    SDA            ;SET DATA BIT HIGH FOR INPUT
INLP:   CLR     SCL            ;CLOCK LOW
        NOP                     ;NOTE 1
        NOP
        NOP
        NOP
     
        SETB    SCL            ;CLOCK HIGH
        CLR     C               ;CLEAR CARRY
        JNB     SDA,INL1       ;JUMP IF DATA = 0
        CPL     C               ;SET CARRY IF DATA = 1
INL1:   RLC     A               ;ROTATE DATA INTO ACCUMULATOR
        DJNZ    R2,INLP         ;DECREMENT COUNTER
        CLR     SCL            ;CLOCK LOW
        RET

;*********************************************************************
; This routine test for WRITE DONE condition 
; by testing for an ACK.
; This routine can be run as soon as a STOP condition
; has been generated after the last data byte has been sent
; to the EEPROM. The routine loops until an ACK is received from 
; the EEPROM. No ACK will be received until the EEPROM is done with
; the write operation.
;*********************************************************************
ACKTST: MOV     A,#WTCMD        ;LOAD WRITE COMMAND TO SEND ADDRESS
        MOV     R2,#8           ;LOOP COUNT -- EQUAL TO BIT COUNT
        CLR     SDA            ;START CONDITION -- DATA = 0
        NOP                     ;NOTE 1
        NOP
        NOP
           
        CLR     SCL            ;CLOCK = 0
AKTLP:  RLC     A               ;SHIFT BIT
        JNC     AKTLS
        SETB    SDA            ;DATA = 1
        JMP     AKTL1           ;CONTINUE
AKTLS:  CLR     SDA            ;DATA = 0
AKTL1:  SETB    SCL            ;CLOCK HI
        NOP                     ;NOTE 1
        NOP
        NOP
      
        CLR     SCL            ;CLOCK LOW
        DJNZ    R2,AKTLP        ;DECREMENT COUNTER
        SETB    SDA            ;TURN PIN INTO INPUT
        NOP                     ;NOTE 1
      
        SETB    SCL            ;CLOCK ACK
        NOP                     ;NOTE 1
        NOP
        NOP
       
        JNB     SDA,EXIT       ;EXIT IF ACK (WRITE DONE)
        JMP     ACKTST          ;START OVER
EXIT:   CLR     SCL            ;CLOCK LOW
        CLR     SDA            ;DATA LOW
        NOP                     ;NOTE 1
        NOP
        NOP
      
        SETB    SCL            ;CLOCK HIGH
        NOP
        NOP
        SETB    SDA            ;STOP CONDITION
        RET


        END

⌨️ 快捷键说明

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