《基于8086的温度系统.doc》由会员分享,可在线阅读,更多相关《基于8086的温度系统.doc(32页珍藏版)》请在三一办公上搜索。
1、 - . -可修遍-目录1 引言 1 12 设计方案与论证 1 13 设计容 2 23.1 系统扩展接口的选择 23.2 温度传感器与 AD 转换器的选择 23.3 显示接口芯片 33.4 设计原理及功能说明 33.5 系统软件设计 43.6 单元电路的设计计算与说明54.8086 微处理器及其体系构造 8 84.1 8086 微处理器的一般性能特点 84.2. 8086CPU 的编程构造 94.3 8255A 并行 IO 接口 94.4 ADC0809 概述 114.5 ADC0809 与 8255 的连接 134.6 键盘/显示方式设置命令字 134.7 LED 显示器 145 硬件的制作
2、与调试 14146 完毕语:1717参考文献 1919附录 1:元器件清单:2020附录 2:电路总图 2020附录 3:程序 20201 引言为了实现计算机对生产过程及对象的控制,需要将对象的各种测量参数按照要求转换成数字信号送入计算机。计算机运-. z.算处理后再转换成适合于对生产过程进展控制的量。所以在微机和生产过程之间,须设置信息的变换和传递通道。主要功能就是随时间变化的模拟输入信号变成数字信号送入计算机,主要由 AD590 温度传感器,8088CPU,8255A, A/D 转换器和数码管显示器等组成。本实验通过设计一个微机控制的温度控制系统旨在能做到以下几点:1了解微机控制的温度采集
3、系统软硬件设计原理和方法。2进一步掌握并行接口芯片和模数转换的工作原理与使用方法。以 8088 CPU 为核心设计一个温度采集系统,系统可以实现一路温度的采集,在 3 位 LED 显示器上显示当前温度。本设计所用器件主要有传感器,A/D 转换器,8088CPU,可编程并行接口 8255,显示器等。首先传感器把所测的温度转换为电压,输入 A/D 转换器中进展转换,然后再把得到的二进制数经过 CPU 在数码管上显示出来。本设计共分以下几个模块:8088 主控模块、A/D 转换模块、并行接口模块、显示模块。-. z.2 设计方案与论证采用铂电阻温度传感器的电阻与温度的关系是非线性的,用电桥实现温度升
4、高引起的电阻变化对应于电压的变化。经A/D 转换器后,送入锁存器锁存,在经译码器输出后,再在数码管上显示,由于 74LS373 具有锁存功能就能实现四位的温度显示。由于铂电阻与温度的关系是非线性的,因此输出的结果测试精度较低,并且不能到达我们对温度控制的要求。电桥测温电路放大电路A/D 转换电路锁存器 74LS373译码器 7448LED 数码显示图 2-1 设计方案3 设计容3.1 系统扩展接口的选择本次设计采用的是 8086 微处理器,选择 8255A 可编程并行接口作为系统的扩展接口,8255A 的通用性强,适应灵活,通过它 CPU 可直接与外设相连接。-. z.3.2 温度传感器与 A
5、D 转换器的选择本系统选用温度传感器 AD590 构成测温系统。AD590 是一种电压输入、电流输出型集成温度传感器,测温围为-55150,非线性误差在0。30,其输出电流与温度成正比,温度每升高 1KK 为开尔文温度 ,输出电流就增加 1uA。其输出电流 I=(273+T)uA。本设计中串联电阻的阻值选用 2K,所以输出电压 V+=(2730 + 10T)MV.另外,为满足系统输入模拟量进展处理的功能,对其再扩展一片 ADC0809,以进展模拟数字量转化。3.3 显示接口芯片为满足本次设计温度显示的需要,我们选择了 8279 芯片,INTEL8279 芯片是一种通用的可编程的键盘、显示接口器
6、件,单个芯片就能完成键盘键入和数码管显示控制两种功能。3.4 设计原理及功能说明本系统采用的是 8086 微处理器,选择 8255A 可编程并行接口作为系统的扩展接口,8255A 的通用性强,适应灵活,通过它CPU 可直接与外设相连接。对温度进展检测,然后通过 A/D 转换器ADC0809转换成数字信号输入主机。使用 Intel8279 可编程序的键盘、显示接口功能,完成键盘输入和显示控制两种功能。针对各模块的硬件功能,对各模块设定子程序,通过主-. z.程序对这些子程序模块的调用,完成软件设计。1温度测量显示局部温度通过 AD590 温度传感集成芯片,将温度变化量转换成电压值变化量,经过 O
7、P07 一级跟随后输入到电压放大电路,放大后的信号输入到 A/D 转换器将模拟信号转换成数字信号,然后将该数字信号通过然间编程转化为十进制 BCD 码,并送到8279 进展温度值的显示。图 3-1 主程序流程图3.5 系统软件设计本设计的目的是以 8086 微处理器为控制器,将温度传感器输出的小信号经过放大和低通滤波后,送至 A/D 转换器;微控制器实时采集、显示温度值要求以摄氏度显示 ,同时系统还应可设定、控制温度值,使系统工作在设定温度。通过开场界面,显示提示信息,调用温度子程序,设置温度。通过模数转换器采集 AD 值并求其平均值。调用 BCD 码转换子程序将其转换为十进制温度值;调用显示
8、子程序,如果温度高于实际温度,就加热,反之拨动开关关闭,停顿加热。在此过程中,还可以重复设置温度值。1 BCD 码转换子程序-. z.设定温度为 0 摄氏度时变换放大电路送出的模拟量为0.0V,此时 A/D 输出的数字量为 00H;温度为 68时变换器送出对应电压 4.98V,此时 A/D 输出的数字量为 FFH,即每 0.3对应 1LSB 的变化量,对应电压值为 19.5mV。报警温度设定为68,此时,输出电压约为 5.0V 左右。2温度值设置子程序为了防止加热温度过高,在程序设计中加了一条,即设定值不能大于 68,否那么就认为有错系统报警。3.6 单元电路的设计计算与说明(1)温度检测系统
9、温度信息由温度传感器测量并转换成微安级的电流信号,经过运算放大电路将温度传感器输出的小信号进展跟随放大,输入到 A/D 转换器ADC0809转换成数字信号输入主机。数据经过标度转换后,一方面通过数码管将温度显示出来;另一方面,将该温度值与设定的温度值进展比拟,调整电加热炉的开通情况,从而控制温度。在断开电加热器,温度仍然异常,报警器发出声音报警,提示采取相应的调整措施。(2)温度测量局部-. z.AD590 是 AD 公司生产的一种精度和线度较好的双端集成传感器,其输出电流与绝对温度有关,对于电源电压从 5-10V 变化只引起 1uA 最大电流的变化或 1 摄氏度等效误差。图 4-1 给出了用
10、于获得正比于绝对温度的输出电流的根本温度敏感电路。AD590 输出的电流 I=273+TuA(T 为摄氏温度)。因此测量的电压 V 为273+TuA10K=2.73+T/100V,为了将电压测量出来,又务必使电流 I 不分流出来。使用电压跟随器使其输出电压 V2 等于 V 。由于一般电源供给多器件之后,电源是带杂波的,因此使用稳压二极管作为稳压元件,再利用可变电阻分压,其输出电压 V1 需调至 2.73V。差动放大器其输出 V0 为100K/10K(V2-V1)=T/10,如果现在为摄氏 28,输出电压为 2.8V。输出电压接 AD 转换器,那么 AD 转换输出的数字量就和摄氏温度成线性比例的
11、关系。图 3-2 输出电流的根本温度敏感电路图 3-3 ADC0809 与 8255 的连接模拟输入通道地址 A,B,C 直接接地,因此 ADC0809 只对通道 IN0 输入的电压进展模数转换。为了减少输入噪声其他通道-. z.直接接地。ADC0809 的数据线 D0-D7 与 8255 的 PB0-PB7 相连接。其片选 CS 与 8086 的地址/数据总线 AD14 相连接。图 3-4 8086 的可编程外设接口电路8255 的数据口 D0-D7 与 CPU 的 6 根控制线相连接,控制8255A 部的各种操作。控制线 RESET 用来使 8255A 复位。CS 和地址线 A1 及 A0
12、 用于芯片选择和通道寻址。分别与 8086 的高位地址线 A19,A1,A0 相连接。数据显示局部中我们采用功能强大的可编程设置型显示器8279 来对控制温度和实际温度进展显示。我们用 8 段数码管显示。8279 显示功能介绍:8279 部有 16X8 的显示 RAM,通过显示存放器和两个四位端口 0UT A0-3,0UT BO-3 来刷新显示, 显示器可以是 8 段数码管,图 3-5 电路工作原理:AD 转换器将转换结果由十六进制转换为十进制后分别存储在 54H,55H,56H,57H,58H,59H.中。8279 连接一个 74ls38 译码器,经过译码再接 6 个 8 段数码管分别显示每
13、个存储单元的容-. z.4.8086 微处理器及其体系构造4.1 8086 微处理器的一般性能特点1 16 位的部构造,16 位双向数据信号线;220 位地址信号线,可寻址 1M 字节存储单元;3较强的指令系统;4利用第 16 位的地址总线来进展 I/O 端口寻址,可寻址64K 个 I/O 端口;5中断功能强,可处理部软件中断和外部中断,中断源可达 256 个;6单一的5V 电源,单相时钟 5MHz。-. z.4.2. 8086CPU 的编程构造图 4-1 8086/8088CPU 部功能构造图编程构造:是指从程序员和使用者的角度看到的构造,亦可称为功能构造。从功能上来看,8086CPU 可分
14、为两局部,即总线接口部件 BIUBus Interface Unit和执行部件EUExecution Unit 。4.3 8255A 并行 IO 接口8255A 芯片包含有 3 个 8 位的端口,它们是 A 口,B 口和 C口。这 3 个端口均可作为 CPU 与外设通讯时的缓冲器或锁存器,当需要状态或联络信号时,C 口可以提供,此时,将 C 口-. z.的高 4 位为 A 口所用,C 口的低 4 位为 B 口所用。3 个端口通过各自的输入/输出线与外设联系。并行输入/输出端口:一个并行输入/输出的 LSI 芯片,多功能的 I/O 器件,可作为 CPU 总线与外围的接口。具有 24 个可编程设置
15、的 I/O 口,即使 3 组 8 位的 I/O 口为 PA 口,PB 口和 PC口。它们又可分为两组 12 位的 I/O 口,A 组包括 A 口及 C 口(高 4 位,PC4PC7),B 组包括 B 口及 C 口(低 4 位,PC0PC3)。A 组可设置为根本的 I/O 口,闪控(STROBE)的 I/O 闪控式,双向 I/O3 种模式;B 组只能设置为根本 I/O 或闪控式 I/O 两种模式,而这些操作模式完全由控制存放器的控制字决定。8255 引脚功能:RESET:复位输入线,当该输入端处于高电平时,所有部存放器包括控制存放器均被去除,所有 I/O 口均被置成输入方式。CS:芯片选择信号线
16、,当这个输入引脚为低电平时,即CS=0时,表示芯片被选中,允许 8255 与 CPU 进展通讯;CS=1 时,8255 无法与 CPU 做数据传输。RD:读信号线,当这个输入引脚为低电平时,即RD=0 且-. z.CS=0 时,允许 8255 通过数据总线向 CPU 发送数据或状态信息,即 CPU 从 8255 读取信息或数据。 WR:写入信号,当这个输入引脚为低电平时,即WR=0 且CS=0 时,允许 CPU 将数据或控制字写入 8255。D0D7:三态双向数据总线,8255 与 CPU 数据传送的通道,当 CPU 执行输入输出指令时,通过它实现 8 位数据的读/写操作,控制字和状态信息也通
17、过数据总线传送。PA0PA7:端口 A 输入输出线,一个 8 位的数据输出锁存器/缓冲器,一个 8 位的数据输入锁存器。PB0PB7:端口 B 输入输出线,一个 8 位的 I/O 锁存器,一个 8 位的输入输出缓冲器。PC0PC7:端口 C 输入输出线,一个 8 位的数据输出锁存器/缓冲器,一个 8 位的数据输入缓冲器。端口 C 可以通过工作方式设定而分成 2 个 4 位的端口,每个 4 位的端口包含一个 4 位的锁存器,分别与端口 A 和端口 B 配合使用,可作为控制信号输出或状态信号输入端口。A0、A1:地址选择线,用来选择 8255 的 PA 口,PB 口,PC口和控制存放器。当 A0=
18、0,A1=0 时,PA 口被选择;当-. z.A0=0,A1=1 时,PB 口被选择;当 A0=1,A1=0 时,PC 口被选择;当 A0=1。A1=1 时,控制存放器被选择。4.4 ADC0809 概述ADC0809 是采样分辨率为 8 位的、以逐次逼近原理进展模数转换的器件。其部有一个 8 通道多路开关,它可以根据地址码锁存译码后的信号,只选通8 路模拟输入信号中的一个进展 A/D 转换。(1) ADC0809 的主要特性 18 路输入通道, 8 位 AD 转换器,即分辨率为 8 位。2具有转换起停控制端。 3转换时间为 100s 4单个5V 电源供电 5模拟输入电压围 05V,不需零点和
19、满刻度校准。 6工作温度围为 -4085 摄氏度 7低功耗,约15mW。(2) ADC0809 的部逻辑构造由下列图可知,ADC0809 由一个 8 路模拟开关、一个地址锁存与译码器、一个 A/D 转换器和一个三态输出锁存器组成。多路开关可选通 8 个模拟通道,允许 8 路模拟量分时输入,共用-. z.A/D 转换器进展转换。三态输出锁器用于锁存 A/D 转换完的数字量,当 OE 端为高电平时,才可以从三态输出锁存器取走转换完的数据。图 4-2 ADC0809 的部逻辑构造(3)外部特性引脚功能ADC0809 芯片有 28 条引脚,采用双列直插式封装,下面说明各引脚功能。IN0IN7:8 路模
20、拟量输入端。2-12-8: 8 位数字量输出端。ADDA、ADDB、ADDC:3 位地址输入线,用于选通 8 路模拟输入中的一路ALE:地址锁存允许信号,输入,高电平有效。START: AD 转换启动脉冲输入端,输入一个正脉冲至少 100ns 宽使其启动脉冲上升沿使 0809 复位,下降沿启动A/D 转换 。EOC: AD 转换完毕信号,输出,当 AD 转换完毕时,此端输出一个高电平转换期间一直为低电平 。OE:数据输出允许信号,输入,高电平有效。当 AD 转-. z.换完毕时,此端输入一个高电平,才能翻开输出三态门,输出数字量。CLK:时钟脉冲输入端。要求时钟频率不高于 640KHZ。REF
21、+ 、REF-:基准电压。Vcc:电源,单一5V。 GND:地。4.5 ADC0809 与 8255 的连接模拟输入通道地址 A,B,C 直接接地,因此 ADC0809 只对通道 IN0 输入的电压进展模数转换。为了减少输入噪声其他通道直接接地。ADC0809 的数据线 D0-D7 与 8255 的 PB0-PB7 相连接。其片选 CS 与 8086 的地址/数据总线 AD14 相连接。4.6 键盘/显示方式设置命令字命令格式:D7 D6 D5 D4 D3 D2 D1 D0000DDKKK其中:D7、D6、D5=000 方式设置命令特征位。D DD4、D3:来设定显示方式,其定义如下:00:8
22、 个字符显示,左入口00:16 个字符显示,左入口00:8 个字符显示,右入口-. z.00:16 个字符显示,右入口所谓左入口,即显示位置从最左一位最高位开场,以后逐次输入的显示字符逐个向右顺序排列;所谓右入口,即显示位置从最右一位最低位开场,以后逐次输入的显示字符时,已有的显示字符逐个向左顺序移动。 KKKD2、 D1、 D0:用来设定七种键盘、显示工作方式4.7 LED 显示器工作原理:发光二极管组成的显示器事单片机应用产品中最常用的廉价输出设备。它由假设干个发光二极管按一定的规律排列而成。当某一个发光二极管导通时,相应的一个点或一个比划被点亮,控制不同组合的二极管导通,就能显示出多种字
23、符。常见 LED 数码管的两种接法如图 3.8 所示。图 4-3 7 段 LED 数码管的两种接法-. z.通过控制管脚 a、b、c、d、e、f、g、dp 的电平即可获得所需的符号显示。显示器的工作方式有两种,一种是静态显示:当显示器显示某一个字符时,相应的发光二极管恒定地导通或截止。另一种事本次设计中采用的动态显示方式:所谓动态显示即一位一位轮流的点亮各位显示器,对于每一位显示器来说,每隔一段时间点亮一次。但由于时间间隔很小,我们就可以看到完整的显示了。5 硬件的制作与调试通过前一局部的介绍说明,我们对系统的工作情况有了大体的了解。为了进一步了解系统的工作过程,介绍一下系统调试过程及调试过程
24、中出现的一些具体的问题,软件仿真图在仿真软件上运行,只是电路的一局部,通过硬件可以制作出来 。按照要求,在仿真软件中画出一局部电路图:如下列图通过电路的设计与在仿真软件中即可运行,在其中运行的时候要注意操作,通过 TPC2003,EMU 中运行后得到.exe 文件,按照要求运行图 5-1 数据显示局部实验调试软件运行于 DOC 环境下,其步骤如下:一、根据硬件图和原理图连接好线路。-. z.二、在 PC 机上敲入程序,对其进展的查错,编译,连接,最后生成可执行文件。三、接上电源,敲入可执行文件的文件名,系统就开场了工作过程。图 5-2 硬件原理图1这是 DOC 屏幕上会出现的一些提示信息,如E
25、NTER ANY KEY TO BEGIN! LET PA0=0 TO ADJUST THE TEMPERATURE VALUE! LET PA0=1 TO INPUT A NEW TEMPERATURE VALUE!这里后两条只作注释用。2然后敲任意一个键,系统就开场进展温度测量和显示,屏幕上就会显示INPUT THE TEMPERATURE:在这一条信息之后敲入一温度值。注意这里敲入的温度值不能大于 76 摄氏度,否那么屏幕将会显示INPUT VALUE ERROR !并返回 DOC。以后重新设定温度时也是如此3在正常情况下,敲入设定温度后系统就开场进展控制调节,当实际温度小鱼设定值时,系
26、统就开场进展加热,如果不加改变,它就会加热一直稳定到设定的温度值;如果这是想重新设置一温度,只要把 8255 的 PA0 读取拨动开关拨到 1,屏幕上就会显示:INPUT A NEW TEMPERATURE:这里又得注意一下,在敲入一个新的设定温度之前,得先把 PA0-. z.读取拨动开关拨到 0,否那么,在敲完设定温度之后,屏幕上又会显示同样一条信息。因为它是根据 PA0 是 0 还是 1 来决定是去重新输入设定温度还是去调节温度。如果不先把 PA0 拨为 0,它就是一直让你输入却不进展调节。6 完毕语:本设计采用的 8086 微处理器实现温度的控制。具有体积小、重量轻、抗干扰能力强、对环境
27、要求不高、价格低廉、可靠性高、灵活性好、易于推广应用等显著优点,通过软件逻辑控制实现对温度的控制和调节。温度控制系统,只是 8086 广泛应用于各行各业中的一例。本设计中应用了许多与微机接口技术的芯片和常用的外部设备,芯片如:ADC0809,8255 等。外部设备如:温度检测元件 AD590,键盘和显示系统中的 LED 显示器等。该系统的主要优点如下:一、本系统本着简单可靠的原那么完成了设计要求,尽量做到线路简单,充分利用软件编程,安装比拟灵活而且价格较低。二、在系统的硬件和软件设计中,都加有平安设计局部,防止加热过高造成设备的损坏。-. z.最后,通过这次设计,我发现还有很多知识并不结实,因
28、此在以后的学习中更应该多了解并掌握微机原理与接口技术的相关知识,熟练掌握使用汇编语言编程实现微机芯片的控制,多积累经历为以后的工作打好根底,最后感王清珍教师的帮助与指点,对此我深表意。参考文献1 戴梅蕚微型计算机技术及应用2007 清华大学2 何克忠计算机控制系统 2002 清华大学3 朱善君汇编语言程序设计 1998.3 清华大学4 颜永军protel99 电路设计与应用2001.1 国防工业5 康华光.电子技术根底模拟局部.高等教育.2006.16 何希才.传感器及其应用电路M. :电子工业,2001. 7 沙占友.智能化集成温度传感器原理与应用M. :机械工业,2002.8 继文.传感器
29、与应用电路设计M. :科学,2002.9 洪润、秀英、亚凡等.单片机应用设计 200 例M:航空航天大学,2006.附录 1:元器件清单:传感器,A/D 转换器,8086|8088CPU,可编程并行接口8255A 芯片,LED 显示器(7SEG-MPX2-CC),74LS138 锁存器,8279 等-. z.附录 2:电路总图附录 3:程序;DS18B20.ASM;*DS18B20g.ASM*;不用定时中断,用8253方式0延时,时钟1MHZ,计一个数1us;*ioport equ 0ec00h-0280hio8255k equ ioport+28bh ;8255 控制口io8255c equ
30、 ioport+28ah ;8255 C 口io8255a equ ioport+288h ;8255 A 口io8253a equ ioport+283h ;8253 控制口io8253b equ ioport+280h ;8253 计数器0STACK SEGMENTSTA DB 20 DUP ()TOP EQU LENGTH STASTACK ENDS;-DATA SEGMENTCSREG DW IPREG DW count0 db 00COUNT db 00COUNT1 DB 00COUNT2 DB 00qf db 0ehTEMP DB 00 ;温度,8位TEMPL DB 00 ;温度,
31、低字节TEMPH DB 00 ;温度,高字节-. z.TEMPD DB 00 ;温度,小数位MESS DB 8253A TIMERO IN MODEO0 10uS TIMER,0AH,0DHDB 8255 IN MODEO PA0 INPUT PC4-PC7 OUTPUT,0AH,0DHDB Strike any key, to convert temperature!,0AH,0DHDB Strike ESC key, return to DOS!,0AH,0DH,$buff db 20hBUFF1 DB 20hbuff2 db 20hbuff3 db 20hbuff4 db 2ehbuff
32、5 db 20h;172DATA ENDS;-CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK;-START: CLIMOV AX,DATAMOV DS,AXMOV DX,OFFSET MESSMOV AH,09HINT 21H ;显示提示信息;-MOV DX,io8255k ;8255初始化MOV AL,91HOUT DX,AL ;8255 PA0 IN PC7-PC4CALL INI ;初始化MOV AH,0CCH ;跳过读 ROM 命令CALL WRITE-. z.MOV AH,4EH ;写暂存器命令CALL WRITEMOV AH,32H ;写高温
33、度值50度CALL WRITEMOV AH,00H ;写低温度值0度CALL WRITEMOV AH,1FH ;写配置字节CALL WRITEKEY: MOV AH,01H ;查有否键入INT 16Hjz keyMOV AH,00 ;有键入,读取键值INT 16HCMP Al,1BHJZ sss ;ESC 退出CALL INI ;初始化MOV AH,0CCH ;跳过读 ROM 命令CALL WRITEMOV AH,44H ;温度转换命令CALL WRITEconv: MOV DX,io8255kMOV AL,0eH ;PC7清另OUT DX,ALnopnopMOV DX,io8255kMOV
34、AL,0fH ;PC7置1OUT DX,ALconv1: call delay1 ;延迟50mscall delay1-. z.MOV DX,io8255kMOV AL,0fH ;PC7置1OUT DX,ALCALL INI ;初始化MOV AH,0CCH ;跳过读 ROM 命令CALL WRITEMOV AH,0BEH ;读暂存器命令CALL WRITECALL READ ;读两个字节MOV TEMPL,ahCALL READMOV TEMPH,ahMOV AL,TEMPL ;合成一个十六位字MOV CL,04SAL AX,CL ;左移四位and ah,7fhMOV TEMP,AH ;温度值
35、整数局部jmp jjjsss: jmp exitjjj: MOV BUFF,2BH ;+AGN: MOV AH,TEMPLAND AH,08H ;温度值小数局部JZ AGN1MOV BUFF5,35H ;.5JMP AGN2AGN1: MOV BUFF5,30H ;.0;-AGN2: mov dl,buffmov ah,02int 21h-. z.call disp ;显示mov dl,0dhmov ah,02int 21hmov dl,0ahmov ah,02int 21hJMP KEY;-;恢复现场,返回 DOSEXIT: MOV AX,4C00HINT 21H;-;延时子程序,延时时间长
36、短由 COUNT 的值决定DELAY: push axpushfMOV DX,io8253aMOV AL,30H ;定时器0,模式0,16OUT DX,ALMOV DX,io8253bMOV Al,count ;8253 clk0 1MHZOUT DX,ALMov al,count0Out dx,alMOV DX,io8255clll: in al,dxand al,01hjz lllpopfpop ax-. z.RET;-;DS18B20初始化子程序INI: MOV DX,io8255kMOV AL,0eHOUT DX,AL ;PC7置0 口清0MOV COUNT0,02hmov count
37、,0bchCALL DELAY ;主机发复位脉冲持续700微妙MOV COUNT0,00mov count,00MOV DX,io8255kMOV AL,0fHOUT DX,AL ;主机置位,为输入作准备MOV COUNT0,00mov count,28hCALL DELAY ;等待40微秒MOV COUNT,00ini1: MOV DX,io8255aIN AL,DXAND AL,80HJNZ INI ;数据线应变低,假设没变低,重来。;数据线变高,初始化成功;初始化失败,重来L2:MOV COUNT0,02hmov count,0bchCALL DELAY ;DS18B20的应答过程至少需
38、700mov count0,00MOV COUNT,00-. z.MOV DX,io8255kMOV AL,0fHOUT DX,ALRET;-;写 DS18B20子程序WRITE PROC NEARMOV COUNT1,08HW0:MOV DX,io8255kMOV AL,0fHOUT DX,AL ;PC7清1w1: MOV DX,io8255kMOV AL,0eHOUT DX,AL ;PC7置0,DS18B20数据线变低nopnopSHR AH,01JC W2MOV DX,io8255kMOV AL,0eHOUT DX,AL ;PC7置0,写0JMP W3W2: MOV DX,io8255k
39、MOV AL,0fHOUT DX,AL ;PC7清1,写1W3: MOV COUNT0,00mov count,46hCALL DELAY ;延时70微秒,写时间为70微秒MOV COUNT,00-. z.MOV DX,io8255kMOV AL,0fHOUT DX,ALDEC COUNT1JNZ W1RETWRITE ENDP;-;读 DS18B20子程序READ: MOV COUNT1,08Hmov ah,00RE1:MOV DX,io8255kMOV AL,0fHOUT DX,AL ;PC7置1,数据线为1nopwt0: MOV DX,io8255kMOV AL,0eHOUT DX,AL
40、 ;PC7置0,数据线为0mov cx,02hwt2: loop wt2MOV DX,io8255kMOV AL,0fHOUT DX,AL ;PC7置1,数据线为1mov cx,08hwt1: loop wt1MOV DX,io8255aIN AL,DXAND AL,80H ;按位读数据RCL al,01 ;数据送 CF-. z.RCR ah,01 ;数据通过 CF 送 AHMOV COUNT0,00mov count,46hCALL DELAY ;读数据过程持续60微秒MOV COUNT,00DEC COUNT1JNZ wt0RET;-;转换成 BCD 码并显示disp PROC NEAR
41、;BCD 转换并显示子程序mov al,tempmov ah,00hmov cl,100div cl ;除100mov buff1,al ;百位值mov al,ahmov ah,00mov cl,10div cl ;除10mov buff2,al ;10位值mov buff3,ah ;个位值ttt:mov al,buff1call disp1mov al,buff2call disp1mov al,buff3call disp1mov dl,buff4-. z.mov ah,02int 21hmov al,buff5call disp1retDISP ENDP;-disp1 PROC NEAR
42、 ;显示一个字符and al,0fhadd al,30hmov dl,almov ah,02int 21hretdisp1 endp;-disp2 proc nearmov al,tempmov cl,04shr al,cland al,0fhadd al,30hcmp al,39he ntadd al,07nt: mov dl,almov ah,02int 21hmov al,tempand al,0fh-. z.add al,30hcmp al,39he nt1add al,07nt1: mov dl,almov ah,02int 21hmov dl,0ahmov ah,02int 21hmov dl,0dhmov ah,02int 21hretdisp2 endp;-DELAY1 PROC NEARpush axpushfMOV DX,io8253aMOV AL,30H ;定时器0,模式0,十六位OUT DX,ALMOV DX,io8253bMov al,50h ;8253 clk0 1MHZOUT DX,AL ;50ms 延时Mov al,0c3hOut dx,alMov dx,io8255c*x: in al,dxand al,01h-. z.jz *xpopfpop axRETDELAY1 endpCODE ENDSEND START