基于18B20的51单片机温度控制器汇编程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DQ EQU P3.0 ;1820数据端
ST EQU P1.1 ;设置键
UP EQU P1.2 ;加一键
DN EQU P1.0 ;减一键
RISE EQU P2.0 ;加温位
DEL_V EQU 30H ;延时值
WAIT_V EQU 31H ;
LOOP_V EQU 32H ;循环次数
TEM_L EQU 33H ;低位读数
TEM_H EQU 34H ;高位读数
TEM_L1 EQU 35H ;显示值1
TEM_L2 EQU 36H ;显示值2
TEM_H1 EQU 37H ;显示值3
TEM_H2 EQU 38H ;显示值4
DAT EQU 39H ;将学入1820的数据
R_DAT EQU 40H ;从1820读出的值
SET_T1 EQU 41H ;温度设定值高位
SET_T2 EQU 42H ;温度设定值中位
SET_T3 EQU 43H ;温度设定值低位
HIGH1 EQU 44H ;高温上限
HIGH2 EQU 45H
HIGH3 EQU 46H
LOW1 EQU 47H ;低温下限
LOW2 EQU 48H
LOW3 EQU 49H
SET_N EQU 50H ;设置状态的闪烁次数
DIS_V EQU 51H ;需要显示的值
WARN EQU 52H ;低温报警极限
CTER1 EQU 54H ;
CTER2 EQU R3
FLAG EQU R2 ;显示标志
CONTER EQU 53H ;闪烁频率调节值
SCLK EQU P1.3 ;74164时钟输入
IO EQU P3.3 ;74164数据输入
SET_F BIT 00H ;设置标志
FLASH BIT 01H ;闪烁标志
FIRST BIT 02H ;首次标志
WARN_F BIT P0.2 ;报警位
WARN_N EQU R1 ;报警位被置低的次数
ADD_L BIT P0.0 ;加温位(加温LED)
DOWN_L BIT P0.1 ;降温位(降温LED)
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP INT
ORG 0100H
MAIN: MOV FLAG,#0
SETB FIRST
CLR SET_F
SETB P3.7
SETB WARN_F
MOV WARN_N,#0
MOV CONTER,#140
MOV TMOD,#01H
MOV TH0,#0FCH
MOV TL0,#18H
MOV CTER1,#1
MOV CTER2,#123
SETB EA
SETB ET0
CLR TR0
MOV SET_T1,#3
MOV SET_T2,#6
MOV SET_T3,#0
MOV HIGH1,#3
MOV HIGH2,#6
MOV HIGH3,#5
MOV LOW1,#3
MOV LOW2,#5
MOV LOW3,#5
MOV WARN,#33H
;LCALL ADOPT
LCALL RESET ;先转换一次
MOV DAT,#0CCH
LCALL WRITE
MOV DAT,#44H
LCALL WRITE
LCALL DELAY1S

AGAIN: CLR TR0
LCALL READ_T ;读温度
SETB TR0
LCALL WORK ;进行数值处理
LCALL JUDGE ;判断温度是否超界
INC CTER1 ;防止误判寄存器1
JB FIRST,CON13
LCALL CONFIG ;判断温度是否低于报警值
CON13: JB ST,CON
LCALL K_DEL
JB ST,CON
JNB ST,$
MOV SET_N,#20
SETB SET_F
LCALL SET_T ;进行温度值设置
CLR SET_F
CON: LCALL DELAY1S
AJMP AGAIN
;*******************************
CONFIG: MOV A,TEM_H2
SWAP A
ORL A,TEM_L1
SUBB A,WARN
JNC NORMAL
INC WARN_N ;防止误报警
CJNE WARN_N,#5,NORMAL
MOV WARN_N,#0
CLR WARN_F
NORMAL: RET
;********************************
JUDGE: MOV A,HIGH1 ;判断温度是否出界
CJNE A,TEM_H2,JUDGE1
AJMP JUDGE2
JUDGE1: CLR C
SUBB A,TEM_H2
JNC JUDGE3
AJMP DOWN_T
JUDGE2: MOV A,HIGH2
CJNE A,TEM_L1,JUDGE4
AJMP JUDGE5
JUDGE4: CLR C
SUBB A,TEM_L1
JNC JUDGE3
AJMP DOWN_T
JUDGE5: MOV A,HIGH3
CJNE A,TEM_L2,JUDGE6
AJMP JUDGE3
JUDGE6: CLR C
SUBB A,TEM_L2
JNC JUDGE3
DOWN_T: CLR RISE
CLR DOWN_L
SETB ADD_L
SETB WARN_F
MOV A,CTER2
CJNE A,CTER1,FALSE
CLR FIRST
FALSE: MOV CTER2,CTER1
INC CTER2
RET
JUDGE3: MOV A,TEM_H2
CJNE A,LOW1,JUDGE7
AJMP JUDGE8
JUDGE7: CLR C
SUBB A,

LOW1
JNC JUDGE9
AJMP ADD_T
JUDGE8: MOV A,TEM_L1
CJNE A,LOW2,JUDGE10
AJMP JUDGE11
JUDGE10:CLR C
SUBB A,LOW2
JNC JUDGE9
AJMP ADD_T
JUDGE11:MOV A,TEM_L2
CJNE A,LOW3,JUDGE12
AJMP JUDGE9
JUDGE12:CLR C
SUBB A,LOW3
JNC JUDGE9
ADD_T: SETB RISE
SETB DOWN_L
CLR ADD_L
JUDGE9: RET

;********************************
SET_T: ;MOV TEM_H1,#0 ;温度设置子程序
MOV TEM_H2,SET_T1
MOV TEM_L2,SET_T3
MOV TEM_L1,SET_T2
JNB SET_F,SET_OK
JB ST,CON1
LCALL K_DEL
JB ST,CON1
JNB ST,$
SET_OK: LCALL ADOPT
SETB WARN_F
SETB FIRST
RET

CON1: JB UP,CON2
LCALL K_DEL
JB UP,CON2
MOV SET_N,#20
JNB UP,$
MOV A,SET_T3
ADD A,#5
CJNE A,#0AH,CON3
MOV SET_T3,#0
AJMP CON4
CON3: MOV SET_T3,#5
AJMP SET_T
CON4: MOV A,SET_T2
INC A
CJNE A,#0AH,CON5
MOV SET_T2,#0
AJMP CON6
CON5: MOV SET_T2,A
AJMP SET_T
CON6: MOV A,SET_T1
INC A
CJNE A,#0AH,CON7
MOV SET_T1,#0
MOV SET_T2,#0
MOV SET_T3,#0
AJMP SET_T
CON7: MOV SET_T1,A
CON2: JB DN,SET_T
LCALL K_DEL
JB DN,SET_T
MOV SET_N,#20
JNB DN,$
MOV A,SET_T3
ADD A,#5
CJNE A,#0AH,CON8
MOV SET_T3,#0
AJMP SET_T
CON8: MOV SET_T3,#5
CON9: MOV A,SET_T2
DEC A
CJNE A,#0FFH,CON10
MOV SET_T2,#9
AJMP CON11
CON10: MOV SET_T2,A
AJMP SET_T
CON11: MOV A,SET_T1
DEC A
CJNE A,#0FFH,CON12
MOV SET_T1,#9
MOV SET_T2,#9
MOV SET_T3,#5
AJMP SET_T
CON12: MOV SET_T1,A
AJMP SET_T
;*******************************
ADOPT: MOV A,SET_T3 ;计算高温和低温下限子程序
ADD A,#5
CJNE A,#0AH,CO3
MOV HIGH3,#0
AJMP CO4
CO3: MOV HIGH3,#5
MOV HIGH2,SET_T2
MOV HIGH1,SET_T1
AJMP CO9
CO4: MOV A,SET_T2
INC A
CJNE A,#0AH,CO5
MOV HIGH2,#0
AJMP CO6
CO5: MOV HIGH2,A
MOV HIGH1,SET_T1
AJMP CO9
CO6: MOV A,SET_T1
INC A
CJNE A,#0AH,CO7
MOV HIGH1,#9
MOV HIGH2,#9
MOV HIGH3,#9
AJMP CO9
CO7: MOV HIGH1,A

CO9: MOV A,SET_T3
ADD A,#5
CJNE A,#0AH,CO8
MOV LOW3,#0
MOV LOW1,SET_T1
MOV LOW2,SET_T2
AJMP CO13
CO8: MOV LOW3,#5
MOV A,SET_T2
DEC A
CJNE A,#0FFH,CO10
MOV LOW2,#9
AJMP CO11
CO10: MOV LOW2,A
MOV LOW1,SET_T1
AJMP CO13
CO11: MOV A,SET_T1
DEC A
CJNE A,#0FFH,CO12
MOV LOW1,#0
MOV LOW2,#0
MOV LOW3,#0
AJMP CO13
CO12: MOV LOW1,A
CO13: MOV A,LOW1 ;计算报警温度
SWAP A
ORL A,LOW2
DEC A
MOV WARN,A
ANL A,#0FH
CJNE A,#0FH,CO14
MOV A,WARN
SUBB A,#6
MOV WARN,A
CO14: MOV A,WARN
DEC A
MOV WARN,A
ANL A,#0FH
CJNE A,#0FH,CO15
MOV A,WARN
SUBB A,#6
MOV WARN,A
CO15: RET
;*******************************
WORK: MOV A,TEM_L ;将读出的值进行处理得到显示值
ANL A,#0FH
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV TEM_L2,A
LOOP4: MOV A,TEM_L
ANL A,#0F0H
ORL A,TEM_H
SWAP A
MOV B,#100
DIV AB
MOV TEM_H1,A
MOV A,B
MOV B,#10
DIV AB
MOV TEM_H2,A
MOV TEM_L1,B
RET
;*****************************
RESET: SETB DQ
NOP
NOP
CLR DQ
MOV DEL_V,#55
LCALL DELAY
SETB DQ
MOV WAIT_V,#18
LOOP1: MOV DEL_V,#6
LCALL DELAY
JNB DQ,R_

OK
DJNZ WAIT_V,RESET

R_OK: ;SETB TR0
MOV DEL_V,#50 ;4444
LCALL DELAY
;CLR TR0
RET
;********************************
WRITE: MOV A,DAT
MOV LOOP_V,#8
LOOP2: SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
RRC A
MOV DQ,C
MOV DEL_V,#7
LCALL DELAY
DJNZ LOOP_V,LOOP2
SETB DQ
NOP
NOP
NOP
RET
;**********************************
READ: MOV LOOP_V,#8
LOOP3: SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
SETB DQ
NOP
NOP
MOV C,DQ
RRC A
MOV DEL_V,#7
LCALL DELAY
DJNZ LOOP_V,LOOP3
MOV R_DAT,A
RET
;***********************************
READ_T: LCALL RESET
MOV DAT,#0CCH
LCALL WRITE
MOV DAT,#0BEH
LCALL WRITE
LCALL READ
MOV TEM_L,R_DAT
LCALL READ
MOV TEM_H,R_DAT
LCALL RESET
MOV DAT,#0CCH
LCALL WRITE
MOV DAT,#044H
LCALL WRITE
RET
;***********************************
DELAY: MOV R6,DEL_V
DEL1: MOV R7,#5
DJNZ R7,$
DJNZ R6,DEL1
RET
;**********************************
DELAY1S:MOV R5,#10
DEL3: MOV R6,#200
DEL2: MOV R7,#200
DJNZ R7,$
DJNZ R6,DEL2
DJNZ R5,DEL3
RET
;**********************************
K_DEL: MOV R6,#100
DEL4: MOV R7,#50
DJNZ R7,$
DJNZ R6,DEL4
RET
;***********************************
INT: PUSH ACC
MOV TH0,#0F8H
MOV TL0,#1FH
CJNE FLAG,#0,NEXT
MOV FLAG,#1
MOV A,TEM_L1
MOV DPTR,#TAB
MOVC A,@A+DPTR
ANL A,#7FH
MOV DIS_V,A
SETB P3.4
LCALL ENABLE
CLR P3.5
AJMP DISPLAY
NEXT: CJNE FLAG,#1,NEXT2
MOV FLAG,#2
MOV A,TEM_L2
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DIS_V,A
SETB P3.5
LCALL ENABLE
CLR P3.6
AJMP DISPLAY
NEXT2: MOV FLAG,#0
MOV A,TEM_H2
CJNE A,#0,DIS
MOV A,#10
DIS: MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DIS_V,A
SETB P3.6
LCALL ENABLE
CLR P3.4
DISPLAY:JNB SET_F,NOTOVER
JB FLASH,N_FLA
ORL P3,#70H
N_FLA: DJNZ CONTER,NOTOVER
MOV CONTER,#140
CPL FLASH
DJNZ SET_N,NOTOVER
CLR SET_F
NOTOVER:POP ACC
RETI
;*****************************
ENABLE: CLR SCLK
MOV A,DIS_V
MOV R4,#8
ENAB1: RRC A
CLR SCLK
NOP
NOP
MOV IO,C
NOP
NOP
SETB SCLK
DJNZ R4,ENAB1
RET
;*****************************
ORG 0900H
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH

TAB1: DB 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
END

相关文档
最新文档