仓库的四路温度监测与报警系统 - 图文(8)

2019-01-19 19:01

附录1:系统程序

RLC A SWAP A MOV 31H,A MOV A,B

MOV C,40H;将28H中的最低位移入C RRC A MOV C,41H RRC A MOV C,42H RRC A MOV C,43H RRC A MOV 29H,A

LCALL DISPLAY;调用数码管显示子程序 RET

;****************************************************************** INIT_1820:

SETB P1.0 NOP

CLR P1.0;主机发出延时537微秒的复位低脉冲 MOV R1,#3 DJNZ R0,$ DJNZ R1,TSR1

SETB P1.0;然后拉高数据线 NOP NOP NOP

MOV R0,#25H DJNZ R0,TSR2 LJMP TSR4 ; 延时

TSR1: MOV R0,#107

TSR2: JNB P1.0,TSR3;等待DS18B20回应

TSR3: SETB FLAG1 ; 置标志位,表示DS1820存在

30

附录1:系统程序

LJMP TSR5 LJMP TSR7

TSR4: CLR FLAG1 ; 清标志位,表示DS1820不存在 TSR5: MOV R0,#117

TSR6: DJNZ R0,TSR6 ; 时序要求延时一段时间 TSR7: SETB P1.0

RET; 读出转换后的温度值

;*************************************************** GET_TEMPER:

SETB P1.0

LCALL INIT_1820;先复位DS18B20 JB FLAG1,TSS2

RET ; 判断DS1820是否存在?若DS18B20不存在则返回 LCALL WRITE_1820

MOV A,#44H ; 发出温度转换命令

LCALL WRITE_1820;这里通过调用显示子程序实现延时一段时间,等待ADLCALL DISPLAY

LCALL INIT_1820;准备读温度前先复位 MOV A,#0CCH ; 跳过ROM匹配 LCALL WRITE_1820

MOV A,#0BEH ; 发出读温度命令 LCALL WRITE_1820

LCALL READ_18200; 将读出的温度数据保存到35H/36H RET;写DS18B20的子程序(有具体的时序要求)

TSS2: MOV A,#0CCH ; 跳过ROM匹配

转换结束,12位的话750微秒

;*********************************************************** WRITE_1820:

MOV R2,#8;一共8位数据 CLR C MOV R3,#6 DJNZ R3,$ RRC A

31

WR1: CLR P1.0

附录1:系统程序

MOV P1.0,C MOV R3,#23 DJNZ R3,$ SETB P1.0 NOP

DJNZ R2,WR1

RET; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据

;**************************************************************** READ_18200:

MOV R4,#2 ; 将温度高位和低位从DS18B20中读出

MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)

RE00: MOV R2,#8;数据一共有8位 RE01: CLR C

SETB P1.0 NOP NOP CLR P1.0 NOP NOP NOP SETB P1.0 MOV R3,#9 MOV C,P1.0 MOV R3,#23 RRC A DJNZ R2,RE01 MOV @R1,A DEC R1 DJNZ R4,RE00 RET

RE10: DJNZ R3,RE10

RE20: DJNZ R3,RE20

32

附录1:系统程序

INIT_18201:

SETB P1.1 NOP

CLR P1.1;主机发出延时537微秒的复位低脉冲 MOV R1,#3 DJNZ R0,$ DJNZ R1,TSR11

SETB P1.1;然后拉高数据线 NOP NOP NOP

MOV R0,#25H DJNZ R0,TSR21 LJMP TSR41 ; 延时 LJMP TSR51 LJMP TSR71

TSR11: MOV R0,#107

TSR21: JNB P1.1,TSR31;等待DS18B20回应

TSR31: SETB FLAG2 ; 置标志位,表示DS1820存在 TSR41: CLR FLAG2 ; 清标志位,表示DS1820不存在 TSR51: MOV R0,#117

TSR61: DJNZ R0,TSR61 ; 时序要求延时一段时间 TSR71: SETB P1.1

RET; 读出转换后的温度值

;*************************************************** GET_TEMPER1:

SETB P1.1

LCALL INIT_18201;先复位DS18B20 JB FLAG2,TSS21

RET ; 判断DS1820是否存在?若DS18B20不存在则返回 LCALL WRITE_18201

MOV A,#44H ; 发出温度转换命令

LCALL WRITE_18201;这里通过调用显示子程序实现延时一段时间,等待AD

33

TSS21: MOV A,#0CCH ; 跳过ROM匹配

附录1:系统程序

转换结束,12位的话750微秒

LCALL DISPLAY

LCALL INIT_18201;准备读温度前先复位 MOV A,#0CCH ; 跳过ROM匹配 LCALL WRITE_18201

MOV A,#0BEH ; 发出读温度命令 LCALL WRITE_18201

LCALL READ_182001; 将读出的温度数据保存到35H/36H RET;写DS18B20的子程序(有具体的时序要求)

;*********************************************************** WRITE_18201:

MOV R2,#8;一共8位数据 CLR C MOV R3,#6 DJNZ R3,$ RRC A MOV P1.1,C MOV R3,#23 DJNZ R3,$ SETB P1.1 NOP

DJNZ R2,WR11

RET; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据

WR11: CLR P1.1

;**************************************************************** READ_182001:

MOV R4,#2 ; 将温度高位和低位从DS18B20中读出

MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)

RE001: MOV R2,#8;数据一共有8位 RE011: CLR C

SETB P1.1 NOP NOP CLR P1.1

34


仓库的四路温度监测与报警系统 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:乐理

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: