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

📄 fan.a51

📁 一个使用单片机开发
💻 A51
📖 第 1 页 / 共 2 页
字号:
INCLUDE REG_52.PDF

ZERO    EQU    P3.3  ; Zero Crossing Input

DIS_A	EQU	P0.2		
DIS_B	EQU	P0.3		
DIS_C	EQU	P0.4
DIS_D	EQU	P0.6
DIS_E	EQU	P0.5
DIS_F	EQU	P0.1
DIS_G	EQU	P0.0

DIS1	EQU	P0.7
DIS2	EQU	P2.7                
DIS3	EQU	P2.6 
DIS4	EQU	P2.5

PLUS	EQU	P1.0
MINUS	EQU	P1.1
AUTO	EQU	P1.2
AUTO_LED	EQU	P1.3

SENSOR1	EQU	P2.0


FAN	EQU	P2.1

RB0     EQU     000H    ; Select Register Bank 0
RB1     EQU     008H    ; Select Register Bank 1  ...poke to PSW to use


DSEG            ; This is internal data memory
ORG     20H     ; Bit adressable memory
SENP:		DS		1
SENP1		BIT	SENP.0
SENP2		BIT	SENP.1
SENP3		BIT	SENP.2
SENP4		BIT	SENP.3
SCRLBIT	BIT	SENP.4
EPROM		BIT	SENP.5
MINUS		BIT	SENP.6

FLAGS1:	DS		1
RECEIVED	BIT 	FLAGS1.0
MIN1		BIT	FLAGS1.3


COUNT:	DS	1
SPED:	DS	1
VALUE_1:	DS	1
VALUE_2:	DS	1
VALUE_3:	DS	1
VALUE_4:	DS	1

NUMB1:	DS	1
NUMB2:	DS	1
NUMB3:	DS	1
NUMB4:	DS	1

TEMP1:	DS		1
TEMP2:	DS		1
TEMP3:	DS		1
TEMP4:	DS		1
TEMP5:	DS		1
TEMP6:	DS		1
TEMP7:	DS		1
TEMP8:	DS		1
TEMP9:	DS		1
TEMP10:	DS		1

TEMPS:	DS		1

SPEED1:	DS		1
SPEED2:	DS		1
SPEED3:	DS		1
SPEED4:	DS		1
SPEED5:	DS		1
SPEED6:	DS		1
SPEED7:	DS		1
SPEED8:	DS		1
SPEED9:	DS		1
SPEED10:	DS		1

SPEEDS:	DS		1

SPEED:	DS		1

RAM:		DS	9
TEP1:		DS	1
TEP2:		DS	1

TEMP1E:	DS		1			;TEMPERATURE ALARM DATAS 1
TEMP1L:	DS		1
TEMP1LD:	DS		1
TEMP1H:	DS		1
TEMP1HD:	DS		1

TEMP1S:	DS		1			;STORE TEMPERATURES
TEMP1D:	DS		1

STACK:		DS	1
CSEG     AT      0        ; RESET VECTOR
;---------==========----------==========---------=========---------
;              PROCESSOR INTERRUPT AND RESET VECTORS
;---------==========----------==========---------=========---------
 
		ORG     00H    		; Reset
		JMP     MAIN

		ORG 	000BH		;Timer Interrupt0
		JMP 	TRIGGER
  		
  		ORG 0013H ; External Interrupt 1
     JMP ZERO_CROSS
      
      ORG 	001BH		;Timer Interrupt1
		JMP 	REFRESH
;---------==========----------==========---------=========---------
MAIN:
		MOV PSW,#RB0      	; Select register bank 0
   	MOV SP,STACK
   	SETB IP.2
		MOV SPED,#00H
		MOV SPEED,#00H
		MOV COUNT,#00H
		MOV NUMB1,#00H
		MOV NUMB2,#04H
		MOV NUMB3,#00H
		MOV NUMB4,#00H
		CLR AUTO_LED
		
		CALL SET_TEMPERATURE

	
		MOV VALUE_1,#15H			;Switch off all displays
		MOV VALUE_2,#15H
		MOV VALUE_3,#15H
		MOV VALUE_4,#15H
		CLR DIS1
		CLR DIS2
		CLR DIS3
		CLR DIS4
		MOV TMOD,#11H		;enable timer0 for scanning
		MOV TL1,#00H
		MOV TH1,#0FDH
		SETB ET1
		SETB ET0
		SETB EX1
		CLR IT1          		 ; triggered by a high to low transition
		SETB EA
		SETB TR1		;Start the Timer  
  	
 		   	
UPP:	
		CALL READ_TEMP1		
		MOV A,TEMP1S
		ANL A,#0F0H
		SWAP A
		MOV VALUE_1,A
		MOV A,TEMP1S
		ANL A,#0FH
		MOV VALUE_2,A			
		MOV A,TEMP1D
		ANL A,#0F0H
		SWAP A
		MOV VALUE_3,A	   
		MOV VALUE_4,SPEED	   
	   MOV A,TEMP1S
	   MOV TEMPS,A
	   
	   SETB AUTO
	   MOV R3,#02H
RZPA3:	MOV R1,#0FFH
RZPA2:	MOV R2,#0FFH
RZPA1:	JNB AUTO,SET_SPEED   ;GOTO MANNUAL CONTROL	
			DJNZ R2,RZPA1
			DJNZ R1,RZPA2
			DJNZ R3,RZPA3
			CALL CHECK_TEMPERATURE
			AJMP UPP   
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;			AUTO CONTROL
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
CHECK_TEMPERATURE:
		MOV A,TEMPS
		CJNE A,TEMP1,JKL1
		MOV SPEED,SPEED1
		RET
JKL1:	CJNE A,TEMP2,JKL2
		MOV SPEED,SPEED2
		RET
JKL2:	CJNE A,TEMP3,JKL3
		MOV SPEED,SPEED3
		RET
JKL3:	CJNE A,TEMP4,JKL4
		MOV SPEED,SPEED4
		RET
JKL4:	CJNE A,TEMP5,JKL5
		MOV SPEED,SPEED5
		RET
JKL5:	CJNE A,TEMP6,JKL6
		MOV SPEED,SPEED6
		RET
JKL6:	CJNE A,TEMP7,JKL7
		MOV SPEED,SPEED7
		RET
JKL7:	CJNE A,TEMP8,JKL8
		MOV SPEED,SPEED8
		RET
JKL8:	CJNE A,TEMP9,JKL9
		MOV SPEED,SPEED9
		RET
JKL9:	MOV SPEED,SPEED10
		RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;			MANUAL CONTROL
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
SET_SPEED:
		SETB AUTO_LED
		JNB AUTO,$
		MOV VALUE_1,#17H			;Display Auto
		MOV VALUE_2,#18H
		MOV VALUE_3,#19H
		MOV VALUE_4,#20H
		JNB AUTO,$
		CALL DELAY
		CALL DELAY
		CALL DELAY
		MOV VALUE_1,#20H			;Display on
		MOV VALUE_2,#22H
		MOV VALUE_3,#21H
		MOV VALUE_4,#21H
		CALL DELAY
		CALL DELAY
		CALL DELAY
		
UAPP:	CALL READ_TEMP1		
		MOV A,TEMP1S
		ANL A,#0F0H
		SWAP A
		MOV VALUE_1,A
		MOV A,TEMP1S
		ANL A,#0FH
		MOV VALUE_2,A			
		MOV A,TEMP1D
		ANL A,#0F0H
		SWAP A
		MOV VALUE_3,A	   
		MOV VALUE_4,SPEED	   
	   MOV A,TEMP1S
	   MOV TEMPS,A
	   SETB PLUS
	   SETB MINUS
	   SETB AUTO
	   
	   
	   	MOV R3,#02H
RAPA3:	MOV R1,#0FFH
RAPA2:	MOV R2,#0FFH
RAPA1:	JNB PLUS,MAN_SPEEDINCR
			JNB MINUS,MAN_SPEEDDECR
			JNB AUTO,GOTO_MAIN
			DJNZ R2,RAPA1
			DJNZ R1,RAPA2
			DJNZ R3,RAPA3
	   	AJMP UAPP
;**************************************************		
GOTO_MAIN:
		CLR AUTO_LED
		JNB AUTO,$
		MOV VALUE_1,#17H			;Display Auto
		MOV VALUE_2,#18H
		MOV VALUE_3,#19H
		MOV VALUE_4,#20H
		JNB AUTO,$
		CALL DELAY
		CALL DELAY
		CALL DELAY
		MOV VALUE_1,#20H			;Display on
		MOV VALUE_2,#22H
		MOV VALUE_3,#16H
		MOV VALUE_4,#16H
		CALL DELAY
		CALL DELAY
		CALL DELAY
		AJMP UPP		
;##########################################################
MAN_SPEEDINCR:
		CALL DELAY
		JNB PLUS,$
		MOV A,SPEED
		CJNE A,#09H,DFG1
		AJMP UAPP
DFG1:	INC SPEED
		MOV VALUE_4,SPEED
		AJMP UAPP		
MAN_SPEEDDECR:
		CALL DELAY
		JNB MINUS,$
		MOV A,SPEED
		CJNE A,#00H,DFG2
		AJMP UAPP
DFG2:	DEC SPEED
		MOV VALUE_4,SPEED
		AJMP UAPP	
;**************************************************************************
DELAYS:                       ;One second delay routine
  MOV R6, #00H               ;put 0 in register R6 (R6 = 0)
   MOV R5, #004H              ;put 5 in register R5 (R5 = 4)
LOOPB:
   INC R6                     ;increase R6 by one (R6 = R6 +1)
   ACALL DELAYMS              ;call the routine above. It will run and return to here. 
   MOV A, R6                  ;move value in R6 to A                    
   JNZ LOOPB                  ;if A is not 0, go to LOOPB
  DEC R5                     ;decrease R5 by one. (R5 = R5 -1)
  MOV A, R5                  ;move value in R5 to A
   JNZ LOOPB                  ;if A is not 0 then go to LOOPB. 
  RET
;**************************************************************************
DELAYMS:                      ;millisecond delay routine
;                             ;
   MOV R7,#00H                ;put value of 0 in register R7
LOOPA:                          
   INC R7                     ;increase R7 by one (R7 = R7 +1)
   MOV A,R7                   ;move value in R7 to Accumlator (also known as A)
   CJNE A,#0FFH,LOOPA         ;compare A to FF hex (256). If not equal go to LOOPA
   RET                        ;return to the point that this routine was called from
;**************************************************************************
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;					SENSOR 1
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
READ_TEMP1:
			CLR SENP1			;ASSUME ALL SENSORS OK
			MOV    A,#0CCH           ;SKIP ROM
         CALL   TEWB
         MOV    A,#044H           ;READ CONVERT
         CALL   TEWB
 			CALL   TERES
         CALL   TECHK
         JC    ASX1		;JMP IF sensor PRESENT
         MOV TEMP1S,#0FFH
         MOV TEMP1D,#0FFH
         SETB SENP1		;SET FOR NO SENSOR 
         JMP DCFG1
ASX1:    MOV    R2,#0
      	DJNZ   R2,$
         CALL   TERES
         CALL   TEPRE
         MOV    R2,#0
         DJNZ   R2,$
         MOV    A,#0CCH           ;SKIP ROM
         CALL   TEWB
         MOV    A,#0BEH           ;READ SCRATCHPAD
         CALL   TEWB
         MOV    R6,#9
         MOV R0,#RAM         
TCOTEM2: CALL   TERB					;Read Temperature from SCRATCHPAD
			MOV @R0,A
         INC R0
         DJNZ   R6,TCOTEM2
         CALL   TERES			;RESET
         CALL   TEPRE
			CALL ds1820crc_ok
			JNC DCFG1				;jump if CRC Check failure
			CALL CALCULATE	
			MOV A,TEP1
			CJNE A,#85H,REP1
			JMP READ_TEMP1
REP1:		MOV TEMP1S,TEP1
			MOV TEMP1D,TEP2
			CLR MIN1				;ASSUME +VE
			MOV A,RAM+1
	   	JNB ACC.0,DCFG1
	   	SETB MIN1			;minus temp		
DCFG1:	RET
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;		CALCULATE TEMP FOR HIGH RESOLUTION
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	
CALCULATE:	
			MOV A,RAM+1		;MSB restore
			RRC A
			MOV MINUS,C
			
			JNB MINUS,DLC4
			MOV A,RAM
			CPL A
			INC A
			MOV RAM,A
			
DLC4:		MOV A,RAM
			ANL A,#01H
			JZ DLC2
			DEC RAM		
DLC2:		MOV A,RAM

			MOV B,#50
			MUL AB
			ADD A,#25
			MOV R6,A
			MOV A,B
			ADDC A,#00H
			MOV R7,A				;LSB=R11 ,MSB=R12
			
			MOV A,RAM+7
			CLR C
			SUBB A,RAM+6
			MOV B,#100
			MUL AB
			
			ANL A,#0F0H
			SWAP A
			MOV TEP1,A
			MOV A,B
			ANL A,#0FH
			SWAP A
			ORL A,TEP1
			
			ADD A,R6
			MOV R6,A
			MOV A,R7
			ADDC A,#00H
			MOV R7,A
			
			
			MOV A,R6
			MOV R2,A			;CONVERT HEX VALUE TO BCD
			MOV A,R7
      	MOV R1,A
			MOV R3,#00D
      	MOV R4,#00D
      	MOV R5,#00D
      	MOV R6,#00D
      	CALL HEX2BCD	
			MOV A,R4
			SWAP A
	   	ORL A,R3
	   	MOV TEP2,A
	   	MOV A,R6
			SWAP A
	   	ORL A,R5
	   	MOV TEP1,A
	   	RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;**************************************************	
HEX2BCD: 
		  MOV B,#10D
        MOV A,R2
        DIV AB
        MOV   R3,B              ;   
        MOV   B,#10             ; R7,R6,R5,R4,R3
        DIV   AB
        MOV   R4,B
        MOV   R5,A
        CJNE R1,#0H,HIGH_BYTE   ; CHECK FOR HIGH BYTE
        SJMP ENDD
 
HIGH_BYTE:
			MOV   A,#6
        	ADD   A,R3
			MOV   B,#10
			DIV   AB
        	MOV   R3,B
			ADD   A,#5
        	ADD   A,R4
			MOV   B,#10
			DIV   AB
        	MOV   R4,B
			ADD   A,#2
        	ADD   A,R5
			MOV   B,#10
			DIV   AB
        	MOV   R5,B
        	CJNE R6,#00D,ADD_IT
        	SJMP CONTINUE
ADD_IT:
        	ADD A,R6
CONTINUE:
       	 MOV R6,A
       	 DJNZ R1,HIGH_BYTE
       	 MOV B, #10D
      	 MOV A,R6
       	 DIV AB

⌨️ 快捷键说明

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