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

📄 temperature monitor.asm

📁 该程序是基于AT89C51单片机和ADC0809的智能数字温度测量报警系统的源程序(汇编语言)
💻 ASM
字号:
LED_0	EQU 	30H
LED_1 	EQU 	31H
LED_2 	EQU 	32H
LED_3 	EQU 	40H
ADC		EQU		35H
TCNTA	EQU		36H
TCNTB	EQU		37H
H_TEMP	EQU		38H				;温度上限
L_TEMP	EQU		39H				;温度下限
T_KEY   EQU     41H                                                    ;按键次数
FLAG	BIT		00H
RUN	BIT	        P3.3
H_ALM	BIT		P3.0
L_ALM	BIT		P3.1
SOUND	BIT		P3.7
CLOCK	BIT		P2.4
ST          BIT 	              P2.5
SET_BUT     BIT                   P3.2
ADD_BUT     BIT                   P3.4
DEC_BUT     BIT                   P3.5
EOC 	    BIT 	              P2.6
OE          BIT 	              P2.7

		ORG 	00H
		SJMP	START
		ORG     03H
	    LJMP	INT_SET
		ORG		0BH
        LJMP	INT_T0
		ORG		1BH
		LJMP	INT_T1
		
START:	MOV		LED_0,#00H
		MOV		LED_1,#00H
		MOV		LED_2,#00H
		MOV		DPTR,#TABLE
		MOV		H_TEMP,#60
		MOV		L_TEMP,#30
		MOV		TMOD,#12H
		MOV		TH0,#245
		MOV		TL0,#0
		MOV		TH1,#(65536-1000)/256
		MOV		TL1,#(65536-1000)MOD 256
		MOV		IE,#8BH
        CLR		C
	    SETB	TR0				;为ADC0808提供时钟
		MOV     T_KEY,#00H

WAIT:	SETB	H_ALM
		SETB	L_ALM
		CLR 	ST
		SETB 	ST
		CLR 	ST				;启动转换
 		JNB 	EOC,$
		SETB 	OE 
		MOV 	ADC,P1			;读取AD转换结果
		CLR 	OE
		MOV		A,ADC
                            MOV       B,L_TEMP
		SUBB	A,B		   	;判断是否低于下限
		JC		LALM
		MOV		A,H_TEMP
		MOV		R0,ADC
		SUBB	A,R0			;判断是否高于上限
		JC		HALM
		CLR		TR1
		CLR RUN
		LJMP	PROC
LALM:							;低温报警
        CLR		L_ALM
		SETB	TR1
		CLR		FLAG
		SETB    P3.3
		LJMP	PROC

HALM:						   	;高温报警
		CLR		H_ALM
		SETB	TR1
		SETB	FLAG
		SETB    P3.3
		LJMP	PROC
INT_SET: ACALL DELAY4
         LCALL SETHTEMP
RETURN:    ACALL DELAY4
           SETB P3.2
           RETI

SETHTEMP:  LCALL  DELAY4
           JNB  P3.2,SETLTEMP
           SETB  RUN
           SETB   L_ALM
           CLR   H_ALM
		   MOV 	A,H_TEMP
		   MOV 	B,#10
		   DIV 	AB
		   MOV 	LED_2,A
		   MOV 	A,B
		   MOV 	B,#10
		   DIV 	AB
		   MOV 	LED_1,B
		   LCALL  DISP
		   JNB	P3.4,jia
		   JNB  P3.5 ,jian
		   JMP  SETHTEMP
jia:	   LCALL  DELAY
		   JB	P3.4,SETHTEMP
           LCALL  DELAY4
           INC  H_TEMP
		   JMP  SETHTEMP
            RET
jian:	   LCALL  DELAY
		   JB	P3.5,SETHTEMP
           LCALL  DELAY4
           DEC H_TEMP
		   JMP  SETHTEMP
           RET
SETLTEMP:  LCALL  DELAY4
           JNB  P3.2,RETURN
           SETB  RUN
           SETB   H_ALM
           CLR   L_ALM
		   MOV 	A,L_TEMP
		   MOV 	B,#10
		   DIV 	AB
		   MOV 	LED_2,A
		   MOV 	A,B
		   MOV 	B,#10
		   DIV 	AB
		   MOV 	LED_1,B
		   LCALL  DISP
		   JNB	P3.4,jia1
		   JNB  P3.5 ,jian1
		   JMP  SETLTEMP
jia1:	   LCALL  DELAY
		   JB	P3.4,SETLTEMP
           LCALL  DELAY4
           INC  L_TEMP
		   JMP  SETLTEMP
           RET
jian1:	   LCALL  DELAY	
		   JB	P3.5,SETLTEMP
           LCALL  DELAY4
           DEC L_TEMP
		   JMP  SETLTEMP
           RET
PROC:	MOV 	A,ADC		 	;数值转换
		MOV 	B,#10
		DIV 	AB
		MOV 	LED_2,A
		MOV 	A,B
		MOV 	B,#10
		DIV 	AB
		MOV 	LED_1,B
		LCALL	DISP
		LJMP 	WAIT
INT_T0:	CPL		CLOCK	   		;提供ADC0808时钟
		RETI
INT_T1:	MOV		TH1,#(65536-1000)/256
		MOV		TL1,#(65536-1000)MOD 256
		CPL		SOUND
		INC		TCNTA
		MOV		A,TCNTA
		JB		FLAG,I1		   	;判断是高温警报还是低温警报	
		CJNE	A,#80,RETUNE	;低温警报声
		SJMP	I2
    I1:  CJNE	 A,#27,RETUNE	;高温警报声
	I2:	MOV		TCNTA,#0
		INC		TCNTB
		MOV		A,TCNTB
		CJNE	A,#18,RETUNE
		MOV		TCNTA,#0
		MOV		TCNTB,#0
		LCALL	DELAY2
RETUNE:	RETI
DISP:	MOV     A,LED_1			;数码显示子程序
		MOVC	A,@A+DPTR
		CLR		P2.1
	    MOV		P0,A
		LCALL	DELAY
		SETB	P2.1
        MOV		A,LED_2
		MOVC	A,@A+DPTR
		CLR		P2.0
	    MOV		P0,A
		LCALL	DELAY
		SETB	P2.0
        MOV	 A,#8FH
		CLR		P2.2
		MOV		P0,A
		LCALL	DELAY
		SETB	P2.2
        RET

DELAY:	MOV		R6,#10
D1:		MOV		R7,#250
		DJNZ	R7,$
		DJNZ	R6,D1
		RET
DELAY2:	MOV		R5,#20
D2:		MOV		R6,#20
D3:		MOV		R7,#250
		DJNZ	R7,$
		DJNZ	R6,D3
		DJNZ	R5,D2
		RET
DELAY4:	MOV		R6,#F0
D8:		MOV		R7,#250
		DJNZ	R7,$
		DJNZ	R6,D8
		RET
TABLE: 	DB 		3FH,06H,5BH,4FH,66H
		DB 		6DH,7DH,07H,7FH,6FH
		END


⌨️ 快捷键说明

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