?? 11.asm
字號(hào):
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 ; 位條件轉(zhuǎn)移
JNB S1, $ ;位條件轉(zhuǎn)移等待
INC SIGN
MOV A, SIGN
CJNE A, #1, TIAO ;比較之后轉(zhuǎn)移
ACALL TIAOTL
TIAO: CJNE A, #2, NET1 ; 比較之后轉(zhuǎn)移
MOV SIGN, #0
ACALL TIAO
NET1: MOV A, S1OK
CJNE A, #1, START ; 比較之后轉(zhuǎn)移
MOV A, TEMPUTER
SUBB A, TEMPH
JNB ACC.7, ALEM ; 位條件轉(zhuǎn)移
MOV A, TEMPUTER
SUBB A, TEMPL
JB ACC.7, ALEM ; 位條件轉(zhuǎn)移
SETB P2.1 ; P2.1置1
ACALL WENDU
ACALL DISP
MOV S1OK, #00H
AJMP START ; 無(wú)條件轉(zhuǎn)移
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 ; 位條件轉(zhuǎn)移
ACALL T12MS
JB S2, ADD1 ; 位條件轉(zhuǎn)移
JNB S2, $ ; 位條件轉(zhuǎn)移等待
INC TEMPL ; 加1
MOV A, TEMPL
CJNE A, #100, ADD1 ; 比較之后轉(zhuǎn)移
MOV TEMPL, #0
ADD1: JB S3, ADD2 ; 位條件轉(zhuǎn)移
ACALL T12MS
JB S3, ADD2 ; 位條件轉(zhuǎn)移
JNB S3, $ ; 位條件轉(zhuǎn)移等待
DEC TEMPL
MOV A, TEMPL
CJNE A, #00 , ADD2 ; 比較之后轉(zhuǎn)移
MOV TEMPL,#100
ADD2: JB S4, TIAOTL
ACALL T12MS
JB S4, TIAOTL ; 位條件轉(zhuǎn)移
JNB S4, $ ; 位條件轉(zhuǎn)移等待
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 ; 比較之后轉(zhuǎn)移
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 ; 延時(shí)
MOV R0,#6BH
DJNZ R1,TSR1
SETB P2.0 ; P2.0置1
NOP
NOP
NOP
MOV R0,#25H
TSR2:
JNB P2.0,TSR3 ; 位條件轉(zhuǎn)移
DJNZ R0,TSR2 ; 循環(huán)轉(zhuǎn)移
LJMP TSR4 ; 延時(shí)
TSR3:
SETB 20H.1 ; 置標(biāo)志位,表示DS1820存在
LJMP TSR5
TSR4:
CLR 20H.1 ; 清標(biāo)志位,表示DS1820不存在
LJMP TSR7
TSR5:
MOV R0,#06BH
MOV R1,#03H
TSR6:DJNZ R0,TSR6 ; 延時(shí)
MOV R0,#6BH
DJNZ R1,TSR6
TSR7:SETB P2.0 ; P2.0置1
RET
RE_CONFIG:JB 20H.1,RE_CONFIG1 ; 若DS18B20存在,轉(zhuǎn)RE_CONFIG1
RET
RE_CONFIG1:
MOV A,#0CCH ; 發(fā)SKIP ROM命令
LCALL WRITE_1820
MOV A,#4EH ; 發(fā)寫暫存存儲(chǔ)器命令
LCALL WRITE_1820
LCALL WRITE_1820
MOV A,#1FH ; 選擇9位溫度分辨率
LCALL WRITE_1820
RET ; 子程序返回
GET_TEMPER:
SETB P2.0 ; 定時(shí)入口
LCALL INIT_1820
JB 20H.1,TSS2 ; 位條件轉(zhuǎn)移
RET ; 若DS18B20不存在則返回
TSS2:
MOV A,#0CCH ; 跳過(guò)ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 發(fā)出讀溫度命令
LCALL WRITE_1820
LCALL READ_18200
MOV 37H,A ; 將讀出的溫度數(shù)據(jù)保存
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,$ ; 循環(huán)轉(zhuǎn)移等待
SETB P2.0 ; P2.0置1
NOP
DJNZ R2,WR1 ; 循環(huán)轉(zhuǎn)移
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 ; 循環(huán)轉(zhuǎn)移
RRC A
DJNZ R2,RE01 ; 循環(huán)轉(zhuǎn)移
MOV @R1,A
DEC R1
DJNZ R4,RE00 ; 循環(huán)轉(zhuǎn)移
RET ; 子程序返回
TEMPER_COV:
MOV A,#0F0H
ANL A,36H ; 舍去溫度低位中小數(shù)點(diǎn)
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的高、低兩半字節(jié)交換
ADD A,37H ;將37H中的內(nèi)容與A中內(nèi)容相加送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為余數(shù)
MOV 38H,A
MOV 37H,B
XCH A,B ;將A和B中的內(nèi)容相互交換
MOV B,#10
DIV AB ;A除B, A為商,B為余數(shù)
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, $ ; 位條件轉(zhuǎn)移等待
CLR TI
INC R0 ;加1
DJNZ R7, LOOPP ; 循環(huán)轉(zhuǎn)移
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 ; 循環(huán)轉(zhuǎn)移
DJNZ R7, TM
CLR RS1
RET ; 子程序返回
T1S: SETB RS1
MOV R6, #3
LSP:ACALL T12MS
DJNZ R6, LSP ;循環(huán)轉(zhuǎn)移
CLR RS1
RET ; 子程序返回
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -