基于DS18B20的温度采集系统显示2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(基于DS18B20的温度采集系统显示)
目录
摘要 (2)
一、设计任务和要求 (3)
二、系统方案 (3)
三、核心元件的功能 (4)
1、AT89C51 (4)
1.1功能特性概括: (4)
1.2管脚说明: (4)
2、DS18B20 (6)
2.1 DS18B20的主要特性 (6)
2.2 DS18B20的内部结构 (7)
2.3 DS18B20工作原理 (7)
2.4高速暂存存储器 (10)
2.5 DS18B20的应用电路 (12)
2.6 DS1820使用中注意事项 (15)
四、理论分析与计算 (15)
4.1主程序流程图 (15)
4.2读出温度子程序流程图 (16)
4.3温度转换命令子程序流程图 (16)
五、电路与程序设计 (17)
5.1、电路图 (17)
5.2、程序 (18)
六、结果分析 (23)
七、总结 (24)
八、设计体会与今后的改进意见 (25)
摘要
本文介绍了基于DS18B20的温度实时采集与显示系统的设计与实现。
设计中选取单片机AT89C52作为系统控制中心,数字温度传感器DS18B20作为单片机外部信号源,精度较好的数码管来显示温度。
利用单片机程序来完成对DS18B20与AT89C52的控制,最终实现温度的实时采集与显示。
关键词:DS18B20 AT89C52 温度采集数码管
Abstract: This paper introduces the temperature based on DS18B20 real-time data acquisition and display system design and implementation. Design of AT89C52 as system selection single-chip microcomputer control center, and digital temperature sensor DS18B20 as external sources, microcontroller accuracy than good digital tube to display temperature. Using microcontroller program to accomplish DS18B20 and AT89C52 single control temperature, and finally achieve the real-time data acquisition and display.
Keywords: DS18B20 AT89C52 single temperature gathering digital tube
一、设计任务和要求
1、利用DS18B20实现温度采集,并用数码管显示。
能实现温度上下限的设置,并能够超限报警(用proteus实现)
2、硬件设计部分,根据设计的任务选定合适的单片机,根据控制对象设计接口电路。
设计的单元电路必须有工作原理,器件的作用,分析和计算过程;
3、软件设计部分,根据电路工作过程,画出软件流程图,根据流程图编写相应的程序,进行调试并打印程序清单;
4、原理图设计部分,根据所确定的设计电路,利用Protel工具软件绘制电路原理图,提供元器件清单。
5、计算说明书部分包括方案论证报告打印版或手写版,程序流程图具体程序等
6、图纸部分包括具体电路原理图打印版
7、设计要求还包括利用一天时间进行资料查阅与学习讨论,利用5天时间在实验室进行分散设计,最后三天编写报告。
最后一天进行成果验收。
二、系统方案
方案一:由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。
方案二:进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。
三、核心元件的功能
1、AT89C51
AT89S51美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含4K BytesISP(In-system programmable)的可反
复擦写1000次的Flash只读程序存储器,器
件采用ATMEL公司的高密度、非易失性存储技
术制造,兼容标准MCS-51指令系统及AT89C51
引脚结构,芯片内集成了通用8位中央处理器
和ISP Flash存储单元。
单片机AT89S51强大
的功能可为许多嵌入式控制应用系统提供高
性价比的解决方案。
AT89C51芯片的引脚结构如图1所示:
1.1功能特性概括:
AT89S51提供以下标准功能:40个引脚、
4K Bytes Flash片内程序存储器、128 Bytes
的随机存取数据存储器(RAM)、32个外部双
向输入/输出(I/O)口、5个中断优先级2层
中断嵌套中断、2个数据指针、2个16位可编图1 程定时/计数器、2个全双工串行通信口、看门狗(WDT)电路、片内振荡器及时钟电路。
此外,AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式,空闲模式,CPU暂停工作,而RAM、定时/计数器、串行通信口、外中断系统可继续工作。
掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求
1.2管脚说明:
P0口:P0口为一个8位漏级开路双向I/O口,也即地址/数据总线复用口。
作为输出口用时,能驱动8个TTL逻辑门电路。
对端口写“1”时,被定义为高阻输入。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口:P1口是一个带内部上拉电阻的8位双向I/O口,P1口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会
输出一个电流(I IL)。
在Flash编程和程序校验期间,P1接收低8位地址。
部分端口还有第二功能,如表1所示:
表1 P1口部分引脚第二功能
P2口:P2口是一个带有内部上拉电阻的8位双向I/O口, P2口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低
)。
时会输出一个电流(I
IL
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据寄存器(例如执行MOVX@Ri指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。
在Flash编程或校验时,P2亦接收高位地址和其它控制信号。
P3口: P3口是一个带有内部上拉电阻的双向8位I/O口, P3口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写“1”时,它们被内部的上拉电阻拉高并可
)。
作为输入端口。
作输入口使用时,被外部信号拉低的P3口将用上拉电阻输出电流(I
IL P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表2所示:
P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
表2 P3口引脚第二功能
RST:复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上的高电平时间将使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFR AUXR的DISRTO位(地址8EH)可打开或关闭该功能。
DISRTO位缺省为RESET输出高电平打开状态。
ALE/:当访问外部存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部寄存器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信
号,因此它可对外输出时钟或用于定时目的。
值得注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。
对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只要一条MOVX和MOVC指令才会激活ALE。
此外,该引脚会被微弱拉高,
单片机执行外部程序时,应设置ALE无效。
PSEN:程序存储允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。
当访问外部数据存储器时,没有两次有效的PSEN信号。
EA/VPP:外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需要注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端保持高电平(接VCC端),CPU则执行内部程序存储器中的指令。
Flash存储器编程期间,该引脚用于施加+12V编程电压(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入端。
XTAL2:反向振荡放大器器的输出端。
2、DS18B20
美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持 "一线总线"接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
现在,新一代的DS18B20体积更小、更经济、更灵活。
使你可以充分发挥“一线总线”的优点。
新的"一线器件"DS18B20体积更小、适用电压更宽、更经济。
DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。
可选更小的封装方式,更宽的电压适用范围。
分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DS18B20的性能是新一代产品中最好的!性能价格比也非常出色!继"一线总线"的早期产品后,DS1820开辟了温度传感器技术的新概念。
DS18B20
使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。
DS18B20也支持"一线总线"接口,测量温度范围为-55°C~+125°C,在-10~+85°C 范围内,精度为±0.5°C。
现场温度直接以"一线总线"的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3.0V~5.5V的电压范围,使系统设计更灵活、方便。
而且新一代产品更便宜,体积更小。
2.1 DS18B20的主要特性
(1)适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理
器与DS18B20的双向通讯
(3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温
(4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内
(5)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃
(6)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温
(7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快
(8)测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力
(9)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
2.2 DS18B20的内部结构
DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20引脚定义:
(1) GND为电源地;
(2) DQ为数字信号输入/输出端;
(3) VDD为外接供电电源输入端(在寄生电源接线方式时接地)
2.3 DS18B20工作原理
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
DS18B20测温原理如图3所示。
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数
器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
图3: DS18B20测温原理框图
DS18B20有4个主要的数据部件:
(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。
光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个
DS18B20的目的。
(2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
表1: DS18B20温度值格式表
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。
表2: DS18B20温度数据表
(3)DS18B20温度传感器的存储器
DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
(4)配置寄存器
表3:配置寄存器结构
低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
在DS18B20出厂时该位被设置为0,用户不要去改动。
R1和R0用来设置分辨率,如
表4:温度分辨率设置表
2.4高速暂存存储器
高速暂存存储器由9个字节组成,其分配如表5所示。
当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。
对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,
表5: DS18B20暂存寄存器分布
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的
表6: ROM指令表
表7: RAM指令表
2.5 DS18B20的应用电路
DS18B20测温系统具有测温系统简单、测温精度高、连接方便、占用口线少等优点。
下面就是DS18B20几个不同应用方式下的测温电路图:
2.5.1 DS18B20寄生电源供电方式电路图
如下面图4所示,在寄生电源供电方式下,DS18B20从单线信号线上汲取能量:在信号线DQ处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。
独特的寄生电源方式有三个好处:
(1)进行远距离测温时,无需本地电源
(2)可以在没有常规电源的条件下读取ROM
(3)电路更加简洁,仅用一根I/O口实现测温要想使DS18B20进行精确的温度转换,I/O 线必须保证在温度转换期间提供足够的能量,由于每个DS18B20在温度转换期间工作电流达到1mA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差极大。
因此,图4电路只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。
并且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。
图4
2.5.2 DS18B20寄生电源强上拉供电方式电路图
改进的寄生电源供电方式如下面图5所示,为了使DS18B20在动态转换周期中获得足够的电流供应,当进行温度转换或拷贝到E2存储器操作时,用MOSFET把I/O线直接拉到VCC就可提供足够的电流,在发出任何涉及到拷贝到E2存储器或启动温度转换的指令后,必须在最多10μS内把I/O线转换到强上拉状态。
在强上拉方式下可以解决电流供应不走的问题,因此也适合于多点测温应用,缺点就是要多占用一根I/O口线进行强上拉切换。
图5
2.5.3 DS18B20的外部电源供电方式
在外部电源供电方式下,DS18B20工作电源由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证转换精度,同时在总线上理论可以挂接任意多个DS18B20传感器,组成多点测温系统。
注意:在外部供电的方式下,DS18B20的GND引脚不能悬空,否则不能转换温度,读取的温度总是85℃。
图6外部供电方式单点测温电路
图7:外部供电方式的多点测温电路图
外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。
推荐大家在开发中使用外部电源供电方式,毕竟比寄生电源方式只多接一根VCC引线。
在外接电源方式下,可以充分发挥DS18B20宽电源电压范围的优点,即使电源电压VCC降到3V时,依然能够保证温度量精度。
2.6 DS1820使用中注意事项
DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:
1) 较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。
在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。
2) 在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中并非如此。
当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。
3) 连接DS1820的总线电缆是有长度限制的。
试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。
当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。
这种情况主要是由总线分布电容使信号波形产生畸变造成的。
因此,在用DS1820进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。
4) 在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。
这一点在进行DS1820硬件连接和软件设计时也要给予一定的重视。
测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接
四、理论分析与计算
系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。
4.1主程序流程图
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。
这样可以在一秒之内测量一次被测温度,其程序流程见图8所示。
图8 程序流程图
4.2读出温度子程序流程图
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,验有错时
不进行温度数据的改写。
其程序流程图如图9所示
4.3温度转换命令子程序流程图
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为
750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。
温度转换命令子程序流
程图如上图,图9所示
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图10所示。
五、电路与程序设计
5.1、电路图
5.2、程序
temp1 equ 5ah ;符号位和耗电量位公用的存放单元
temp2 equ 5bh ;十位存放单元
temp3 equ 5ch ;个位存放单元
temp4 equ 5dh
temp5 equ 5eh ;数据临时存放单元
temp6 equ 5fh
temp7 equ 60h
temp8 equ 61h
org 0000h
ajmp main
org 0030h
main:
mov sp,#70h
lcall int ;调用DS18B20初始化函数
main1: lcall gettemp ;调用温度转换函数
lcall chuli ;调用温度计算函数
lcall disp ;调用温度显示函数
ajmp main1 ;循环
int:
l0: setb p3. 6 ;先释放DQ总线
mov r2,#250 ;给R2赋延时初值,同时可让DQ保持高电平2us
l1: clr p3.6 ;给DQ一个复位低电平
djnz r2,l1 ;保持低电平的时间至少为480us
setb p3.6 ;再次拉高DQ释放总线
mov r2,#25
l2:
djnz r2,l2 ;保持15us-60us
clr c
orl c,p3.6 ;判断是否收到低脉冲
jc l0
mov r6,#100
l3:
orl c,p3.6
djnz r6,l3 ;存在低脉冲保持60us-240us
;jc l0 ;否则继续从头开始,继续判断
setb p3.6
ret
;调用温度转换函数
gettemp:
clr psw.4
setb psw.3 ;设置工作寄存器当前所在的区域
clr ea ;使用DS18B20前一定要禁止任何中断
lcall int ;初始化DS18B20
mov a,#0cch ;送入跳过ROM命令
lcall write
mov a,#44h ;送入温度转换命令
lcall write
lcall int ;温度转换完成,再次初始化
mov a,#0cch ;送入跳过ROM命令
lcall write
mov a,#0beh ;送入读温度暂存器命令
lcall write
lcall read
mov temp4,a ;读出温度的低字节存在TEMP4
lcall read
mov temp5,a ;读出温度的高字节存在TEMP5
setb ea
ret
chuli: mov a, temp5 ;将温度的高字节取出
jnb p3.6,zheng ;判断最高们是否为0,为则表示温度为正,则转
到ZHENG否则温度为负,将温度的低字节取出mov a, temp4
cpl a ;求反
inc a ;加工厂
mov temp8,a ;存到TEMP8
anl a,#0fh ;保留低四位
lcall muld ;调用乘以625子程序
lcall hb2 ;调用双字节16进制数转成BCD码子程序
mov a,r4 ;将结果的千位百位取出
anl a,#0f0h ;保留千位
swap a
mov temp7,a ;把小数结果保存在TEMP7中
mov a,temp4 ;再次取出温度低字节
anl a,#0ffh ;判断是否为0
jz xx ;为何则转到XX执行
mov a,temp5;
cpl a ;不为则直接将温度的高字节取反
sjmp yy
xx: mov a,temp5 ;为0则求补码
cpl a
inc a
yy: anl a,#0f0h ;保留高字节的低四位
swap a ;将其换到高4位
mov r5,a ;暂时保存于R5中
mov a,temp8 ;取出求反后的低位字节
anl a,#0f0h ;取其高四位
swap a ;将其换到低四位
orl a,r5 ;合并成温度的整数部分
mov temp6,a ;将整数部分存到TEMP6中
lcall hbcd ;调用一字节的16进制转换BCD数的子程
序
mov temp1,#0bh ;将号的段选值存到符号位
mov a,temp2 ;取出十位
cjne a,#00h,next
mov temp2,#0ch ;十位为0不显示
ret
zheng: mov a,temp4 ;将温度的低字节取出
anl a,#0fh ;保留低四位
lcall muld ;调用乘以625子程序
lcall hb2 ;调用双字节16进制数转换成BCD码子
程序
mov a,r4 ;将结果的千位百位取出
anl a,#0f0h ;保留千位
swap a
mov temp7,a ;把小数结果保存在TEMP7中
mov a,temp4 ;再次取出温度的低字节
anl a,#0f0h 保留高4位
swap a ;换到低4位
mov r5,a ;暂时保存于R5中
mov a,temp5 ;取出温度的高字节
anl a,#0fh ;保留低4位
swap a ;换到高4位
orl a,r5 ;合并成温度的整数部分
mov temp6,a ;整数部分存到TEMP6中
lcall hbcd ;单字节的16进制转换成BCD码
mov a,temp1 ;取出百位
cjne a,#00h,next ;百位不为0则转NEXT
mov temp1,#0ch ;为0则不显
mov a,temp2 ;取出十位
cjne a,#00h,next
mov temp2,#0ch ;十位为0也不是
next:ret
muld:
mov b,#71h
mul ab
mov r7,a
mov r6,b
mov b,#02h
mul ab
add a,r6
mov r6,a
ret
write:
mov r3,#8 ;一个字节共8位
wr1: setb p3.6 ;先释放总线
mov r4,#8
rrc a ;把要写的字节的最低位右环移到C中
clr p3.6 ;把C中的位写到DQ总线中
wr3:
djnz r4,wr3 ;保持低电平0-15us
mov p3.6, c;
mov r4 ,#20
djnz r4,$
djnz r3,wr1
setb p3.6
ret
read:
mov r6,#8
re1: setb p3.6 ;先释放总线
nop
clr p3.6 ;把要写的字节的最低位右环移到C中
nop ;写开始
mov r4,#4 ;保持低电平0-15us
setb p3.6 ;将C中的位写到DQ总线上
re2:
djnz r4,re2 ;产生读时间
mov c,p3.6 ;将总线上的位读到C
mov r5,#30
djnz r5,$ ;持续60us
rrc a ;将C里的位右环移到A里
djnz r6,re1 ;读下一位
setb p3.6
ret
hbcd:
mov a,temp6
mov b,#10
div ab
mov temp3,b ;将个位存到TEMP3
mov b,#10
div ab
mov temp2, ;将十位存到TEMP2
mov temp1,a ;将百位存到TEMP1
ret
hb2:
clr a
mov r3,a
mov r4,a
mov r5,a
mov r2,#10h
hb3:
mov a,r7
rlc a
mov r7,a
mov a,r6
rlc a
mov r6,a
mov a,r5
addc a,r5
da a
mov r5,a
mov a,r4
addc a,r4
da a
mov r4,a
mov a,r3
addc a,r3
mov r3,a
djnz r2,hb3
ret
disp:
mov dptr,#disptab
mov r0,#4
dp1: mov r1,#140
loop: mov a,temp7 ;取出小数部分
movc a,@a+dptr ;取出相应的字型码
mov p1,a ;显示在数码管上
setb p3.0 ;数码管位选
acall delay100 ;延时
clr p3.0 ;清数码管位选
mov a,temp3 ;取个位
movc a,@a+dptr
anl a,#7fh ;显示小数点
mov p1,a
setb p3.1
acall delay100 ;取十位
clr p3.1
mov a,temp2
movc a,@a+dptr
mov p1,a
setb p3.2
acall delay100
clr p3.2
mov a,temp1 ;取符号位或百位
movc a,@a+dptr
mov p1,a
setb p3.3
acall delay100
clr p3.3
djnz r1,loop ;循环显示
djnz r0,dp1
ret
delay100:
mov r7,#8 0 ;延时
djnz r7,$
ret
disptab: db
0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,0ffh,0bfh,0ffh
end
六、结果分析
该课程设计我们完成了最基本的温度采集(如下图),但还有一些小功能还没有实现。
七、总结
经过两个星期的实习,过程曲折可谓一语难尽。
在此期间我们也失落过,也曾一度热情高涨。
从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。
生活就是这样,汗水预示着结果也见证着收获。
劳动是人类生存生活永恒不变的话题。
通过实习,我才真正领略到“艰苦奋斗”这一词的真正含义,我才意识到老一辈电子设计为我们的社会付出。
我想说,设计确实有些辛苦,但苦中也有乐,在如今单一的理论学习中,很少有机会能有实践的机会,但我们可以,而且设计也是一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这里洒下,大学里一年的相处还赶不上这十来天的合作,我感觉我和同学们之间的距离更加近了;我想说,确实很累,但当我们看到自己所做的成果时,心中也不免产生兴奋;正所谓“三百六十行,行行出状元”。
我们同样可以为社会作出我们应该做的一切,这有什么不好?我们不断的反问自己。
也许有人不喜欢这类的工作,也许有人认为设计的工作有些枯燥,但我们认为无论干什么,只要人生活的有意义就可。
社会需要我们,我们也可以为社会而工作。
既然如此,那还有什么必要失落呢?于是我们决定沿着自己的路,执着的走下去。
同时我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。
某个人的离群都可能导致导致整项工作的失败。
实习中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。
团结协作是我们实习成功的一项非常重要的保证。
而这次实习也正好锻炼我们这一点,这也是非常宝贵的。
对我们而言,知识上的收获重要,精神上的丰收更加可喜。
挫折是一份财富,经历是一份拥有。
这次实习必将成为我人生旅途上一个非常美好的回忆!通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第。