多路温度巡检仪的设计.doc_第1页
多路温度巡检仪的设计.doc_第2页
多路温度巡检仪的设计.doc_第3页
多路温度巡检仪的设计.doc_第4页
多路温度巡检仪的设计.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目目 录录 摘要 1 英文摘要 1 引言 2 1 系统总体设计 3 1 1 系统设计框图 3 1 2 系统方案选择 3 1 2 1 单片机的选择 3 1 2 2 传感器的选择 4 1 3 系统部件功能简介 4 1 3 1 AT89S51 功能介绍 4 1 3 2 DS18B20 功能简介 7 2 系统硬件设计 11 2 1 单片机最小系统 11 2 2 温度采集电路 11 2 3 温度显示电路 11 2 4 报警电路 12 2 5 程序下载电路 12 3 软件设计 13 3 1 主程序设计 13 3 2 温度信号采集子程序 14 3 3 温度显示程序 15 4 系统调试 16 4 1 硬件仿真 16 4 2 软件调试 17 结论与谢词 18 参考文献 19 附件 1 程序清单 20 理工类 附件 2 硬件电路图 36 附件 3 硬件 PCB 图 36 附件 4 实物图 37 1 多路温度巡检仪的设计多路温度巡检仪的设计 信息工程学院应用电子技术信息工程学院应用电子技术 朱周朱周 摘要摘要 温度是工农业生产中一个很重要的控制指标 本系统以 AT89S51 为核心 利 用 DALLAS 公司先进的 DS18B20 传感器进行温度变换 将数据存入单片机数据寄存 器 由单片机采集 分析 整理实时数据之后 数据采集精度达到了 0 1 C 通过数 码管显示 本多路温度巡检仪还可以设置上下报警温度 当温度不在设置范围内时 可以报警 温度显示形式可以通过 ISP 对系统程序实现在线编程 经实践检验此系统 完全能够满足多种行业的需要 有非常广泛的实际应用价值 关键词关键词 温度检测 数据采集 报警 单片机 DS18B20 Design of Multi temperature instrument Major of Applied Electronic Technology Information and Engineering College zhuzhou Abstract The temperature is a very important controlled variable in the industry and agriculture The chip AT89S51 is heart in the system and the temperature is switched by the sensor of DS18B20 Then the switched data stored in the register of CPU The data precision reached 0 1 C After gather analysis and store the switched data will be display by digital pipe The display format of temperature can be changed by ISP on line The system already reach the demand of industry by practice so it is valuable and bread and butter Key Words Temperature Data gathering Alarm MCU DS18B20 2 引言引言 信息化时代 数据的重要性不言而喻 如何高效 稳定的对数据 包括温度 湿 度 压力 光线等项目 进行实时采集对于现代的企业 工厂 研究所等对数据精度 要求较高的单位具有非常重要的意义 本系统设计采用温度数据作为研究对象 具有代表性 首先是温度数据的应用是 最广泛的 其次是温度数据采集单元无论是价格 测量区间还是品种都具有较大的选 择余地 整个系统以 AT89S51 为核心 前向通道包括电源 四路 DS18B20 传感器输入和 按键复位电路 后向通道包括 报警电路和 LED 显示电路 电源给整个系统提供 4 5 5V 的直流电力 温度传感器 将分散于各数据点的温度数据转化为数字信号送 入单片机内寄存器待处理 一个复位按键 用来对整个系统进行跳出复位 防止程序 进入死循环 LED 数码管 做为当前通道代码及该通道温度值 精确到 0 1 摄氏度 的显示设备 串口可以实现系统编程 整个系统还有一个时钟电路 用来对整个系统 提供基准信号 还可以产生震荡电流 发出时钟信号 3 1 1 系统总体设计系统总体设计 1 11 1 系统设计系统设计框图框图 单片机 温度采集 温度采集 温度采集 温度采集报警 显示部分 图 1 1 多路温度巡检仪系统设计框图 本系统的采集对象是温度 因此系统设计应该包括 温度采集模块 数据存储模 块 温度转化模块 温度显示模块 报警系统等几个基本部分 1 1 2 2 系统方案选择系统方案选择 1 2 11 2 1 单片机的选择单片机的选择 方案一 AT89C51 是 ATMEL 公司的 C51 单片机 它是在 8051 的基础上增强了一些特性 如时钟 更优秀的是由 Flash 程序存储器的内容至少可以改写 1000 次 存储器取带 了原来的 ROM 一次性写入 相对于 8051 AT89C51 的性能已经算是非常优越的 了 AT89C51 片内有 4K 字节的 FLASH 程序存储器 128 字节的片内 RAM 2 个定 时器 计数器 6 个中断源 5 个可用中断 2 个中断级别 支持掉电模式和空闲模式 都是 MSC8051 指令集 但不能在线编程 这就限制了它的发展 方案二 选择性能更加优良的 AT89S51 除了具有上述 AT89C51 的功能外 还有 ISP 功能 特殊功能寄存器和不同的极限工作频率 AT89S51 不但多了 ISP 功能 还有一个很 好用的内部看门狗 硬件看门狗 WatchDog 是一个自我保护装置 他时刻监视系统 的运行 一旦系统运行不正常 看门狗会复位系统 实际上看门狗是一个计时器 你要让这个计时器置零前给它一个信号 让它重新计时 这样起到一个监视系统运 行的作用 一般很多 MCU 带有这个电路 但是你可以不使用它 这样在上电的时候 禁止他 如果你要使用 Watchdog 那么你的系统就必须每隔一段时间给这个电路一 4 个信号 如果不断地 喂 它 不断地复位它 表示程序自己没有死机 过一段 时间 它就会计数溢出 MCU 就复位 以避免程序卡死后没人管 AT89C51 最高可 以使用的晶振频率时 24MHz AT89S51 可以使用的晶振频率更高 达 33MHz 新增 加很多功能 性能有了较大提升 价格基本不变 甚至比 89C51 更低 通过以上比较 选用性能更高的 AT89S51 单片机 1 2 21 2 2 传感器的选择传感器的选择 方案一 由于本设计是测温系统 可以使用热电偶之类的器件利用其感温特性 把它随着 被测温度变化的电压或电流采集过来 进行 A D 转换后 就可以用单片机进行数据 的处理 在系统中有一个这样的传感器就需要一个 A D 转换电路 这将导致系统电 路整体设计起来比较复杂 除了 A D D A 转化模块 相应的还要增加信号放大等电 路 这对于单片机有限的空间而言 系统利用效率是比较低下的 此外 现代数据采 集的特点是数字化 它带来的不仅是电路设计的简化 还有利于后期数据的加工和利 用 因此 热电偶之类的感温器件具有很大的局限性 不推荐使用 方案二 进而考虑到用数字传感器 在单片机电路设计中 大多都是处理数字信号 因此 可以采用数字温度传感器 DS18B20 与传统传感器相比 单总线技术可以让单片机 节省大量的 I O 资源 而且外部与传感器的相连的电缆 端子 槽盒 桥架 连线设 计与接头校对的工作量也大大减少 即节省了投资 也减少了设计 安装的工作量 同时 由于传感器直接输出的是数字信号 使系统省掉了放大 A D 转换等相关电路 系统的稳定性 可靠性有了大幅提高 利用此传感器可以轻松的设计出一种高效的 简练的 且易维护的测温系统 通过以上比较 选用 DS18B20 传感器 1 1 3 3 系统部件功能简介系统部件功能简介 1 3 1 3 1 1 AT89S51AT89S51 功能介绍功能介绍 AT89S51 是美国 ATMEL 公司生产的低功耗 高性能的 CMOS8 位单片机 片内 含 4k 的可系统编程的 Flash 只读程序存储器 器件采用 ATMEL 公司的高密度 非 易失性存储技术生产 兼容标准 8051 指令系统及引脚 它集 Flash 程序存储器既可 在线编程 ISP 也可用传统方法进行编程及通用 8 位微处理器于单片芯片中 ATMEL 公司的功能强大 低价位 AT89S51 单片机可灵活应用于各种控制领域 5 主要特性 与 MCS 51 产品指令系统完全兼容 4K 字节可编程 Flash 存储器 寿命 1000 写 擦循环 全静态工作模式 0HZ 33MHZ 三级程序加密锁 128 8 字节内部 RAM 32 个可编程 I O 口线 2 个 16 位定时 计数器 6 个中断源 可编程编程串行通道 低功耗空闲和掉电模式 片内振荡器和时钟电路 管脚说明 图 1 2 AT89S51 引脚说明 VCC 供电电压 GND 接地 P0 口 P0 口为一个 8 位漏级开路双向 I O 口 每脚可吸收 8TTL 门电流 当 P1 口的管脚第一次写 1 时 被定义为高阻输入 P0 能够用于外部程序数据存储器 它 可以被定义为数据 地址的第八位 在 FIASH 编程时 P0 口作为原码输入口 当 FIASH 进行校验时 P0 输出原码 此时 P0 外部必须被拉高 6 P1 口 P1 口是一个内部提供上拉电阻的 8 位双向 I O 口 P1 口缓冲器能接收输 出 4TTL 门电流 P1 口管脚写入 1 后 被内部上拉为高 可用作输入 P1 口被外部 下拉为低电平时 将输出电流 这是由于内部上拉的缘故 在 FLASH 编程和校验时 P1 口作为第八位地址接收 P2 口 P2 口为一个内部上拉电阻的 8 位双向 I O 口 P2 口缓冲器可接收 输出 4 个 TTL 门电流 当 P2 口被写 1 时 其管脚被内部上拉电阻拉高 且作为输入 并 因此作为输入时 P2 口的管脚被外部拉低 将输出电流 这是由于内部上拉的缘故 P2 口当用于外部程序存储器或 16 位地址外部数据存储器进行存取时 P2 口输出地 址的高八位 在给出地址 1 时 它利用内部上拉优势 当对外部八位地址数据存储 器进行读写时 P2 口输出其特殊功能寄存器的内容 P2 口在 FLASH 编程和校验时 接收高八位地址信号和控制信号 P3 口 P3 口管脚是 8 个带内部上拉电阻的双向 I O 口 可接收输出 4 个 TTL 门 电流 当 P3 口写入 1 后 它们被内部上拉为高电平 并用作输入 作为输入 由于 外部下拉为低电平 P3 口将输出电流 ILL 这是由于上拉的缘故 P3 口也可作为 AT89S51 的一些特殊功能口 如下表所示 口管脚 备选功能 P3 0 RXD 串行输入口 P3 1 TXD 串行输出口 P3 2 INT0 外部中断 0 P3 3 INT1 外部中断 1 P3 4 T0 记时器 0 外部输入 P3 5 T1 记时器 1 外部输入 P3 6 WR 外部数据存储器写选通 P3 7 RD 外部数据存储器读选通 P3 口同时为闪烁编程和编程校验接收一些控制信号 RST 复位输入 当振荡器复位器件时 要保持 RST 脚两个机器周期的高电平 时间 EA VPP 当 EA 保持低电平时 则在此期间外部程序存储器 0000H FFFFH 不管是否有内部程序存储器 注意加密方式 1 时 EA 将内部锁定为 RESET 当 EA 端保持高电平时 此间内部程序存储器 在 FLASH 编程期间 此引脚也用于施加 7 12V 编程电源 VPP XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入 XTAL2 来自反向振荡器的输出 1 3 21 3 2 DS18B20 功能简介功能简介 DS18B20 数字式温度传感器是美国 Dallas 公司最新推出的产品 与传统的热敏 电阻温度传感器不同 它能够直接读出被测温度 并且可根据实际要求通过简单的编 程实现 9 12 位的数字值读数方式 可以分别在 93 75ms 和 750ms 内将温度值转化 9 位和 12 位的数字量 因而使用 DS18B20 可使系统结构更简单 可靠性更高 芯 片的耗电量很小 从总线上 偷 一点电存储在片内的电容中就可正常工作 一般不 用另加电源 最可贵的是这些芯片在检测点已把被测信号数字化了 因此在单总线上 传送的是数字信号 这使得系统的抗干扰性好 可靠性高 传输距离远 a DS18B20 传感器有如下特点 单线接口 只有一根信号线与 CPU 连接 不需要备份电源 可通过信号线供电 电源电压范围从 3 3 5V 传送串行数据 不需要外部元件 b DS18B20 的测温原理 DS18B20 测温原理如图 1 3 所示 图中低温度系数晶振的振荡频率受温度影响 小用于产生固定频率的脉冲信号送给计数器 1 高温度系数晶振随温度变化其振荡率 明显改变 所产生的信号作为计数器 2 的脉冲输入 计数器 1 和温度寄存器被预置 在 55 所对应的一个基数值 计数器 1 对低温度系数晶振产生的脉冲信号进行减法 计数 当计数器 1 的预置值减到 0 时 温度寄存器的值将加 1 计数器 1 的预置将 重新被装入 计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数 如此 循环直到计数器 2 计数到 0 时 停止温度寄存器值的累加 此时温度寄存器中的数 值即为所测温度 斜率累加器用于补偿和修正测温过程中的非线性 其输出用于修正 计数器 1 的预置值 DS18B20 在正常使用时的测温分辨率为 0 5 8 计数器 1 斜率累加器 0 计数器 2 0 比较 温度存储器 预置 预置 低温度系数晶振 高温度系数晶振 停止 加 1 LSB 位置 清楚 图 1 3 DS18B20 工作原理图 c DS18B20 的操作 1 初始化 总线上的所有操作前要初始化主机 先发复位信号 之后从机发出在线信号 后 者通知主机DS18B20在线 并等待接收命令 2 ROM读操作 主机收到DS18B20 在线信号后 就可以发送四个ROM 操作命令中的一个 这 些命令字均为8 位的16 进制数 最低位在前 现将这些命令说明如下 1 读命令 33H 通过该命令主机可以读出ROM 中8 位系列产品代码 48 位 产品序列号和8 位CRC 码 读命令仅用在单个DS18B20 在线情况 当多于一个时由 于DS18B20 为开漏输出将产生线与 从而引起数据冲突 2 选择定位命令 55H 多片DS18B20 在线时 主机发出该命令和一个64 位 数列 DS18B20 内部ROM与主机数列一致者 才响应主机发送的寄存器操作命令 其他DS18B20等待复位 该命令也可以用在单片DS18B20 情况 3 跳过ROM 序列号检测命令 CCH 对于单片DS18B20 在线系统 该命令允 许主机跳过ROM 序列号检测而直接对寄存器操作 从而节省时间 对于多片 DS18B20 在线系统 该命令将引起数据冲突 4 查询命令 F0H 当系统初建时 主机可能不知道总线上有多少设备 以及 他们各自的64 位序列号 用该命令可以做到这点 9 5 报警查询命令 ECH 该命令操作过程同ROM 查询命令 但是 仅当上次 温度测量值已置位报警标志 由于高于TH或低于TL 时 DS18B20 才响应该命令 如果DS18B20 处于上电状态 该标志将保持有效 直到遇到下列两种情况 1 本 次测量温度发生变化 测量值处于TH TL 之间 2 TH TL 改变 温度值处于 新的范围之间 设置报警时要考虑到EEROM 中的值 3 存贮器操作命令 1 写入 4EH 用此命令把数据写入寄存第2 4 字节 从第2字节 TH 开始 复位信号发出之前必须把这三个字节写完 2 读出 BEH 用此命令读出寄存器中的内容 从第1 字节开始 直到读完第9 字节 如果仅需要寄存器中部分内容 主机可以在合适时刻发送复位命令结束该过程 3 复制 48H 用该命令把暂存器第2 4 字节转存到DS18B20 的EEROM 中 如果DS18B20 是由信号线供电 主机发出此命令后 总线必须保证至少10ms 的上拉 当发出命令后 主机发出读时隙来读总线 如果转存正在进行 读结果为 0 转存结束为1 4 开始转换 44H DS18B20 收到该命令后立刻开始温度转换 不需要其他数 据 此时DS18B20 处于空闲状态 当温度转换正在进行时 主机读总线将收到0 转 换结束为1 如果DS18B20 是由信号线供电 主机发出此命令后主机必须立即提供至 少相应于分辨率的温度转换时间的上拉电平 5 回调 B8H 执行该命令把EEROM 中的内容回调到寄存器TH TL 和设置 寄存器单元中 DS18B20 上电时能自动回调 因此设备上电后TH TL 就存在有效 数据 该命令发出后 如果主机跟着读总线 读到0 意味着忙 1 为回调结束 6 读电源标志 B4H 主机发出命令后读总线 DS18B20 将发送电源标志 0 为信号线供电 1 为外接电源 单片DS18B20使用时 总线接5千欧 上拉电阻即可 如挂接多片DS18B20 应适当降低上拉电阻值 调试时 可把上拉电阻换作一电位器 逐步调节电位器直到获得正确的温度数据 读写DS18B20 时 应严格按照既定的时 序操作 否则 读写无效 4 DS18B20 的读写操作 1 复位 对DS18B20 操作时 首先要将它复位 复位时 DQ 线被拉为低电平 时间为480 960 s 接着将数据线拉为高电平 时间为15 60 s 最后DS18B20 10 发出60 240 s 的低电平作为应答信号 这时主机才能进行其他操作 2 写操作 将数据线从高电平拉至低电平 产生写起始信号 从DQ 线的下降沿 起计时 在15 s 到60 s 这段时间内对数据线进行检测 如数据线为高电平则写1 若为低电平 则写0 完成了一个写周期 在开始另一个写周期前 必须有1 s 以上 的高电平恢复期 每个写周期必须要有60 s 以上的持续期 3 读操作 主机将数据线从高电平拉至低电平1 s 以上 再使数据线升为高电平 从而产生读起始信号 从主机将数据线从高电平拉至低电平起15 s 至60 s 主机读 取数据 每个读周期最短的持续期为60 s 周期之间必须有1 s 以上的高电平恢复期 DS18B20虽然具有测温系统简单 测温精度高 连接方便 占用口线少等优点 但在实际应用中也应注意以下几方面的问题 1 DS18B20 从测温结束到将温度值转换成数字量需要一定的转换时间 这是 必须保证的 不然会出现转换错误的现象 使温度输出总是显示 85 2 在实际使用中发现 应使电源电压保持在 5V 左右 若电源电压过低 会 使所测得的温度与实际温度出现偏高现象 经过试验发现 一般在 5V 左右 3 较小的硬件开销需要相对复杂的软件进行补偿 由于 DS18B20 与微处理器 间采用串行数据传送 因此 在对 DS18B20 进行读写编程时 必须严格保证读写时 序 否则将无法读取测温结果 在使用 PL M C 等高级语言进行系统程序设计时 对 DS18B20 操作部分最好采用汇编语言实现 4 在 DS18B20 的有关资料中均未提及单总线上所挂 DS18B20 数量问题 容 易使人误认为可以挂任意多个 DS18B20 在实际应用中并非如此 当单总线上所挂 DS18B20 超过 8 个时 就需要解决微处理器的总线驱动问题 这一点在进行多点测 温系统设计时要加以注意 5 连接 DS18B20 的总线电缆是有长度限制的 试验中 当采用普通信号电缆 传输长度超过 50m 时 读取的测温数据将发生错误 当将总线电缆改为双绞线带屏 蔽电缆时 正常通讯距离可达 150m 这种情况主要由总线分布电容使信号波形产生 畸变造成的 因此 在用 DS18B20 进行长距离测温系统设计时要充分考虑总线分布 电容和阻抗匹配问题 6 在DS18B20测温程序设计中 向DS18B20发出温度转换命令后 程序总要 等待DS18B20的返回信号 一旦某个DS18B20接触不好或断线 当程序读该DS18B20 11 时 将没有返回信号 程序进入死循环 这一点在进行DS18B20硬件连接和软件设计 时也要给予一定的重视 2 2 系统硬件设计系统硬件设计 单片机温度采集和输出显示模块由 6 个部分构成 晶振电路 复位电路 报警电 路 程序下载电路 温度采集电路和温度显示电路 2 12 1 单片机最小系统单片机最小系统 由 12M 晶振 1 个 30pF 电容 2 个 按钮 1 个 104 电容 个 10 F 电解电容 1 个 10K 电阻 1 个组成 单片机最小系统如图 2 1 所示 V C C C 5 104 C 8 10u F R 9 10K S 1 R E S E T V C C Y 1 12M H Z C 630p F C 730p F P15 P16 P17 P10 1 P11 2 P12 3 P13 4 P14 5 P15 6 P16 7 P17 8 RE S E T 9 P30 10 P31 11 P32 12 P33 13 P34 14 P35 15 P36 16 P37 17 X T A L 1 18 X T A L 2 19 V SS 20 P20 21 P21 22 P22 23 P23 24 P24 25 P25 26 P26 27 P27 28 PSE N 29 A L E 30 E A 31 P07 32 P06 33 P05 34 P04 35 P03 36 P02 37 P01 38 P00 39 V C C 40 U 1 A T 89S 51 P10 P11 P12 P00 P01 P02 P03 P04 P05 P06 P07 P20 P21 P22 P23 P13 12 D 6 1N 4 148 图 2 1 单片机最小系统 2 22 2 温度采集电路温度采集电路 由温度传感器 DS18B20 与 AT89S51 芯片的 P10 连接 组成温度采集电路 电路 图如图 2 2 所示 图 2 2 温度采集电路 图 2 2 与各硬件电路共同组成单片机温度采集模块 并以此构成温度采集硬件系 统 12 2 32 3 温度显示电路温度显示电路 4 个七段共阴数码管分别与 AT89S51 芯片的 P20 P21 P22 P23 连接 组成单 片机串口输出显示电路 电路图如图 2 3 所示 图 2 3 温度显示电路 图 2 3 与各硬件电路共同组成单片机串口输出显示模块 并以此构成输出显示硬 件系统 2 42 4 报警电路报警电路 主要由扬声器 1 个 9012 三极管 1 个 4 7K 电阻 1 个组成 电路图如图 2 4 所示 图 2 4 报警系统 13 2 52 5 程序下载电路程序下载电路 由 AT89SISP 端口与 AT89S51 芯片连接组成 电路图如图 2 5 所示 图 2 5 程序下载电路 3 3 软件设计软件设计 系统程序主要包括主程序 读出温度子程序 复位应答子程序 写入子程序等 3 13 1 主程序设计主程序设计 主程序的主要功能是负责温度的实时显示 读出并处理 DS18B20 的测量的当前 温度值 温度测量每 1s 进行一次 这样可以在一秒之内测量一次被测温度 其程序 流程见图 3 1 所示 通过调用读温度子程序把存入内存储中的整数部分与小数部分分 开存放在不同的两个单元中 然后通过调用显示子程序显示出来 开始 调用读温度子程序 数字变换程序 显示子程序 14 图 3 1 主程序流程图 3 23 2 温度信号采集子程序温度信号采集子程序 读出温度子程序的主要功能是读出 RAM 中的 9 字节 在读出时需进行 CRC 校 验 校验有错时不进行温度数据的改写 其程序流程见图 3 2 所示 DS18B20复位 应答子程序 跳过ROM匹配命令 写入子程序 温度转换命令 写入子程序 显示子程序 延时 DS18B20复位 应答子程序 跳过ROM匹配命令 写入子程序 读温度命令子程序 终止 15 图 3 2 读出温度子程序 DS18B20 的各个命令对时序的要求特别严格 所以必须按照所要求的时序才能 达到预期的目的 同时 要注意读进来的是高位在后低位在前 共有 12 位数 小数 4 位 整数 7 位 还有一位符号位 程序代码如下 GET TEMPER SETB P1 0 LCALL INIT 1820 先复位 DS18B20 JB FLAG1 TSS2 RET 判断 DS1820 是否存在 若 DS18B20 不存在则返回 TSS2 MOV A 0CCH 跳过 ROM 匹配 LCALL WRITE 1820 MOV A 44H 发出温度转换命令 LCALL WRITE 1820 这里通过调用显示子程序实现延时一段时间 等待 AD 转换结束 12 位的话 750 微秒 LCALL DISPLAY LCALL INIT 1820 准备读温度前先复位 MOV A 0CCH 跳过 ROM 匹配 LCALL WRITE 1820 MOV A 0BEH 发出读温度命令 LCALL WRITE 1820 LCALL READ 18200 将读出的温度数据保存到 35H 36H RET 写 DS18B20 的子程序 有具体的时序要求 3 33 3 温度显示程序温度显示程序 四位数码管显示部分通过 P00 P07 与单片机串联 而数码管选择连通部分通过 P20 P23 与单片机相连 这两部分与单片机均是串联 所以 只有一位数码管在一 个时刻被选中显示 又因为显示时间非常短暂 显示 1MS 肉眼无法读取 因此 在选通一路的情况下 增加了循环显示的功能 250 4 在数码管显示部分 通过对显示部分编码进行数字显示 如图 3 3 所示 16 图 3 3 数码管图 dp g f e d c b a 依次代表数码管不同部分 若显示 1 则是 b c 亮 相应编码为 0000 0110 十六进制表示则为 06H 由此类推 将 0 9 分别编码如 下所示 0 00111111 3F 1 00000110 06H 2 01011011 5BH 3 01001111 4FH 4 01100110 66H 5 01101101 6DH 6 01111101 7DH 7 00000111 07H 8 01111111 7FH 9 01101111 6FH 4 4 系统调试系统调试 4 4 1 1 硬件仿真硬件仿真 硬件仿真环境 Proteus 6 professional 本系统的硬件仿真主要分三部分 温度显示 温度超限报警 复位 当给单片机 17 一个温度信号时 数码管就会显示出温度值 当温度超过设定的温度时 报警系统启 动 并发出报警 当要跳出整个系统 防止程序进入死循环时 就可以运用复位按钮 进行复位 因为各种原因本仿真没有成功 4 4 2 2 软件调试软件调试 软件调试环境 Keil uVision2 本系统的软件调试主要是两部分 DS18B20 的温度采集部分的调试和四位 LED 数码管的显示调试 温度采集部分是一个重点 主要是对 DS18B20 是这个全新的温 度传感器进行编程 此部分调试先把 DS18B20 送来的数据送入单片机一个固定的储 存单元中 用 LED 显示 四路数据循环显示 编制的程序投入实际运行前 用手工或编译程序等方法进行测试 修正语法错误 和逻辑错误的过程 然后是程序流程的检查 避免出现死循环 其中 包括跳转指令 选择 结束 中断指令的使用是否正确 经过上面两个阶段的理论分析 将系统硬件 连接时 避免出现连接错误 最后是对系统进行功能检验 系统采集的数据是否正确 符合预期分析 进行检查 以及一些功能键的使用是否正常 18 结论结论与谢与谢辞辞 参考文献参考文献 1 求是科技 单片机典型模块设计实例导航 M 人民邮电出版社 2004 1 23 34 2 刘楚浩 单片机与嵌入式系统应用 J 2002 9 67 74 3 蔡美琴 张为民 何金儿 毛敏 陶正苏 毛义梅 MCS 51 系列单片机系统及其 应用 M 高等教育出版社 2004 6 32 41 4 胡辉 王晓 戴永成 单片机原理及应用设计 M 中国水利水电出版社 2005 7 15 24 5 李建忠 单片机原理及应用 M 西安电子科技大学出版社 2002 4 17 25 6 沙占友 A Study of the Control System with Intelligent Temperature Sensors ICEMI 第四届国际电子测量学术会议论文集 电子测量与一起学报 第 13 卷 1998 8 19 32 7 沙占友 智能化温度传感器的原理和应用 集成电路通信 2001 3 56 73 8 陈跃东 DS18B20 集成温度传感器原理与应用 J 安徽机电学院学报 2002 2 89 103 9 金伟正 单线数字温度传感器的原理与应用 J 电子技术与应用 2000 1 94 105 19 附件附件 1 程序清单程序清单 四路温度采集 TEMPER LEQU 29H TEMPER HEQU 28H FLAG1EQU 38H 是否检测到 DS18B20 标志位 FLAG2EQU 39H FLAG3EQU 3AH FLAG4EQU 3BH A BITEQU 20H 数码管个位数存放内存位置 B BITEQU 21H 数码管十位数存放内存位置 XSEQU 30H 小数单元 TDEQU 50H ORG0000H LJMPSTART ORG0030H START MOVA 00H MOVP2 A MOVR5 01H MAIN MOVTD 1 通道 LCALLGET TEMPER 调用读温度子程序 LCALLSJCL LCALLGET TEMPER 调用读温度子程序 LCALLSJCL 20 LCALLGET TEMPER 调用读温度子程序 LCALLSJCL LCALLGET TEMPER 调用读温度子程序 LCALLSJCL INCTD MOV TEMPER L 00H MOV TEMPER H 00H LCALLGET TEMPER1 调用读温度子程序 LCALLSJCL LCALLGET TEMPER1 调用读温度子程序 LCALLSJCL LCALLGET TEMPER1 调用读温度子程序 LCALLSJCL LCALLGET TEMPER1 调用读温度子程序 LCALLSJCL INCTD LCALLGET TEMPER2 调用读温度子程序 LCALLSJCL LCALLGET TEMPER2 调用读温度子程序 LCALLSJCL LCALLGET TEMPER2 调用读温度子程序 LCALLSJCL LCALLGET TEMPER2 调用读温度子程序 LCALLSJCL INCTD LCALLGET TEMPER3 调用读温度子程序 LCALLSJCL LCALLGET TEMPER3 调用读温度子程序 LCALLSJCL LCALLGET TEMPER3 调用读温度子程序 LCALLSJCL 21 AJMPMAIN 这是 DS18B20 复位初始化子程序 SJCL MOVA 29H 数据处理 MOVB A CLRC RLCA CLRC RLCA CLRC RLCA CLRC RLCA SWAPA MOV31H A MOVA B MOVC 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 微秒的复位低脉冲 22 MOVR1 3 TSR1 MOV R0 107 DJNZ R0 DJNZ R1 TSR1 SETB P1 0 然后拉高数据线 NOP NOP NOP MOV R0 25H TSR2 JNB P1 0 TSR3 等待 DS18B20 回应 DJNZ R0 TSR2 LJMP TSR4 延时 TSR3 SETB FLAG1 置标志位 表示 DS1820 存在 LJMP TSR5 TSR4 CLR FLAG1 清标志位 表示 DS1820 不存在 LJMP TSR7 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 不存在则返回 TSS2 23 MOV A 0CCH 跳过 ROM 匹配 LCALL WRITE 1820 MOV A 44H 发出温度转换命令 LCALL WRITE 1820 这里通过调用显示子程序实现延时一段时间 等待 AD 转换结束 12 位的话 750 微秒 LCALL DISPLAY LCALL INIT 1820 准备读温度前先复位 MOV A 0CCH 跳过 ROM 匹配 LCALL WRITE 1820 MOV A 0BEH 发出读温度命令 LCALL WRITE 1820 LCALL READ 18200 将读出的温度数据保存到 35H 36H RET 写 DS18B20 的子程序 有具体的时序要求 WRITE 1820 MOV R2 8 一共 8 位数据 CLR C WR1 CLR P1 0 MOV R3 6 DJNZ R3 RRC A 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 中读出 24 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 RE10 DJNZ R3 RE10 MOV C P1 0 MOV R3 23 RE20 DJNZ R3 RE20 RRC A DJNZ R2 RE01 MOV R1 A DEC R1 DJNZ R4 RE00 RET INIT 18201 SETB P1 1 NOP CLR P1 1 主机发出延时 537 微秒的复位低脉冲 MOV R1 3 TSR11 25 MOV R0 107 DJNZ R0 DJNZR1 TSR11 SETB P1 1 然后拉高数据线 NOP NOP NOP MOV R0 25H TSR21 JNB P1 1 TSR31 等待 DS18B20 回应 DJNZ R0 TSR21 LJMP TSR41 延时 TSR31 SETB FLAG2 置标志位 表示 DS1820 存在 LJMPTSR51 TSR41 CLR FLAG2 清标志位 表示 DS1820 不存在 LJMP TSR71 TSR51 MOV R0 117 TSR61 DJNZ R0 TSR61 时序要求延时一段时间 TSR71 SETB P1 1 RET 读出转换后的温度值 GET TEMPER1 SETBP1 1 LCALLINIT 18201 先复位 DS18B20 JBFLAG2 TSS21 RET 判断 DS1820 是否存在 若 DS18B20 不存在则返回 TSS21 26 MOVA 0CCH 跳过 ROM 匹配 LCALLWRITE 18201 MOVA 44H 发出温度转换命令 LCALLWRITE 18201 这里通过调用显示子程序实现延时一段时间 等待 AD 转换结束 12 位的话 750 微秒 LCALLDISPLAY LCALLINIT 18201 准备读温度前先复位 MOVA 0CCH 跳过 ROM 匹配 LCALLWRITE 18201 MOVA 0BEH 发出读温度命令 LCALLWRITE 18201 LCALLREAD 182001 将读出的温度数据保存到 35H 36H RET 写 DS18B20 的子程序 有具体的时序要求 WRITE 18201 MOVR2 8 一共 8 位数据 CLRC WR11 CLRP1 1 MOVR3 6 DJNZR3 RRCA MOVP1 1 C MOVR3 23 DJNZR3 SETBP1 1 NOP DJNZR2 WR11 RET 读 DS18B20 的程序 从 DS18B20 中读出两个字节的温度数据 READ 182001 MOVR4 2 将温度高位和低位从 DS18B20 中读出 27 MOVR1 29H 低位存入 29H TEMPER L 高位存入 28H TEMPER H RE001 MOVR2 8 数据一共有 8 位 RE011 CLRC SETBP1 1 NOP NOP CLRP1 1 NOP NOP NOP SETBP1 1 MOVR3 9 RE101 DJNZR3 RE101 MOVC P1 1 MOVR3 23 RE201 DJNZR3 RE201 RRCA DJNZR2 RE011 MOV R1 A DEC R1 DJNZ R4 RE001 RET INIT 18202 SETBP1 2 NOP CLRP1 2 主机发出延时 537 微秒的复位低脉冲 MOV R1 3 TSR12 28 MOV R0 107 DJNZ R0 DJNZ R1 TSR12 SETB P1 2 然后拉高数据线 NOP NOP NOP MOV R0 25H TSR22 JNB P1 2 TSR32 等待 DS18B20 回应 DJNZ R0 TSR22 LJMP TSR42 延时 TSR32 SETBFLAG3 置标志位 表示 DS1820 存在 LJMPTSR52 TSR42 CLR FLAG3 清标志位 表示 DS1820 不存在 LJMP TSR72 TSR52 MOV R0 117 TSR62 DJNZ R0 TSR62 时序要求延时一段时间 TSR72 SETB P1 2 RET 读出转换后的温度值 GET TEMPER2 SETB P1 2 LCALLINIT 18202 先复位 DS18B20 JBFLAG3 TSS22 RET 判断 DS1820 是否存在 若 DS18B20 不存在则返回 TSS22 MOV A 0CCH 跳过 ROM 匹配 LCALL WRITE 18202 29 MOV A 44H 发出温度转换命令 LCALL WRITE 18202 这里通过调用显示子程序实现延时一段时间 等待 AD 转换结束 12 位的话 750 微秒 LCALL DISPLAY LCALLINIT 18202 准备读温度前先复位 MOV A 0CCH 跳过 ROM 匹配 LCALL WRITE 18202 MOV A 0BEH 发出读温度命令 LCALLWRITE 18202 LCALLREAD 182002 将读出的温度数据保存到 35H 36H RET 写 DS18B20 的子程序 有具体的时序要求 WRITE 18202 MOVR2 8 一共 8 位数据 CLRC WR12 CLRP1 2 MOVR3 6 DJNZR3 RRCA MOVP1 2 C MOVR3 23 DJNZR3 SETBP1 2 NOP DJNZR2 WR12 RET 读 DS18B20 的程序 从 DS18B20 中读出两个字节的温度数据 READ 182002 MOV R4 2 将温度高位和低位从 DS18B20 中读出 MOVR1 29H 低位存入 29H TEMPER L 高位存入 28H TEMPER H RE002 MOVR2 8 数据一共有 8 位 RE012 CLRC 30 SETBP1 2 NOP NOP CLRP1 2 NOP NOP NOP SETBP1 2 MOVR3 9 RE102 DJNZR3 RE102 MOVC P1 2 MOVR3 23 RE202 DJNZR3 RE202 RRCA DJNZR2 RE012 MOV R1 A DECR1 DJNZR4 RE002 RET INIT 18203 SETBP1 3 NOP CLRP1 3 主机发出延时 537 微秒的复位低脉冲 MOVR1 3 TSR13 MOV R0 107 DJNZR0 DJNZR1 TSR13 SETBP1 3 然后拉高数据线 NOP NOP NOP MOVR0 25H 31 TSR23 JNBP1 3 TSR33 等待 DS18B20 回应 DJNZR0 TSR23 LJMPTSR43 延时 TSR33 SETBFLAG4 置标志位 表示 DS1820 存在 LJMPTSR53 TSR43 CLRFLAG4 清标志位 表示 DS1820 不存在 LJMPTSR73 TSR53

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论