"); //-->
;============功能提要=============
;为18B20温度器进行数码管显示温度。
;本课重点、难点:18B20协议。
;=================================
LSB DATA 29H
MSB DATA 28H
YS1 DATA 30H
YS2 DATA 31H
ZS DATA 32H
BUF DATA 33H
DQ BIT P3.7
ORG 0000H
;----------------主程序----------------------
MAIN: MOV SP,#80H
LOOP: LCALL DUWEN ;读温度程序
LCALL ZHENGHE ;对读出的温度进行整合
LCALL BCD
LCALL YHDTSM
SJMP LOOP
;-----------------结束-----------------------
DUWEN: ACALL FUWEI
JB F0,CUNZHI
RET
CUNZHI: MOV A,#0CCH
ACALL XIE
MOV A,#44H
ACALL XIE
ACALL FUWEI
MOV A,#0CCH
ACALL XIE
MOV A,#0BEH
ACALL XIE
ACALL DUCHU
RET
ZHENGHE: MOV A,LSB
MOV C,28H.0
RRC A
MOV C,28H.1
RRC A
MOV C,28H.2
RRC A
MOV C,28H.3
RRC A
MOV ZS,A
RET
;----------显示部分---------------
BCD: MOV A,ZS
MOV B,#10
DIV AB
MOV BUF,B
MOV B,#10
DIV AB
MOV BUF+1,B
RET
YHDTSM: MOV R5,#0
MOV R0,#BUF
LYH1: MOV P2,R5
LCALL CB
INC R5
CJNE R0,#BUF+2,LYH1
RET
CB: MOV DPTR,#TABLE
MOV A,@R0
MOVC A,@A+DPTR
MOV P0,A
LCALL D5MS
INC R0
RET
;----------温度协议---------------
FUWEI: CLR DQ ;进行拉低复位
MOV R2,#250 ;复位时间最少为480us
DJNZ R2,$ ;实际延时500us
SETB DQ ;复位完后拉高
MOV R2,#25 ;做50us等待18B20响应
LFU1: JNB DQ,BIAOZHI ;有回应进行18B20存在处理
DJNZ R2,LFU1
CLR F0
SJMP TFU1 ;无回应返回
BIAOZHI: SETB F0
MOV R2,#120
DJNZ R2,$
TFU1: SETB DQ
RET
XIE: MOV R3,#8 ;进行写协议
LXI1: CLR DQ
MOV R2,#6
DJNZ R2,$
RRC A
MOV DQ,C
MOV R2,#23
DJNZ R2,$
SETB DQ
DJNZ R3,LXI1
RET
DUCHU: MOV R4,#2
MOV R1,#LSB
LDU2: MOV R3,#8
LDU1: CLR DQ
NOP
SETB DQ
MOV R2,#9
DJNZ R2,$
MOV C,DQ
MOV R2,#21
DJNZ R2,$
RRC A
SETB DQ
DJNZ R3,LDU1
MOV @R1,A
DEC R1
DJNZ R4,LDU2
RET
;----------延时程序---------------
D5MS: MOV YS1,#5
D1: MOV YS2,#250
DJNZ YS2,$
DJNZ YS1,D1
RET
TABLE:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。