基于DS18B20的温度采集系统显示Word文档格式.docx

上传人:b****5 文档编号:20788527 上传时间:2023-01-25 格式:DOCX 页数:15 大小:81.03KB
下载 相关 举报
基于DS18B20的温度采集系统显示Word文档格式.docx_第1页
第1页 / 共15页
基于DS18B20的温度采集系统显示Word文档格式.docx_第2页
第2页 / 共15页
基于DS18B20的温度采集系统显示Word文档格式.docx_第3页
第3页 / 共15页
基于DS18B20的温度采集系统显示Word文档格式.docx_第4页
第4页 / 共15页
基于DS18B20的温度采集系统显示Word文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于DS18B20的温度采集系统显示Word文档格式.docx

《基于DS18B20的温度采集系统显示Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于DS18B20的温度采集系统显示Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

基于DS18B20的温度采集系统显示Word文档格式.docx

高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。

计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。

图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。

图1:

DS18B20测温原理框图

三理论分析与计算

系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。

3.1主程序流程图

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。

这样可以在一秒之内测量一次被测温度,其程序流程见图2所示。

图2程序流程图

3.2读出温度子程序流程图

读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,验有错时不进行温度数据的改写。

其程序流程图如图3所示:

图3温度转换器流程图

3.3温度转换命令子程序流程图

温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。

温度转换命令子程序流程图如上图3所示

计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图4所示。

图4计算温度流程图

四电路与程序设计

4.1电路图

4.2程序

temp1equ5ah;

符号位和耗电量位公用的存放单元

temp2equ5bh;

十位存放单元

temp3equ5ch;

个位存放单元

temp4equ5dh

temp5equ5eh;

数据临时存放单元

temp6equ5fh

temp7equ60h

temp8equ61h

org0000h

ajmpmain

org0030h

main:

movsp,#70h

lcallint;

调用DS18B20初始化函数

main1:

lcallgettemp;

调用温度转换函数

lcallchuli;

调用温度计算函数

lcalldisp;

调用温度显示函数

ajmpmain1;

循环

int:

l0:

setbp3.6;

先释放DQ总线

movr2,#250;

给R2赋延时初值,同时可让DQ保持高电平2us

l1:

clrp3.6;

给DQ一个复位低电平

djnzr2,l1;

保持低电平的时间至少为480us

setbp3.6;

再次拉高DQ释放总线

movr2,#25

l2:

djnzr2,l2;

保持15us-60us

clrc

orlc,p3.6;

判断是否收到低脉冲

jcl0

movr6,#100

l3:

orlc,p3.6

djnzr6,l3;

存在低脉冲保持60us-240us

;

jcl0;

否则继续从头开始,继续判断

setbp3.6

ret

gettemp:

clrpsw.4

setbpsw.3;

设置工作寄存器当前所在的区域

clrea;

使用DS18B20前一定要禁止任何中断

初始化DS18B20

mova,#0cch;

送入跳过ROM命令

lcallwrite

mova,#44h;

送入温度转换命令

lcallwrite

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

mova,#0beh;

送入读温度暂存器命令

lcallread

movtemp4,a;

读出温度的低字节存在TEMP4

movtemp5,a;

读出温度的高字节存在TEMP5

setbea

chuli:

mova,temp5;

将温度的高字节取出

jnbp3.6,zheng;

判断最高们是否为0,为则表示温度为正,则转到ZHENG否则温度为负,将温度的低字节取出

mova,temp4

cpla;

求反

inca;

加工厂

movtemp8,a;

存到TEMP8

anla,#0fh;

保留低四位

lcallmuld;

调用乘以625子程序

lcallhb2;

调用双字节16进制数转成BCD码子程序

mova,r4;

将结果的千位百位取出

anla,#0f0h;

保留千位

swapa

movtemp7,a;

把小数结果保存在TEMP7中

mova,temp4;

再次取出温度低字节

anla,#0ffh;

判断是否为0

jzxx;

为何则转到XX执行

mova,temp5;

不为则直接将温度的高字节取反

sjmpyy

xx:

mova,temp5;

为0则求补码

cpla

inca

yy:

anla,#0f0h;

保留高字节的低四位

swapa;

将其换到高4位

movr5,a;

暂时保存于R5中

mova,temp8;

取出求反后的低位字节

取其高四位

将其换到低四位

orla,r5;

合并成温度的整数部分

movtemp6,a;

将整数部分存到TEMP6中

lcallhbcd;

调用一字节的16进制转换BCD数的子程序

movtemp1,#0bh;

将号的段选值存到符号位

mova,temp2;

取出十位

cjnea,#00h,next

movtemp2,#0ch;

十位为0不显示

zheng:

mova,temp4;

将温度的低字节取出

调用双字节16进制数转换成BCD码子程序

再次取出温度的低字节

anla,#0f0h保留高4位

换到低4位

mova,temp5;

取出温度的高字节

保留低4位

换到高4位

整数部分存到TEMP6中

单字节的16进制转换成BCD码

mova,temp1;

取出百位

cjnea,#00h,next;

百位不为0则转NEXT

movtemp1,#0ch;

为0则不显

十位为0也不是

next:

muld:

movb,#71h

mulab

movr7,a

movr6,b

movb,#02h

mulab

adda,r6

movr6,a

write:

movr3,#8;

一个字节共8位

wr1:

setbp3.6;

先释放总线

movr4,#8

rrca;

把要写的字节的最低位右环移到C中

clrp3.6;

把C中的位写到DQ总线中

wr3:

djnzr4,wr3;

保持低电平0-15us

movp3.6,c;

movr4,#20

djnzr4,$

djnzr3,wr1

read:

movr6,#8

re1:

nop

nop;

写开始

movr4,#4;

将C中的位写到DQ总线上

re2:

djnzr4,re2;

产生读时间

movc,p3.6;

将总线上的位读到C

movr5,#30

djnzr5,$;

持续60us

将C里的位右环移到A里

djnzr6,re1;

读下一位

ret

hbcd:

mova,temp6

movb,#10

divab

movtemp3,b;

将个位存到TEMP3

movtemp2,;

将十位存到TEMP2

movtemp1,a;

将百位存到TEMP1

hb2:

clra

movr3,a

movr4,a

movr5,a

movr2,#10h

hb3:

mova,r7

rlca

mova,r6

mova,r5

addca,r5

daa

mova,r4

addca,r4

mova,r3

addca,r3

djnzr2,hb3

disp:

movdptr,#disptab

movr0,#4

dp1:

movr1,#140

loop:

mova,temp7;

取出小数部分

movca,@a+dptr;

取出相应的字型码

movp1,a;

显示在数码管上

setbp3.0;

数码管位选

acalldelay100;

延时

clrp3.0;

清数码管位选

mova,temp3;

取个位

movca,@a+dptr

anla,#7fh;

显示小数点

movp1,a

setbp3.1

取十位

clrp3.1

mova,temp2

setbp3.2

acalldelay100

clrp3.2

取符号位或百位

setbp3.3

clrp3.3

djnzr1,loop;

循环显示

djnzr0,dp1

delay100:

movr7,#80;

djnzr7,$

disptab:

db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0ffh,0bfh,0ffh

end

五结果分析

该课程设计我们完成了最基本的温度采集,如下图:

总结

本系统采用采用单片机和数字温度转换器DS18B20来实现,具有主机接口简单,结构灵活,调试方便等特点,实验结果表明这种测温系统转换速度快、精度高。

这次实习不仅巩固了以前所学过的知识,而且学到了很多在书本上没有的知识。

通过这次课程设计,懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。

在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。

虽然在课堂上我学了不少东西,但当付诸于实际时却摸不着头脑,所以我们不但要学习知识,还要在实践中运用知识,做到游刃有余。

不管是在以后的工作或学习中,我都会全力以赴,积极思考,勇于探索,不断创新。

在设计中遇到了很多编程方面的调试问题还没有解决,例如仍没有设计出报警系统、温度上下限的限制。

我想在以后我会继续查找各方面资料、请教老师、与同学共同探讨,一起来解决这些问题。

同时在以后的日子里我会慢慢改正在这次课程设计中所犯的错误、把学过的知识掌握的更加牢固。

参考文献

《电子设计自动化技术基础》马建国、孟宪元编清华大学出版2004年4月

《实用电子系统设计基础》姜威2008年1月

《单片机系统的PROTEUS设计与仿真》张靖武2007年4月

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1