基于单片机控制的人体健康监测系统(文献综述+流程图+源程序) 第10页
3.4.2温度检测子程序:
WENDU: NOP
START:SETB P3.5;将P3.5置位
SETB P3.5
NOP
CCR P3.5; 主机发出537微秒的复位低脉冲
MOV R1,#3
TSR1:MOV R0,#107
DJNZ R0,$
SETB P3.5; 然后拉高数据
NOP
NOP
NOP
MOV R0,#25H
TSR2:JNB P35,TSR3;等待DS18B20回应
DJNZ R0,TSR2
LJMP TSR4;延时
TSR3:SETB FLAGH;置标志位,表示DS18B20存在
CLR P1.7;检查到DS18B20就表示就点亮P17LED
LJMP TSR5
TSR4:CLR FLAGH;清标志位,表示DS18B20不存在
CLR P1.1
LJMP TSR7
TSR5:
MOV RO,#117
TSR6:DJNZ R0,#TSR6;时序要求延时一段时间
TSR7:SETB P35
TB FLAGH,TSS2
CLR P1.2
TSS2:CLR P1.3;DS18B20已经被检测到
LCALL WRITE-1820
MOV A,#44H;发出温度转换指令
LCALL WRITE-1820
LCALL DISPLAY
LCALL INIT-1820;准备读温度前先复位
MOV A,#0CCH;跳过ROM匹配
LCALL WRITE-1820
MOV A,#0BEH; 发出读温度指令
LCALL READ_1820; 将读出的温度保存到35H36H
LCALL WRITE-1820
MOV R2,#8; 一共8位数据
CLR C
WR1:CLR P3.5
MOV R3,$
RRC A
MOV P3.5,C
MOV R3,#23
DJNZ R3,$
SETB P35
NOP
DJNZ R2,WR1
SETB P3.5
RET
READ_1820
MOV R4,#2
MOV R1,#29H
RE00:MOV R2,#8
RE01:CLR C
SETB P3.5
NOP
NOP
CLR P3.5
NOP
NOP
NOP
SETB P3.5
MOV R3,#9
RE01:DJNZ R3,RE10
MOV C,P3.5
MOV R3,#23
RE20:DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
DISPLAY:MOV R0,#28H
MOV A,@R0
RL A
RL A
RL A
MOV R2,A
MOV R0,#29H
MOV A,@R0
SWAP A;
MOV R0,28H
XCHD A,@RO
MOV R1,#50H
MOV A,@R1
SUBB A,#38
JNC BA0
MOV A,@R1
SUBB A,#36
JC BAO
MOV A,@R1
DA A
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>