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

📄 温度.asm

📁 汇编语言常用程序,包括运算,掉电保存,按键,液晶显示,串口传送
💻 ASM
字号:
;    {AT89C2051}
;TIME:2007-11-07
;温控
;	v1.1  以调试OK
	ORG	0000H
	JMP	START
       mov xpos,#0
;===========================================================
ADCS	BIT	P3.5		;
ADCLK	BIT	P3.4		;
ADD0	BIT	P3.3		;
ADD1	BIT	P3.3		;
FAN	BIT	P3.7		;
FAN1	BIT	P1.4		;

buzzer	BIT	P3.0		;蜂鸣器接口
LED	BIT	P3.1		;LED调试接口


temperature_45	EQU	40H	;10101101B 	;温度为45度	3.3v
temperature_50	EQU	41H	;10011011B	;温度为50度	3.0v
temperature_55	EQU	42H	;10010110B	;温度为55度	2.9v
temperature_60	EQU	43H	;10000001B	;温度为60度	2.5v
temperature_70	EQU	44H	;01110100B	;温度为70度	2.2v
	

;===============开始设定初值======================================
	ORG	0040H
START:	MOV	SP,#06FH
	CLR	FAN
	SETB	buzzer
STA1:	MOV	40H,#10101101B 	;45    
	MOV	41H,#10011011B	;50
	MOV	42H,#10010110B	;55
	MOV	43H,#10000001B	;60
	MOV	44H,#01110100B	;70

;----------------------------------------------------------------------
	CALL	ADCCON			;
	CALL	check45			;
LOOP50:	CALL	check50			;
	CALL	check55			;
	CALL	check60			;
LOOP70:	CALL	check70			;

	JMP	START
;-------------------------------------------------------------
check45:
	CALL	ADCCON			;
	SETB	buzzer
	MOV	A,R3			;
	MOV	B,temperature_45
	DIV	AB
	JNZ	speed_1			;
	JMP	LOOP50				;
;-----------------------------------------------------------
check50:
	CALL	ADCCON			;
	SETB	buzzer
	MOV	A,R3			;
	MOV	B,temperature_50
	DIV	AB
	JNZ	speed_2		;
	MOV	A,R3
	MOV	B,temperature_45
	DIV	AB
	JNZ	speed_1
	RET				
;-----------------------------------------------------------
check55:
	CALL	ADCCON			
	SETB	buzzer
	MOV	A,R3			
	MOV	B,temperature_55
	DIV	AB
	JNZ	speed_3	;
	MOV	A,R3
	MOV	B,temperature_45
	DIV	AB
	JNZ	speed_1
	RET				
;-----------------------------------------------------------
check60:
	CALL	ADCCON			
	SETB	buzzer
	MOV	A,R3			
	MOV	B,temperature_60
	DIV	AB
	JNZ	speed_4	;
 	SETB	FAN
	RET
;-----------------------------------------------------------
check70:		
	CALL	ADCCON			
	MOV	A,R3			
	MOV	B,temperature_70
	DIV	AB
	JNZ	speed_5
	SETB	FAN
	CLR	buzzer
	MOV	A,R3
	MOV	B,temperature_45
	DIV	AB
	JNZ	speed_1		
	JMP	check70

;-----------------------------------------------------------
;&&&&&&&&&&&&&&&&&&  风速程序  &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;===============风速1(开30MS,	关60ms)===============================
speed_1:
	SETB	FAN			;开30毫秒
	MOV	R5,#3
LOOP1:	CALL	DELAY10ms
	DJNZ	R5,LOOP1
	CLR	FAN
	MOV	R5,#6
LOOP2:	CALL	DELAY10ms		;关60毫秒
	DJNZ	R5,LOOP2
	JMP	check45
;===============风速2(开40MS,	关80ms)===============================
speed_2:
	SETB	FAN			;开60毫秒
	MOV	R5,#6
LOOP3:	CALL	DELAY10ms
	DJNZ	R5,LOOP3
	CLR	FAN
	MOV	R5,#4
LOOP4:	CALL	DELAY10ms		;关40毫秒
	DJNZ	R5,LOOP4
	MOV	A,R3			;将读回的数据送到A中
	MOV	B,temperature_45
	DIV	AB
	JNZ	speed_1		;A 不为0,表示 A点读到的值大,温度低于45度,跳到风速程序1
	JMP	check50
;===============风速3(开50MS,	关100ms)===============================
speed_3:
	SETB	FAN			;开80毫秒
	MOV	R5,#8
LOOP5:	CALL	DELAY10ms
	DJNZ	R5,LOOP5
	CLR	FAN
	MOV	R5,#3
LOOP6:	CALL	DELAY10ms		;关 30毫秒
	DJNZ	R5,LOOP6
	MOV	A,R3			;将读回的数据送到A中
	MOV	B,temperature_50
	DIV	AB
	JNZ	speed_2		;A 不为0,表示 A点读到的值大,温度低于45度,跳到风速程序1
	JMP	check55
;===============风速4(开60MS,关120ms)===============================
speed_4:
	SETB	FAN			;开120毫秒
	MOV	R5,#10
LOOP7:	CALL	DELAY10ms
	DJNZ	R5,LOOP7
	CLR	FAN
	MOV	R5,#3
LOOP8:	CALL	DELAY10ms		;关10毫秒
	DJNZ	R5,LOOP8
	SETB	FAN
	JMP	check60

;===============风速5   全速度===============================
speed_5:
	SETB	FAN
	CALL	ADCCON			;读回0832的值
	SETB	buzzer
	MOV	A,R3			;将读回的数据送到A中
	MOV	B,temperature_45
	DIV	AB
	JNZ	speed_1		;A 不为0,表示 A点读到的值大,温度低于45度,跳到风速程序1
	JMP	check70
;********************************************************************************
;---------------------ADC0832读取-------------
ADCCON:	MOV	B,#00000010B      ;十进制2
	nop
	nop
ADCCON3:
	SETB	ADD1	 ;选择接收通道	
	NOP
	NOP
	CLR	ADCS  ; 容许接收		
	NOP
	NOP
	SETB	ADCLK  ;时钟置高		
	NOP

	NOP
	CLR	ADCLK		
	MOV	A,B
	MOV	C,ACC.1
	NOP
	NOP
	SETB	ADCLK
	NOP
	NOP
	CLR	ADCLK		
	CLR	ADD1
	MOV	A,B
	MOV	C,ACC.0
	NOP
	NOP

	SETB	ADCLK		
	NOP
	NOP
	CLR	ADCLK		
	SETB	ADD1
	NOP
	NOP
	MOV	R7,#8
AD_1:	MOV	C,ADD0
	RL	A
	SETB	ADCLK
	NOP
	NOP
	CLR	ADCLK
	NOP
	NOP
	DJNZ	R7,AD_1
	MOV	C,ADD0
	MOV	ACC.0,C
	MOV	B,A
	CLR	A
;---------------------------------------
	MOV	R7,#8
AD_2:	MOV	C,ADD0
	MOV	ACC.0,C
	RR	A
	SETB	ADCLK
	NOP
	NOP	
	CLR	ADCLK
	NOP
	NOP
	DJNZ	R7,AD_2		
	MOV	50H,A
	MOV	A,B
	CJNE	A,50H,ADCCON	
	SETB	ADCS		
	CLR	ADCLK		
	SETB	ADD0		
;--------------------------------------------------------------
	SETB	ADCS		

	MOV	R3,A
	RET
;-----------------------------------------------------------------------
ADCCON1:	
	MOV	B,#00000011B
	nop
	nop
	SETB	ADD1		
	NOP
	NOP
	CLR	ADCS		
	NOP
	NOP
	SETB	ADCLK		
	NOP
	NOP
	CLR	ADCLK		
	MOV	A,B
	MOV	C,ACC.1
	NOP
	NOP
	SETB	ADCLK
	NOP
	NOP
	SETB	ADCLK
	NOP
	NOP
	CLR	ADCLK		
	MOV	A,B
	MOV	C,ACC.0
	NOP
	NOP

	SETB	ADCLK		
	NOP
	NOP
	CLR	ADCLK		
	SETB	ADD1
	NOP
	NOP
	MOV	R7,#8
AD_11:	MOV	C,ADD0
	MOV	ACC.0,C
	RL	A
	SETB	ADCLK
	NOP
	NOP
	CLR	ADCLK
	NOP
	NOP
	DJNZ	R7,AD_11
	MOV	C,ADD0
	MOV	ACC.0,C
	MOV	B,A
	CLR	A
;---------------------------------------
	MOV	R7,#8
AD_21:	MOV	C,ADD0
	MOV	ACC.0,C
	RR	A
	SETB	ADCLK
	NOP
	NOP	
	CLR	ADCLK
	NOP
	NOP
	DJNZ	R7,AD_21		
	MOV	51H,A
	MOV	A,B
	CJNE	A,51H,ADCCON1	;数据效验
	SETB	ADCS		
	CLR	ADCLK		
	SETB	ADD0		
;--------------------------------------------------------------
	SETB	ADCS		
;-------------------------------------------------------------
	NOP
	NOP

	MOV	R2,A	
	JMP	START
	RET

;----------------------------------------------------------------
DELAY10ms:	MOV	31H,#1		;延时10Ms
D3:		MOV	32H,#20			;10ms
D5:		MOV	33H,#248
		DJNZ	33H,$
		DJNZ	32H,D5
		DJNZ	31H,D3
		RET  

		END

⌨️ 快捷键说明

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