首页 理论教育 多个传感器温度监测系统仿真图

多个传感器温度监测系统仿真图

时间:2023-11-16 理论教育 版权反馈
【摘要】:用单片机控制DS18B20温度传感器,可测量温度读取数据,并对DS18B20转换后的数据进行处理,最终在显示器上显示出测量的温度值。1 硬件设计如图8-9所示为一个由单总线构成的多个DS18B20温度传感器监测系统仿真图。采用寄生供电模式,4个DS18B20编号自上向下为1、2、3、4。要求6个数码管循环显示4个传感器温度值,显示格式为:自左向右,第1位,DS18B20的编号;第2位,不显(灭);后4位显示相应DS18B20温度值。

多个传感器温度监测系统仿真图

单片机控制DS18B20温度传感器,可测量温度读取数据,并对DS18B20转换后的数据进行处理,最终在显示器上显示出测量的温度值。

1 硬件设计

如图8-9所示为一个由单总线构成的多个DS18B20温度传感器监测系统仿真图。

978-7-111-54295-7-Chapter08-14.jpg

图8-9 单总线构成的多温度监测系统仿真图

在图8-9中,4个温度传感器DS18B20通过4个电子开关闭合挂在单片机P1.7单总线上。采用寄生供电模式,4个DS18B20编号自上向下为1、2、3、4。要求6个数码管循环显示4个传感器温度值,显示格式为:自左向右,第1位,DS18B20的编号;第2位,不显(灭);后4位显示相应DS18B20温度值(BCD码)。小数与字形码的对应关系见表8-5。

表8-5 小数与字形码的对应关系

978-7-111-54295-7-Chapter08-15.jpg

2 程序设计

/***DS18B20_onewire.A51***/

DQ BIT P1.7

TEMP_9byte EQU 50H;转换温度值保存单元地址

ORG 0000H

AJMP MAIN

ORG 0020H

MOV SP,#60H

MAIN:LCALL GET_TEMP;调用读转换子程序

LCALL BCD_CONV;调用BCD码显示格式转换子程序

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

SJMP MAIN

/******读转换子程序******/

GET_TEMP:MOV R0,#TEMP_9byte

LCALL INT;调用初始化子程序

MOV A,#0CCH

LCALL WRBYTE;送入忽略ROM命令

MOV A,#44H

LCALL WRBYTE;送入温度转换命令

LCALL INT;温度转换完成,再次初始化

MOV A,#0CCH

LCALL WRBYTE;送入忽略ROM命令

MOV A,#0BEH

LCALL WRBYTE;送入读温度暂存器命令

LCALL RDBYTE

MOV @R0,A;读出温度值低字节存入温度值保存单元

INC R0;转换温度值保存单元地址+1

LCALL RDBYTE

MOV @R0,A;读出温度值高字节存入温度值保存单元

MOV 73H,R0;暂存转换温度值保存单元地址

RET

/******初始化子程序******/

INT:CLR EA;关中断

L0:CLR DQ;总线低电平复位

MOV R2,#240

L1:DJNZ R2,L1;总线复位保持480μs

SETB DQ;释放总线

MOV R2,#30

L4:DJNZ R2,L4;释放总线保持60μs

CLR C;进位C清0

ORL C,DQ

JC L0;有应答信号吗?无则重新来

MOV R6,#20;有应答,保持90μs

L5:ORL C,DQ

JC L3

DJNZ R6,L5

SJMP L0

L3:MOV R2,#240

L2:DJNZ R2,L2

SETB EA;开中断

RET

/******写一个字节子程序******/

WRBYTE:CLR EA;关中断

MOV R3,#8;写入DS18B20的字节数,一个字节8位,存在A中

WR1:SETB DQ

MOV R4,#8

RRC A;把一个字节分成8位移给C

CLR DQ;开始写入DS18B20总线复位低电平状态

WR2:DJNZ R4,WR2;总线复位保持16μs

MOV DQ,C;写入一位

MOV R4,#20

WR3:DJNZ R4,WR3;等待40μs

DJNZ R3,WR1;写入下一位

SETB DQ;重新释放总线

SETB EA

RET

/******读一个字节******/

RDBYTE:CLR EA

MOV R6,#8

RE1:CLR DQ;读之前总线保持为低(www.xing528.com)

MOV R4,#4

NOP

SETB DQ;释放总线

RE2:DJNZ R4,RE2;持续8μs

MOV C,DQ;从总线读得一个位

RRC A;把读的位移给A

MOV R5,#30

RE3:DJNZ R5,RE3;持续60μs

DJNZ R6,RE1;读下一个位

SETB DQ

RET

/******BCD码显示格式转换子程序******/

BCD_CONV:MOV 79H,#11H;获取不亮字形码索引

MOV 7AH,#11H

MOV R0,73H;温度值高字节的地址送R0

MOV A,@R0;读A-D转换的高8位

ANL A,#0FH;获取低4位数值

SWAP A;高低字节交换,获得12位转换值的高4位

MOV R3,A;保存高4位

DEC R0

MOV A,@R0;读A-D转换的低8位

ANL A,#0F0H;获得12位转换值的中4位

SWAP A

ORL A,R3;将12位转换值的高、中4位转换得整数部分

JB ACC.7,NEGAT;判断该值符号位,负数转DATA2处

CHANG:MOV B,#100

DIV AB;正数除以100

MOV 7BH,A;获得百位数送显示缓冲区7BH单元

CHANG1:MOV A,B

MOV B,#10

DIV AB;除以100后的余数除以10

MOV 7CH,A;获得十位数送显示缓冲区7CH单元

MOV 7DH,B;个位数送显示缓冲区7DH单元

MOV A,@R0;读取采集的第二字节低8位值

JB ACC.3,XIAOSU;判断小数最高位是1转XIAOSU

MOV 7EH,#00H;第二字节最高位为0,送0到显示缓冲区7EH单元

AJMP DATAEND

XIAOSU:MOV 7EH,#05H;第二字节最高位为1,送5到显示缓冲区7EH单元

DATAEND:RET

NEGAT:CPL A;采集值为负值,求取补码原码

INC A

MOV 7BH,#10H;将能获取符号的字形码送显示缓冲区7BH单元

AJMP CHANG1

/******数码管显示子程序******/

DISPLAY:MOV R0,#79H;显示缓冲区首地址送R0

MOV R3,#01H ;字位码送R3保存

MOV A,R3

LD0:MOV P2,A;字位码送位码端口P2,点亮该位

MOV A,@R0;取出一位要显示数据

MOV DPTR,#TAB1;表首地址送DPTR

MOVC A,@A+DPTR;查表获取该数据的字形码

CJNE R3,#10H,DIR1;判断带小数点

ANL A,#7FH;获取带小数点字形码

DIR1:MOV P0,A;字形码送段码端口P0

ACALL DL11;调用延时子程序

INC R0 ;缓冲区地址加1

MOV A,R3;取出位码

JB ACC.5,LD1;判断6位数码管显示完?是转LD1

RL A;未完左移一位

MOV R3,A;保存位码

AJMP LD0

LD1:RET;子程序返回

TAB1:DB 0C0H,0F9H,0A4H,0B0H,99H,92H

DB 82H,0F8H,80H,90H,88H,83H,0C6H,0A1H

DB 86H,8EH,0BFH,0FFH,0FFH

/******延时子程序******/

DL11:MOV R7,#02H

DL:MOV R6,#0FFH

DL6:DJNZ R6,DL6

DJNZ R7,DL

RET

END

3 LCD显示温度测试

在图8-10所示电路中使用LCD替换数码管进行显示,即在例中的程序里增加了调用子程序(读ROM)方式,程序运行可在LCD中显示出DS18B20的ROM编码,每只DS18B20都有一个唯一存储在ROM中的64位编码,最低8位是单线系列编码28H,接着的48位是一个唯一的序列号,最高8位是以上56位的CRC编码。图8-10所示电路可以用DS18B20独有的64位芯片序列号(ID)辨认器件。电路设置单片机端口一条线作为单总线,具有单总线特性DS18B20作为从芯片,DS18B20传感电路通常通过在数据线和VCC之间连一个分立电阻实现。

DS18B20温度传感器内部有温度上下限的限制,当测试温度超过限制值时,对应LED灯闪烁,按键开关切换显示转换输出。

978-7-111-54295-7-Chapter08-16.jpg

图8-10 LCD显示温度测试

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈