📄 11.asm
字号:
S1OK EQU 5FH
TEMPUTER EQU 39H
TEMPH EQU 5EH
TEMPL EQU 5DH
MS50 EQU 5CH
SIGN EQU 5BH
S1 BIT P1.0
S2 BIT P1.1
S3 BIT P1.2
S4 BIT P1.3
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TOIT
ORG 0030H
MAIN: MOV SP, #60H
MOV TMOD, #01H
MOV TH0, #3CH
MOV TL0, #0B0H
SETB ET0
SETB TR0
SETB EA
MOV TEMPH, #30
MOV TEMPL, #9
MOV TEMPUTER, #15 ; 温度最始值
MOV S1OK, #00H
MOV SIGN, #00H
MOV 38H, #0BH
MOV 36H, #0BH
MOV 37H, #0CH
ACALL DISP
ACALL T1S
START:
ACALL T12MS
JB S1, NET1 ; 位条件转移
JNB S1, $ ;位条件转移等待
INC SIGN
MOV A, SIGN
CJNE A, #1, TIAO ;比较之后转移
ACALL TIAOTL
TIAO: CJNE A, #2, NET1 ; 比较之后转移
MOV SIGN, #0
ACALL TIAO
NET1: MOV A, S1OK
CJNE A, #1, START ; 比较之后转移
MOV A, TEMPUTER
SUBB A, TEMPH
JNB ACC.7, ALEM ; 位条件转移
MOV A, TEMPUTER
SUBB A, TEMPL
JB ACC.7, ALEM ; 位条件转移
SETB P2.1 ; P2.1置1
ACALL WENDU
ACALL DISP
MOV S1OK, #00H
AJMP START ; 无条件转移
ALEM: MOV 36H, #0CH
MOV 37H, #0CH
MOV 38H, #0CH
CLR P2.1
ACALL DISP
ACALL T1S
LCALL WENDU
LCALL DISP
MOV S1OK, #00H
SJMP START
TIAOTL:MOV 50H, TEMPUTER
MOV 37H, TEMPL
ACALL BIN_BCD
ACALL DISP
ACALL T12MS
ACALL T12MS
ACALL T12MS
ACALL T12MS
MOV 36H, #0AH
MOV 37H, #0AH
MOV 38H, #0AH
ACALL DISP
ACALL T12MS
ACALL T12MS
ACALL T12MS
ACALL T12MS
JB S2, ADD1 ; 位条件转移
ACALL T12MS
JB S2, ADD1 ; 位条件转移
JNB S2, $ ; 位条件转移等待
INC TEMPL ; 加1
MOV A, TEMPL
CJNE A, #100, ADD1 ; 比较之后转移
MOV TEMPL, #0
ADD1: JB S3, ADD2 ; 位条件转移
ACALL T12MS
JB S3, ADD2 ; 位条件转移
JNB S3, $ ; 位条件转移等待
DEC TEMPL
MOV A, TEMPL
CJNE A, #00 , ADD2 ; 比较之后转移
MOV TEMPL,#100
ADD2: JB S4, TIAOTL
ACALL T12MS
JB S4, TIAOTL ; 位条件转移
JNB S4, $ ; 位条件转移等待
MOV TEMPUTER, 50H
LJMP START
TOIT: PUSH PSW
PUSH ACC
MOV TH0, #3CH
MOV TL0, #0B0H
INC MS50 ; 加1
MOV A, MS50
CJNE A, #14H, RETURN ; 比较之后转移
MOV S1OK, #1
MOV MS50, #00H
RETURN:POP ACC
POP PSW
RETI
WENDU: ACALL INIT_1820
ACALL RE_CONFIG
ACALL GET_TEMPER
ACALL TEMPER_COV
RET
; …………………………………DS18B20初始化程序……………………………………
INIT_1820:
SETB P2.0 ; P2.0置1
NOP
CLR P2.0
MOV R0,#06BH
MOV R1,#03H
TSR1:
DJNZ R0,TSR1 ; 延时
MOV R0,#6BH
DJNZ R1,TSR1
SETB P2.0 ; P2.0置1
NOP
NOP
NOP
MOV R0,#25H
TSR2:
JNB P2.0,TSR3 ; 位条件转移
DJNZ R0,TSR2 ; 循环转移
LJMP TSR4 ; 延时
TSR3:
SETB 20H.1 ; 置标志位,表示DS1820存在
LJMP TSR5
TSR4:
CLR 20H.1 ; 清标志位,表示DS1820不存在
LJMP TSR7
TSR5:
MOV R0,#06BH
MOV R1,#03H
TSR6:DJNZ R0,TSR6 ; 延时
MOV R0,#6BH
DJNZ R1,TSR6
TSR7:SETB P2.0 ; P2.0置1
RET
RE_CONFIG:JB 20H.1,RE_CONFIG1 ; 若DS18B20存在,转RE_CONFIG1
RET
RE_CONFIG1:
MOV A,#0CCH ; 发SKIP ROM命令
LCALL WRITE_1820
MOV A,#4EH ; 发写暂存存储器命令
LCALL WRITE_1820
LCALL WRITE_1820
MOV A,#1FH ; 选择9位温度分辨率
LCALL WRITE_1820
RET ; 子程序返回
GET_TEMPER:
SETB P2.0 ; 定时入口
LCALL INIT_1820
JB 20H.1,TSS2 ; 位条件转移
RET ; 若DS18B20不存在则返回
TSS2:
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 发出读温度命令
LCALL WRITE_1820
LCALL READ_18200
MOV 37H,A ; 将读出的温度数据保存
RET ; 子程序返回
WRITE_1820:
MOV R2,#8
CLR C
WR1: CLR P2.0
NOP
NOP
NOP
RRC A
MOV P2.0,C
MOV R3,#35
DJNZ R3,$ ; 循环转移等待
SETB P2.0 ; P2.0置1
NOP
DJNZ R2,WR1 ; 循环转移
SETB P2.0 ; P2.0置1
RET ; 子程序返回
READ_18200:
MOV R4,#2 ; 将温度高位和低位DS18B20中读
RE00:MOV R2,#8
RE01:CLR C
SETB P2.0 ; P2.0置1
NOP
NOP
CLR P2.0
NOP
NOP
NOP
SETB P2.0
NOP
NOP
MOV C,P2.0
MOV R3,#35
RE20:
DJNZ R3,RE20 ; 循环转移
RRC A
DJNZ R2,RE01 ; 循环转移
MOV @R1,A
DEC R1
DJNZ R4,RE00 ; 循环转移
RET ; 子程序返回
TEMPER_COV:
MOV A,#0F0H
ANL A,36H ; 舍去温度低位中小数点
SWAP A
MOV 37H,A
MOV 36H,A
JNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值
INC 37H ; 加1
TEMPER_COV1:
MOV A,35H
ANL A,#07H
SWAP A ;将累加器A的高、低两半字节交换
ADD A,37H ;将37H中的内容与A中内容相加送A
MOV 37H,A
LCALL BIN_BCD
RET ; 子程序返回
BIN_BCD:
MOV 39H,37H
MOV A,37H
MOV B,#100
DIV AB ; A除B, A为商,B为余数
MOV 38H,A
MOV 37H,B
XCH A,B ;将A和B中的内容相互交换
MOV B,#10
DIV AB ;A除B, A为商,B为余数
MOV 37H,A
MOV 36H,B
RET ; 子程序返回
DISP: SETB RS0
MOV R0, #36H
MOV R7, #3
LOOPP:MOV A, @R0
MOV DPTR, #TAB
MOVC A, @A+DPTR
MOV SBUF, A
JNB TI, $ ; 位条件转移等待
CLR TI
INC R0 ;加1
DJNZ R7, LOOPP ; 循环转移
CLR RS0
RET
TAB: DB 11H, 0D7H, 32H, 92H, 0D4H, 98H, 18H, 0D1H, 10H, 90H ,0FFH, 070H, 0FEH
T12MS: SETB RS1
MOV R7, #18H
TM: MOV R6, #0FFH
TM6: DJNZ R6, TM6 ; 循环转移
DJNZ R7, TM
CLR RS1
RET ; 子程序返回
T1S: SETB RS1
MOV R6, #3
LSP:ACALL T12MS
DJNZ R6, LSP ;循环转移
CLR RS1
RET ; 子程序返回
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -