数字温度计课程设计报告

数字温度计课程设计报告

1课题说明

随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够独立工作的温度检测和显示系统应用于诸多领域。传统的温度检测以热敏电阻为温度敏感元件。热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。本设计选用AT89C51型单片机作为主控制器件,DS18B20作为测温传感器,通过LCD1602实现温度显示。通过DS18B20直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好,在0℃~100℃最大线性偏差小于0.01℃。该器件可直接向单片机传输数字信号,便于单片机处理及控制。另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理过程。

2 实现方法

采用数字温度芯片DS18B20 测量温度,输出信号全数字化。采用了单总线的数据传输,由数字温度计DS18B20和AT89C51单片机构成的温度测量装置,它直接输出温度的数字信号,也可直接与计算机连接。采用AT89C51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。该系统利用AT89S51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限温度。该系统扩展性非常强。该测温系统电路简单、精确度较高、实现方便、软件设计也比较简单。系统框图如图1所示。

图1 DS18B20温度测温系统框图

3 硬件设计

3.1 单片机最小系统设计

 单片机小系统基本组成:单片机小系统由AT89S51芯片、电源电路、振荡电路和复位电路组成。

3.1.1  AT89S51芯片

AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。

引脚图

图2 AT89S51

3.2 各单元电路

3.2.1 电源电路

3.2.2 振荡电路

3.2.3 复位电路

                        

4 软件设计

4.1 主程序流程图

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图7所示。

4.2 各子程序流程图

1、初始化程序

所有操作都必须由初始化脉冲开始,波形如图,单片机先输出一个480~960us低电平到DQ引脚,再将DQ引脚置高电平,过15~60us后检测DQ引脚状态,若为低电平则DS18B20工作正常,否则初始化失败,不能正常测量温度。

2、 读取温度子程序                          

读取温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。主要包括以下三个命令:

(1)写暂存器命令 【4EH】

这个命令为由TH寄存器开始向DS18B20暂存器写入数据,4EH命令后的3字节数据将被保存到暂存器的地址2、3、4(TH、TL、CONFIG)三个字节。所有数据必须在复位脉冲前写完。即如果只想写一个字节的数据到地址2,可按如下流程:

1、初始化;

2、写0CCH,跳过ROM检测;

3、写4EH;     

4、写1字节数据;

5、复位,即向DQ输出480~960us低电平

(2)读暂存命令【BEH】

这个命令由字节0读取9个暂存器内容,如果不需要读取所有暂存内容,可随时输出复位脉冲终止读取过程

(3)转换温度命令【44H】

这个命令启动温度转换过程。转换温度时DS18B20保持空闲状态,此时如果单片机发出读命令, DS18B20将输出0直到转换完成,转换完成后将输出1。

3、写流程图

写时隙:写时隙由DQ引脚的下降沿引起。18B20有写1和写0两种写时隙。所有写时隙必须持续至少60μs,两个时隙之间至少有1μs的恢复时间。DS18B20在DQ下降沿后15μs~60μs间采样DQ引脚,若此时DQ为高电平,则写入一位1,若此时DQ为低电平,则写入一位0,如图9所示。所以,若想写入1,则单片机应先将DQ置低电平,15us后再将DQ置高电平,持续45μs;若要写入0,则将DQ置低电平,持续60μs。

4、读流程图

读时隙:读时隙由DQ下降沿引起,持续至少1μs的低电平后释放总线(DQ置1)DS18B20的输出数据将在下降沿15μs后输出,此时单片机可读取1位数据。读时隙结束时要将DQ置1。所有读时隙必须持续至少60μs,两个时隙之间至少有1μs的恢复时间。

图10  读流程图



5. DS-18B20 数字温度传感器

  该产品采用美国DALLAS公司生产的 DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

 1. 技术性能描述

  1.1 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

  1.2 测温范围 -55℃~+125℃,固有测温分辨率0.5℃。

  1.3 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。

  1.4 工作电源: 3~5V/DC

  1.5 在使用中不需要任何外围元件

  1.6 测量结果以9~12位数字量方式串行传送

  1.7 不锈钢保护管直径 Φ6

  1.8 适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温

  1.9 标准安装螺纹 M10X1, M12X1.5, G1/2”任选

  1.10 PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。 

 2.产品型号与规格

  型 号 测温范围 安装螺纹 电缆长度 适用管道

  TS-18B20 -55~125 无 1.5 m

  TS-18B20A -55~125 M10X1 1.5m DN15~25

  TS-18B20B -55~125 1/2”G 接线盒 DN40~ 60

 3.接线说明

  特点 独特的一线接口,只需要一条口线通信 多点能力,简化了分布式温度传感应用 无需外部元件 可用数据总线供电,电压范围为3.0 V至5.5 V 无需备用电源 测量温度范围为-55 ° C至+125 ℃ 。华氏相当于是-67 ° F到257华氏度 -10 ° C至+85 ° C范围内精度为±0.5 ° C

  温度传感器可编程的分辨率为9~12位 温度转换为12位数字格式最大值为750毫秒 用户可定义的非易失性温度报警设置 应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统

  描述该DS18B20的数字温度计提供9至12位(可编程设备温度读数。信息被发送到/从DS18B20 通过1线接口,所以中央微处理器与DS18B20只有一个一条口线连接。为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。 因为每一个DS18B20的包含一个独特的序号,多个ds18b20s可以同时存在于一条总线。这使得温度传感器放置在许多不同的地方。它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。

  8引脚封装 TO-92封装 用途 描述

  5 1 接地 接地

  4 2 数字 信号输入输出,一线输出:源极开路

  3 3 电源 可选电源管脚。见"寄生功率"一节细节方面。电源必须接地,为行动中,寄生虫功率模式。

  不在本表中所有管脚不须接线 。

  DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。该装置信号线高的时候,内部电容器 储存能量通由1线通信线路给片子供电,而且在低电平期间为片子供电直至下一个高电平的到来重新充电。 DS18B20的电源也可以从外部3V-5 .5V的电压得到。

  DS18B20采用一线通信接口。因为一线通信接口,必须在先完成ROM设定,否则记忆和控制功能将无法使用。主要首先提供以下功能命令之一: 1 )读ROM, 2 )ROM匹配, 3 )搜索ROM, 4 )跳过ROM, 5 )报警检查。这些指令操作作用在没有一个器件的64位光刻ROM序列号,可以在挂在一线上多个器件选定某一个器件,同时,总线也可以知道总线上挂有有多少,什么样的设备。

  若指令成功地使DS18B20完成温度测量,数据存储在DS18B20的存储器。一个控制功能指挥指示DS18B20的演出测温。测量结果将被放置在DS18B20内存中,并可以让阅读发出记忆功能的指挥,阅读内容的片上存储器。温度报警触发器TH和TL都有一字节EEPROM 的数据。如果DS18B20不使用报警检查指令,这些寄存器可作为一般的用户记忆用途。在片上还载有配置字节以理想的解决温度数字转换。写TH,TL指令以及配置字节利用一个记忆功能的指令完成。通过缓存器读寄存器。所有数据的读,写都是从最低位开始。

  DS18B20有4个主要的数据部件:

  (1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。

  (2) DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。 

  4.3.2存储器

  DS18B20的存储器包括高速暂存器RAM和可电擦除RAM,可电擦除RAM又包括温度触发器TH和TL,以及一个配置寄存器。存储器能完整的确定一线端口的通讯,数字开始用写寄存器的命令写进寄存器,接着也可以用读寄存器的命令来确认这些数字。当确认以后就可以用复制寄存器的命令来将这些数字转移到可电擦除RAM中。当修改过寄存器中的数时,这个过程能确保数字的完整性。

  高速暂存器RAM是由8个字节的存储器组成;第一和第二个字节是温度的显示位。第三和第四个字节是复制TH和TL,同时第三和第四个字节的数字可以更新;第五个字节是复制配置寄存器,同时第五个字节的数字可以更新;六、七、八三个字节是计算机自身使用。用读寄存器的命令能读出第九个字节,这个字节是对前面的八个字节进行校验。

  4.3.4.2 温度的读取

DS18B20在出厂时以配置为12位,读取温度时共读取16位,所以把后11位的2进制转化为10进制后在乘以0.0625便为所测的温度,还需要判断正负。前5个数字为符号位,当前5位为1时,读取的温度为负数;当前5位为0时,读取的温度为正数。16位数字摆放是从低位到高位。 

  4.3.4.3.DS18B20控制方法

  指 令 约定代码 操 作 说 明

  温度转换 44H 启动DS18B20进行温度转换

  读暂存器 BEH 读暂存器9位二进制数字

  写暂存器 4EH 将数据写入暂存器的TH、TL字节

  复制暂存器 48H 把暂存器的TH、TL字节写到E2RAM中

  重新调E2RAM B8H 把E2RAM中的TH、TL字节写到暂存器TH、TL字节

  读电源供电方式 B4H 启动DS18B20发送电源供电方式的信号给主CPU

  4.3.4.4 DS18B20的初始化

  (1) 先将数据线置高电平“1”。

  (2) 延时(该时间要求的不是很严格,但是尽可能的短一点)

  (3) 数据线拉到低电平“0”。

  (4) 延时750微秒(该时间的时间范围可以从480到960微秒)。

  (5) 数据线拉到高电平“1”。

  (6) 延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。

  (7) 若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。

  (8) 将数据线再次拉高到高电平“1”后结束。

  4.3.4.5 DS18B20的写操作

  (1) 数据线先置低电平“0”。

  (2) 延时确定的时间为15微秒。

  (3) 按从低位到高位的顺序发送字节(一次只发送一位)。

  (4) 延时时间为45微秒。

  (5) 将数据线拉到高电平。

  (6) 重复上(1)到(6)的操作直到所有的字节全部发送完为止。

  (7) 最后将数据线拉高。 

  4.3.4.6 DS18B20的读操作

  (1)将数据线拉高“1”。

  (2)延时2微秒。

  (3)将数据线拉低“0”。

  (4)延时15微秒。

  (5)将数据线拉高“1”。

  (6)延时15微秒。

  (7)读数据线的状态得到1个状态位,并进行数据处理。

(8)延时30微秒。

5.DS18B20测温原理

S18B20的测温原理如图15所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55 ℃所对应的一个基数值。

减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器 1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温图2中的斜率累加器用于补偿和修正测温过程中的非线性其输出用,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。

另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

图15  DS18B20测温原理图

在正常测温情况下,DS1820的测温分辨力为0.5℃,可采用下述方法获得高分辨率的温度测量结果:首先用DS1820提供的读暂存器指令(BEH)读出以0.5℃为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。考虑到DS1820测量温度的整数部分以0.25℃、0.75℃为进位界限的关系,实际温度Ts可用下式计算:

Ts=(Tz-0.25℃)+(CD-Cs)/CD

数字温度传感器DS18B20介绍

  

1、DS18B20的主要特性

  1.1、适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数 据线供电

  1.2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯

  1.3、 DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温

  1.4、DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内

  1.5、温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃

  1.6、可编程 的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温

  1.7、在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快

  1.8、测量结果直接输出数字温度信号,以"一 线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力

1.9、负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。

2、DS18B20的外形和内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的外形及管脚排列如下图1:

  DS18B20引脚定义: (1)DQ为数字信号输入/输出端;

  (2)GND为电源地;

  (3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。

  

  图2: DS18B20内部结构图

  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℃的数字输出为FE6FH,-55℃的数字输出为FC90H 。

  表2: DS18B20温度数据表

(3)DS18B20温度传感器的存储器 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器 TH、TL和结构寄存器。 (4)配置寄存器 该字节各位的意义如下:

  表3: 配置寄存器结构

  

  低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用 户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位)

  表4: 温度分辨率设置表

  

4、高速暂存存储器 高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在 高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。对应的温度计算: 当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。表 2是对应的一部分温度值。第九个字节是 冗余检验字节。

  表5: DS18B20暂存寄存器分布

  

  根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行 复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后 释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。

  表6: ROM指令表

  

表6: RAM指令表

  

6、DS18B20使用中注意事项

  DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:

  6.1、较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此 ,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对 DS1820操作部分最好采用汇编语言实现。

  6.2、在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个 DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时 要加以注意。

  6.3、连接DS1820的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的 测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正 常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS1820进行长距离测温系统设计时要充分考 虑总线分布电容和阻抗匹配问题。

  6.4、在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦 某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。这一点在进行DS1820硬件连接和软件设计时也要给予 一定的重视。 测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地

7.电路的仿真图、调试、程序烧写

用Keil与Proteus 搭建一个硬件仿真系统,进行联调, 在调试过程中要注意,Proteus中加载的是hex文件,因此在Keil运行时要生成hex文件才可以实现对系统的控制。

烧写程序的接口图如图14:

将单片机小系统按图14接好线后,用progisp下载线软件烧写。烧写的步骤为:1选择单片机型号;2打开hex 文件;3选择串口;4设置选项(不用修改);5下载。在烧写程序时注意要先安装单片机的驱动程序,另外,仿真器调试和实际烧进单片机内运行时存在运行程序时间的不同的问题。由于在调试的时候可以控制程序的单步运行,就相当于把每条语句之间的时间拉了很长,而且整个系统的运行速度会比正常运行要低。而单片机运行的时候是全速的,由于这两个时间的差别就决定了在调试时序方面的程序的时候会出现错误,可能在仿真器调试的时候很正常,烧进单片机内运行时不行,因此在烧写程序时要注意主要方面的问题。

8. 系统优缺点

优点:

(1)该系统流程符合数字温度计的要求;

(2)操作简单易用;

(3)功能全,实现自动化数码管显示;

(4)功能可扩充性强。

缺点:

(1)该系统在温度传输的时间上有一定的延迟,不能立即显示温度;

(2)在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环;

(3)较小的硬件开销需要相对复杂的软件进行补偿,在二者的权衡方面还需进一步提高。

9. 心得与体会

在这次实验中,我学到很多东西,加强了我的动手能力,并且培养了我的独立思考能力。特别是在做实验报告时,因为在做硬件时出现很多问题,如果不解决的话,将会很难的继续下去。还有画图时,也要用软件画图,还有动手这次实验,使测试技术这门课的一些理论知识与实践相结合,更加深刻了我对测试技术这门课的认识,巩固了我的理论知识。

不过这次实验虽好,但是我认为它安排的时间不是很好,还有就是考试时间紧张,因为这些时间安排与我们的课程设计时间有冲突,使我不能专心于任一项,结果不能保证每一个项目质量,

参考文献

[1] 余发山、王福忠,单片机原理及应用技术;徐州 中国矿业大学出版社,2003

[2]李秀忠.单片机应用技术:汇编语言[M].单片微型计算机. 北京,2006.7

[3]周航慈.单片机程序设计基础[M]. 单片微型计算机.北京, 2003.7.

[4]陈明荧.8051单片机课程设计实训教材[M].单片微型计算机.北京,2003.3.

[5] http://baike.baidu.com/view/1341776.htm

[6] DS18B20 数据手册

附录:

DATA_BUS       BIT   P3.3

         FLAG                 BIT   00H 

         TEMP_L             EQU         30H 

         TEMP_H            EQU 31H 

         TEMP_DP          EQU 32H 

         TEMP_INT         EQU 33H 

         TEMP_BAI        EQU 34H           

         TEMP_SHI         EQU 35H           

         TEMP_GE          EQU 36H 

         DIS_BAI            EQU 37H 

         DIS_SHI             EQU 38H 

         DIS_GE              EQU 39H           

         DIS_DP              EQU 3AH          

         DIS_ADD          EQU 3BH 

         ORG                  0000H                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

         AJMP                 START

         ORG         0050H

START:     

         MOV         SP,    #40H

MAIN:       LCALL      READ_TEMP             

         LCALL      PROCESS                            

         AJMP        MAIN

;读温度程序                              

READ_TEMP:

        LCALL      RESET_PULSE                  

         MOV        A,     #0CCH                                                     LCALL     WRITE                        

         MOV         A,     #44H         

         LCALL     WRITE

         LCALL      DISPLAY                   

         LCALL      RESET_PULSE          

         MOV         A,     #0CCH                        

         LCALL      WRITE

         MOV         A,     #0BEH                        

         LCALL     WRITE

         LCALL      READ

         RET

;复位脉冲程序

RESET_PULSE:

RESET:      SETB         DATA_BUS

         NOP

         NOP

         CLR  DATA_BUS

         MOV         R7,    #255

         DJNZ         R7,    $

         SETB        DATA_BUS

         MOV         R7,    #30

         DJNZ         R7,$

         JNB          DATA_BUS,      SETB_FLAG

         CLR  FLAG

         AJMP        NEXT

SETB_FLAG:

         SETB        FLAG

NEXT:       MOV        R7,    #120

         DJNZ         R7,    $

         SETB        DATA_BUS

         JNB  FLAG,       RESET

        RET

;写命令

WRITE:     SETB         DATA_BUS

         MOV         R6,    #8

         CLR  C

WRITING:

         CLR  DATA_BUS

         MOV         R7,    #5

         DJNZ         R7,    $

         RRC A

         MOV         DATA_BUS,      C

         MOV         R7,    #30H

         DJNZ         R7,    $

         SETB         DATA_BUS

         NOP

         DJNZ         R6,    WRITING

         RET

;循环显示段位

DISPLAY:

         MOV        R4,    #200

DIS_LOOP:

         MOV         A,     DIS_DP

         MOV         P2,    #0FFH

         MOV         P0,    A

        CLR  P2.7

         LCALL      DELAY2MS

         MOV         A,     DIS_GE

         MOV         P2,    #0FFH

         MOV         P0,    A

         SETB         P0.7

        CLR  P2.6 

         LCALL      DELAY2MS

         MOV         A,     DIS_SHI

         MOV         P2,    #0FFH

         MOV         P0,    A

         CLR  P2.5

       

         LCALL      DELAY2MS

         MOV         A,     DIS_BAI

         MOV         P2,    #0FFH

         MOV         P0,    A

         MOV         A,     TEMP_BAI

         CJNE         A,     #0,SKIP

         AJMP        NEXTT     

SKIP:         CLR  P2.4

         LCALL      DELAY2MS

NEXTT:     NOP

         DJNZ         R4,    DIS_LOOP

         RET

;读命令

READ:       SETB         DATA_BUS

         MOV         R0,    #TEMP_L

         MOV        R6,    #8

         MOV         R5,    #2

         CLR  C

READING:

         CLR  DATA_BUS

         NOP

         NOP

         SETB         DATA_BUS

         NOP

         NOP

         NOP

         NOP

         MOV         C,      DATA_BUS

         RRC A

         MOV         R7,    #30H

         DJNZ         R7,    $

         SETB         DATA_BUS

         DJNZ         R6,    READING

         MOV         @R0,         A

         INC R0

         MOV         R6,    #8

         SETB         DATA_BUS

         DJNZ         R5,    READING

         RET

;数据处理

PROCESS:

         MOV        R7,    TEMP_L

         MOV         A,     #0FH

         ANL A,     R7

         MOV         TEMP_DP,A

         MOV        R7,    TEMP_L

         MOV         A,     #0F0H

         ANL A,     R7

         SWAP        A

         MOV         TEMP_L,   A

         MOV         R7,    TEMP_H

         MOV         A,     #0FH

         ANL A,     R7

         SWAP        A

         ORL A,     TEMP_L

         MOV        B,      #64H

         DIV  AB

         MOV         TEMP_BAI,A

         MOV         A,     #0AH

         XCH A,     B

         DIV  AB

         MOV         TEMP_SHI,A

         MOV         TEMP_GE,B

         MOV         A,     TEMP_DP

         MOV        DPTR,       #TABLE_DP

         MOVC      A,     @A+DPTR

         MOV         DPTR,       #TABLE_INTER

         MOVC     A,     @A+DPTR

         MOV         DIS_DP,    A

         MOV         A,     TEMP_GE

         MOV        DPTR,       #TABLE_INTER

         MOVC      A,     @A+DPTR

         MOV        DIS_GE,    A

         MOV         A,     TEMP_SHI

         MOV        DPTR,       #TABLE_INTER

         MOVC      A,     @A+DPTR

         MOV         DIS_SHI,  A

         MOV         A,     TEMP_BAI

         MOV        DPTR,       #TABLE_INTER

         MOVC      A,     @A+DPTR

         MOV        DIS_BAI   ,A

         RET

DELAY2MS:

         MOV         R6,    #3

LOOP3:     MOV         R5,    #250

         DJNZ         R5,    $

         DJNZ         R6,    LOOP3

         RET

TABLE_DP:

         DB    00H,01H,01H,02H,03H,03H,04H,04H,05H,06H

         DB    06H,07H,08H,08H,09H,09H

TABLE_INTER:

         DB    03FH,006H,05BH,04FH,066H

         DB    06DH,07DH,07H,07FH,06FH

         END

相关推荐