📄 温度.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 + -