单片机AT89C52

更新时间:2024-07-02 07:50:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2总体方案设计

2.1方案比较

方案一设计的太阳能热水器控制系统以89C52单片机为检测控制中心单元,采用DSl2887实时时钟,不仅实现了时间、温度和水位三种参数实时显示功能,而且具有时间设定、温度设定与控制功能。控制系统可以根据天气情况利用辅助加热装置(电加热器)使蓄水箱内的水温达到预先设定的温度,从而达到24小时供应热水的目的。实际应用结果表明,该控制器和以往显示仪相比具有性价比高、温度控制与显示精度高、使用方便和性能稳定等优点。

AT89C52

图2-1 系统硬件结构图

方案二采用系统的温度采集选用PTl000铂电阻温度传感器,采集到的电压信号经集成运放LM324放大到2.O一5.0伏之间,送入串行加转换器11LCl543N,转换结果由单片机处理,其电路原理如图3所示.设计时将加转换器的参考电压设置为vREF+=5.0V,VREF=1.5V.LM324按照同相比例放大电路连接,则Vo=vi*(Rt/R+1)=0.5*(Rt/300+1).Rt值的变化表示了PtlooO温度传感器温度的变化,每个温度值对应一定的转换结果。可以在程序中建立一个查找表,表中每个元素的地址即为转换结果,元素值即为所对应的温度值。

第 1 页

图2-2 系统硬件结构图1

2.2方案选择

方案一硬件电路简单,程序设计复杂一些,但是我已经使用开发工具KEIL用汇编语言对系统进行了程序设计,用仿真软件PROTEUS对系统进行了仿真,达到了预期的结果。由此可见,该方案完成具有可行性,体现了技术的先进性,经济上也没有问题。

根据设计的要求,以及设计的便捷性,综上所述,本课题采用方案一对系统进行设计。

第 2 页

3.单元模块设计

3.1各单元模块功能介绍及电路设计物 3.1.1单片机系统设计 单片机系统由AT89C52和一定功能的外围电路组成,包括为单片机提供复位电压

的复位电路,提供系统频率的晶振。这部分电路主要负责程序的存储和运行。上图中MCS-51内部时钟方式电路外接晶体以及电容C5和C6构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格的要求,但电容的大小会影响振荡器频率的高低、谐振器的稳定性、起振的快速性和温度的稳定性。晶体可在1.2MHz~12MHz之间任选,电容C5和C6的典型值在20pF~100pF之间选择,但在60pF~70pF时振荡器具有较高的频率稳定性。典型值通常选择为30pF左右,但本电路采用33pF。在设计印刷电路板时,晶体或陶瓷振荡器和电容应尽可能安装的与单片机芯片靠近,以减少寄生电容,更好的保证振荡器稳定和可靠的工作。为了提高温度稳定性,应采用温度稳定性能好的NPO高频电容。AT89C52的复位是由外部的复位电路来实现的。复位电路通常采用上电自动复位和按钮复位两种方式。本设计中所用到的是上电按钮复位。

图3-1 单片机系统

3.1.2控制器实时时钟接口电路

第 3 页

为实现热水器24小时供应热水的目的,控制器必须有一个实时时钟来为系统提供准确的基准时间;在软件设计上则要实时地读出当前时间,同设定时间比较,以决定系统工作状态。本系统采用美国DALLAS半导体公司最新推出的时钟芯片DS12887,该芯片采用CMOS 技术,把时钟芯片所需的晶振和电池以及相关的电路集成到芯片内部,并与MC146818管脚完全兼容。DS12887芯片具有微功耗、外围接口简单、精度高,工作稳定可靠等优点。它与89C52单片机的接口电路见下图3-1。

图3-1 DS12887与单片机接口电路

3.1.3水位检测和温度检测接口电路

蓄水箱水位和温度检测部分是实现温度智能控制的重要环节,只有准确地检测出水位和温度,才能通过软件计算提前开始辅助加热的预加热时间。要实现辅助加热提前时间的精确计算,最好是采用连续液位传感器,但考虑系统成本,本设计仍采用分段式液位传感器(通过软件来提高精度),在水位显示上也仍采用分段显示。水位检测部分的硬件连接如图3-2所示。

第 4 页

图3-2 水位监测及显示接口电路

检测原理如下:当水箱中无水时,8个非门均由1M欧姆电阻上拉成高电平, 所以图中各“非”门(CD4069) 输出均为低电平,LED1~ LED8 均不亮。当水位高于“非”门1 的输入探针时,由于水的导电作用,使“非”门1 的输入变为低电平,所以其输出变为高电平,LED点亮,依此类推。随着水位的上升,各“非”门输出相继为高电平,LED依次点亮。这里要注意的是上拉电阻不能选择太小,因为水的电阻在100k8 左右,所以上拉电阻选择太小的话,将在水位升高时,无法把“非”门输入端拉成低电平。实验表明, 上拉电阻选择在500k~1M欧姆左右能很好地满足电路的工作要求。为了使89C52 随时能够读出当前的水位情况,这里选用74LS244 作为状态输入缓冲器。蓄水箱温度检测电路采用DS18B20芯片使其换成脉冲信号,送到89C52的I/O 口(编程为计数器工作模式),通过测量输出脉冲频率的大小来换算成水温高低信号。

3.1.4 DS18B20与单片机接口电路设计

基于DS18B20多点温度测量系统以AT89C51为中心器件,以KEIL为系统开发平

第 5 页

台,用C语言进行程序设计,以PROTEUS作为仿真软件设计而成的。

DS18B20是智能温度传感器,它的输入/输出采用数字量,以单总线技术,接收主机发送的命令,根据DS18B20内部的协议进行相应的处理,将转换的温度以串口发送给主机。主机按照通信协议用一个IO口模拟DS18B20的时序,发送命令(初始化命令、ROM命令、功能命令)给DS18B20,并读取温度值,在内部进行相应的数值处理,用图形液晶模块显示各点的温度。在系统启动之时,可以通过4×4键盘设置各点温度的上限值,当某点温度超过设置值时,报警器开始报警,从而实现了对各点温度的实时监控。

每个DS18B20有自己的序列号,因此本系统可以在一根总线上挂接了4个DS18B20,通过CRC校验,对各个DS18B20的ROM进行寻址,地址符合的DS18B20才作出响应,接收主机的命令,向主机发送转换的温度。采用这种DS18B20寻址技术,使系统硬件电路更加简单。如图3-3

图3-3 DS18B20与单片机接口电路

第 6 页

3.1.4 键盘和显示接口电路的设计

下图为89C52单片机P1口构成的中断方式4*4键盘电路。P1.0-P1.3为行线,P1.4-P1.7为列线,行线与4输入与门74HC21的一组输入端相连,输出端与外部中断INT1相连。16个键号Ki(I=0-15)次序如图中标注。

图3-4 89C52 P1口构成的4*4中断方式键盘

行列式键盘处理程序较为复杂,当有键按下时74HC21输出端出现低电平请求中断;在中断服务程序中要再次确认是否真有键按下,真有键按下时,再查出是哪个键按下,把该键的键号送入堆栈保护,等待键释放后再将键号弹出A中。该键盘输入处理程序的出口状态是键号在A中。设计中断程序时,先在主程序中将中断系统初始化,并开中断。在试验演示中通常开中断都设置循环等待。

键盘和显示电路是人机交互的重要手段。控制键是用户干预系统运行的唯一接口,也是用户比较关心的问题。为了实现控制器对时间与温度的设定及显示功能,串行显示电路采用串入并出芯片74LS164驱动4位数码管实现时间与温度的静态显示。

该电路只使用89C52的3个端口,配接4片串入并出移位寄存器74LS164 与1片三端可

第 7 页

调稳压器LM317T。其中74LS164 的引脚Q0~Q7为8位并行输出端;引脚A、B 为串行输入端;引脚CL K为时钟脉冲输入端,在CLK 脉冲的上升沿作用下实现移位,在CLK = 0 、清除端MR =1时,74LS164保持原来数据状态;MR =0 时,74LS164输出清零,其显示电路如图3-5。

其工作过程如下:89C52的串行口设定在方式0移位寄存器状态下,串行数据由P3.0发送,移位时钟由P3.1 送出。在移位时钟的作用下,串行口发送缓冲器的数据一位一位地移入74LS164中。4片74LS164 串级扩展为4个8 位并行输出口,分别连接到4个LED显示器的段选端作静态显示。需要指出的是,由于74LS164 无并行输出控制端,因而在串行输 入过程中,其输出端的状态会不断变化,造成不应显示的字段仍有较暗的亮度,影响了 显示的效果。以往的做法是在74LS164 的输出端加接4片锁存器或三态门,使移位寄存器串行输入数据时其输出端的变化不反映到LED上,待串行输入结束后再打开锁存器或三态门,将稳定的显示数据送给LED。

本设计电路的独特之处在于仅采用了1片三端可调稳压器LM317T,317T 的3、2 脚分别是电压输入、输出端,317T 的1脚是电压调整端,脚2输出电压随脚1电压而变化。脚1与接地电阻之间并一个NPN 三极管,它的基极受P1.7 口线控制,串行输入时P1.7 口线为高电平,三极管饱和导通使317T 的脚1约为0.3 V,脚2输出电压随之下降到1.5 V,不足以使共阳极LED发光,故此时串行输入的影响不会反映到LED上;串行输入结束后,使P1.7口线为低电平,三极管截止,脚2输出电压因脚1电压增高便上升到2.0V使LED正常发光。因此,1片三端可调稳压器LM317T起到了4片锁存器的作用使LED 显示不会闪烁。本电路的另一优点是通过可调电位器P1可在线调整脚2的输出电压,使LED的显示亮度均匀可调,而且省掉了大量的LED限流电阻。 3.1.5 光电隔离与辅助加热电路

图3-5为太阳能热水器光电隔离与辅助加热电路设计。当室外光强不足(阴天、下雨)时,对水箱的水提前加热是很必要的,这一电路恰好能完成这一功能。工作原理:当单片机89C52P2.1口输出高电平时,三极管T1导通,致使发光二极管发光,同时光敏三极管T2导通,继电器闭合,电阻丝R1~R4发热,这样就完成了加热任务,此电路虽然简单,但在太阳能热水器中是必不可少的。

第 8 页

图3-6 辅助加热电路图

3.2特殊元器件的介绍

3.2.1 AT89C52芯片

图3-7 AT89C52芯片引脚图

第 9 页

AT89C52 主要性能:

1、 与MCS-51 单片机产品兼容

2、 8K 字节在系统可编程Flash 存储器 3、 1000 次擦写周期 4、 全静态操作:0Hz~33Hz 5、 三级加密程序存储器 6、 32 个可编程I/O 口线 7、 三个16 位定时器/计数器 8、 八个中断源

9、 全双工UART 串行通道 10、低功耗空闲和掉电模式 l1、掉电后中断可唤醒 l2、看门狗定时器 13、双数据指针 l4、掉电标识符 方框图:

图3-8 AT89C52内部框图

第 10 页

功能特性描述:

AT89C52提供以下表中功能:8k字节Flash闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作指导下一个硬件复位。 VCC : 电源电压 GND: 地

P0 口:P0口是一个8位漏极开路的双向I/O口,也即地址/数据总线复用口。作为输出口,每位能吸收电流的方式驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。

P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,P1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.1分别作定时器/计数器2的外部计数输(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。在flash编程和校验时,P1口接收低8位地址字节。

表3.1 P1.0和P1.1口的第二功能

P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。

P3口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,P3 输出缓冲器能驱动4 个

第 11 页

TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89C52特殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。

表3.2 P3口的第二功能

RST: 复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。 ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。

在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置 “1”,ALE操作将无效。这一位置 “1”,ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。 PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。

当AT89C52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。

EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。

为了执行内部程序指令,EA应该接VCC。 在flash编程期间,EA也接收12伏VPP电压。 XTAL1:振荡器反相放大器和内部时钟发生器的输入端。 XTAL2:振荡器反相放大器的输出端。 Flash 编程―并行模式:

第 12 页

AT89C52 带有用作编程的片上Flash 存储器阵列。编程接口需要一个高电压(12V)编程使能信号,并且兼容常规的第三方Flash 或EPROM 编程器。 编程方法:

对AT89C52 编程之前,需设置好地址、数据及控制信号,可采用下列步骤对AT89C52 编程:

1.在地址线上输入编程单元地址信号 2.在数据线上输入正确的数据 3.激活相应的控制信号 4.把EA/Vpp 升至12V

5.每给Flash 写入一个字节或程序加密位时,都要给ALE/PROG 一次脉冲。每个字节写入周期是自身定时的,通常均为1.5ms。重复1—5步骤,改变编程单元的地址和写入的数据,直到全部文件编程结束。

3.2.2 DS12887时钟芯片简介

随着2000 年的即将来临,“千年虫”问题成为困扰当今世界的一大难题。过去采用两位数表示年度的日历系统将要用四位数来表示,因此有关的计算机操作系统和应用软件都要作相应的修改。据此,美国达拉斯半导体公司(Dallas)最新推出DS12887的串行接口实时时钟芯片,采用CMOS 技术制成,具有内部晶振和时钟芯片备份锂电池,同时它与目前IBMAT计算机常用的时钟芯片MC146818B 和DS1287 管脚兼容,可直接替换。它所提供的世纪字节在位置32h,世纪寄存器32h到2000 年1月1日从19递增到20。采用DS12887 芯片设计的时钟电路不需任何外围电路和器件,并具有良好的微机接口。DS12887芯片具有微功耗,外围接口简单,精度高,工作稳定可靠等优点,可广泛用于各种需要较高精度的实时时钟系统。美国Dallas公司推出两款数字时钟芯片DS12887/DS12C887,两款时钟芯片都将在1999年12月31日23时59分59秒时顺利地跳到2000 年1月1日零时,并能实2000 年2月29 日的闰年提示,是时钟芯片DS1287 的增强型品种,结构上相当于MC146818B 的改进型。芯片都采用24引脚双列直插式封装,其引脚接口逻辑和内部操作方式与MC146818 基本一致,所不同的是DS12887/DS12C887 芯片的晶体振荡器、振荡电路、充电电路和可充电锂电池等一起封装在芯片的上方,组成一个加厚的集成电路模块,因此,DS12887/ DS12C887时钟芯片无需MC146818 的电源电位检测端( PS),电路通电时其充电电路便自动对可充电电池充 电,充足一次电可供芯片时钟运行半年之久,正常工作时可保证时钟数据十年内不会丢失。此外,片内通用的RAM 为MC146818 的两倍以上。DS12887/DS12C887 内部有专门的接口电路,从而使得外部电路的时序要求十分简单,使它与各种微处理器的接口大大简化。使用时无需外围电路元件,只要选择引脚MOT 电平,即可和不同计算机总线连接。

第 13 页

1.主要技术特点

DS12887/DS12C887 具有下列主要技术特点:

(1) 具有完备的时钟、闹钟及到2100年的日历功能,可选择12小时制或24小时制计时,有AM和PM、星期、夏令时间操作,闰年自动补偿等功能。

(2) 具有可编程选择的周期性中断方式和多频率输出的方波发生器功能。 (3) DS12887内部有14个时钟控制寄存器,包括10个时标寄存器,4个状态寄存器和114bit作掉电保护用的低功耗RAM。

(4) 由于该芯片具有多种周期中断速率时钟中断功能,因此可以满足各种不同的待机要求,最长可达24小时,使用非常方便。

(5) 时标可选择二进制或BCD码表示。

(6) 工作电压: + 4. 5~5. 5V、工作电流:7~15mA。 (7) 工作温度范围:0~70°C。 2.DS12887/ DS12C887 的内部结构

DS12887/DS12C887为24引脚芯片,内部结构如下图。

图3-9 DS12887内部框图

其中:MOT:计算机总线选择端;SQW:方波输出,速率和是否输出由专用寄存器A、B的预置参数决定;AD0~AD7:地址/数据(双向)总线,由AS 的下降沿锁存8位地址;R/W:

第 14 页

读/写数据;AS:地址锁存信号端;DS:数据读信号端;CS:选通信号端,低电平有效; IRQ:中断申请,由专用寄存器决定;RESET:复位端;NC:空引脚。

DS12887内部由振荡电路,分频电路,周期中断/方波选择电路,14字节时钟和控制单元,114字节用户非易失RAM,十进制/二进制计加器,总线接口电路,电源开关写保护单元和内部锂电池等部分组成。DS12887管脚分配如图:

图3-10 管脚分配图

VCC:直流电源+ 5V 电压。当5V电压在正常范围内时,数据可读写;当VCC低于4.25V,读写被禁止,计时功能仍继续;当VCC下降到3V以下时,RAM和计时器供电被切换到内部锂电池。

MOT(模式选择):MOT 管脚接到VCC时,选择MOTOROLA时序,当接到GND 时,选择INTEL时序。

SQW(方波信号输出):SQW 管脚能从实时时钟内部15级分频器的13个抽头中选择一个作为输出信号,其输出频率可通过对寄存器A编程改变。AD0 —AD7(双向地址/ 数据复用线):总线接口,可与MOTOROLA微机系列和INTEL 微机系列接口。

AS (地址选通输入):用于实现信号分离,在AD/ ALE 的下降沿把地址锁入DS12887。 DS(数据选通或读输入):DS/ RD 管脚有两种操作模式,取决于MOT管脚的电平,当使用MOTORO2LA 时序时,DS是一正脉冲,出现在总线周期的后段,称为数据选通;在读周期,DS指示DS12887驱动双向总线的时刻; 在写周期,DS的后沿使DS12887锁存写数据。选择INTEL时序时,DS称作(RD),RD与典型存贮器的允许信号(OE) 的定义相同。

第 15 页

R/W(读/ 写输入) : R/ W 管脚也有两种操作模式。选MOTOROLA 时序时,R/W 是一电平信号,指示当前周期是读或写周期,DS为高电平时,R/ W高电平指示读周期,R/W 信号是一低电平信号,称为WR。在此模式下,R/ W管脚与通用RAM 的写允许信号(WE) 的含义相同。CS(片选输入):在访问DS12887 的总线周期内片选信号必须保持为低。IRQ(中断申请输入):低电平有效,可作微处理的中断输入。没有中断的条件满足时,IRQ处于高阻态。IRQ线是漏极开中输入,要求外接上接电阻。RESET(复位输出):当该脚保持低电平时间大于200ms,保证DS12887有效复位。 3.DS12887/ DS12C887 内部寄存器的功能

因DS12887 和DS12C887 结构功能上类似,现以DS12887 为例说明如下:CPU通过读DS12887的内部时标寄存器得到当前的时间和日历,也可通过选择二进制码或BCD码初始化芯片的10个时标寄存器。其114bit非易失性静态RAM 可供用户使用,对于没有RAM的单片机应用系统,可在主机掉电时来保存一些重要的数据。DS12887 的4个状态寄存器用来控制和指DS12887模块的当前工作状态,除数据更新周期外,程序可随时读写这4个寄存器,各寄存器的功能和作用如下。

寄存器A各位不受复位的影响,UIP 位为只读位,其它各位均可读写。寄存器的控制字的格式如下表2所列:

表2 DS12887 控制寄存器A 各布尔位定义: IT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 UIP DV2 DV1 DV0 RS3 RS2 RS1 RS0

1.IP 位:更新周期标志位。该位为“1”时,表示芯片正处于或即将开始更新周期,此时程序不准读写时标寄存器;该位为“0”时,表示至少在244μs 后才开始更新周期,此时程序可读芯片内时标寄存器。该位是只读位。

2. DV0 、DV1 、DV2 :芯片内部振荡器RTC 控制位。当芯片解除复位状态,并将010写入DV0、DV1、DV2后,另一个更新周期将在500ms后开始。因此,在程序初始化时 可用这三位精确地使芯片在设定的时间开始工作。这与MC146818 不同的是,DS12887固定使用32 768Hz 的内部晶体,所以,DV0 =“0”,DV1 =“1”,DV2 =“0”,即只有一种010的组合选择即可启动RTC。

3. RS3、RS2、RS1、RS0:周期中断可编程方波输出速率选择位。各种不同的组合可以产生不同的输出。程序可以通过设置寄存器B的SQWF 和PIE 位控制是否允许周期中断和方波输出。其寄存器A输出速率选择位如表3所列。 表3 DS12887 控制寄存器A 输出速率选择位定义 寄存器A 输出速率选择位 32 768Hz 时基 RS3 RS2 RS1 RS0 中断周期 SQWF输出频 0 0 0 0 无 无

第 16 页

0 0 0 1 3.90625ms 256Hz 0 0 1 0 7. 8125ms 128Hz 0 0 1 1 122.0μs 8.192kHz 0 1 0 0 244.141μs 4.096kHz 0 1 0 1 488.281μs 2.048kHz 0 1 1 0 976.5625μs 1.024kHz 0 1 1 1 1.953125ms 512Hz 1 0 0 0 3.90625ms 256Hz 1 0 0 1 7.812ms 128Hz 1 0 1 0 15.625ms 64Hz 1 0 1 1 31.25ms 32Hz 1 1 0 0 62.5ms 16Hz 1 1 0 1 125ms 8Hz 1 1 1 0 250ms 4Hz 1 1 1 1 500ms 2Hz 寄存器B允许读写,主要用于控制芯片的工作状态。寄存器B的控制字的格式如表4所列。

表4 DS12887 控制寄存器B各布尔位定义 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 SET PIE AIE UIE SQWE DM 24/12 DSE

(1) SET 位:当该位为“0”时,芯片处于正常工作状态,每秒产生一个更新周期来更新时标寄存器为“1”时,芯片停止工作,程序在此期间可初始化芯片的各个时标寄存器。

(2)PIE、AIE、UIE 位:分别为周期中断、报警中断、更新周期结束中断允许位。各位为“1”时,允许芯片发相应的中断。

(3)SQWE 位:方波输出允许位。SQWE“1”,按寄存器A 输出速率选择位所确定的频率输出方波;SQWE =“0”,脚SQW保持低电平。

(4) DM 位:时标寄存器用十进制BCD 码表示或用二进制表示格式选择位。DM =“0”时,为十进制BCD码;DM =“1”时,为二进制码。

(5) 24/ 12 位: 24/ 12 小时模式设置位。24/12位=“1”时,为24 小时工作模式;24/ 12 位=“0”时,为12 小时工作模式。

(6)DSE位:夏令时服务位。DSE=“1”,夏时制设置有效,夏时制结束可自动刷新恢复时间;DSE=“0”,无效。

第 17 页

寄存器C的控制字的格式如表4所列。该寄存器的特点是程序访问读该寄存器后,该寄存器的内容将自动清零,从而使IRQF 标志位变为高电平, 否则,芯片将无法向CPU 申请下一次中断。 表5 DS12887 控制寄存器C各布尔位定义 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 IRQF PF AF UF 0 0 0 0

(1) IRQF位:中断申请标志位。该位逻辑表达式为:IRQF = PF·PIE +AF·AIE+UF·UIE。当IRQF位变“1”时,引脚将变低电平引发中断申请。

(2) PF、AF、UF 位:这三位分别为周期中断、报警中断、更新周期结束中断标志位。只要满足各中断的条件,相应的中断标志位将置“1”。

(3) BIT3~BIT0 :未定义的保留位。读出值始终为0 。 寄存器D为只读寄存器。寄存器D的控制字的格式如表6所示。 表6 DS12887 控制寄存器D 各布尔位定义 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 VRT 0 0 0 0 0 0 0

(1) VRT 位:芯片内部RAM 与寄存器内容有效标志位。该位为“1”时,指芯片内部RAM 和寄存器内容有效。读该寄存器后,该位将自动置“1”。

(2) BIT6~BIT0 位:保留位。读出的数值始终为0。 4. DS12887/DS12C887 的中断和更新周期

DS12887/DS12C887 处于正常工作状态时,每秒钟将产生一个更新周期,芯片处于更新周期的标志是寄存器A中的UIP位为“1”。在更新周期内,芯片内部时标寄存器数据处于更新阶段,故在该周期内,微处理器不能读芯片时标寄存器的内容,否则将得到不确定数据。更新周期的基本功能主要是刷新各个时标寄存器中的内容,同时秒时标寄存器内容加1,并检查其他时标寄存器内容是否有溢出,如有溢出则相应进位日、月、年。另外一个功能是检查三个时、分、秒报警时标寄存器的内容是否与对应时标寄存器的内容相符,如果相符则寄存器C中的AF 位置“1”。如果报警时标寄存器的内容为C0H至FFH之间的数据,则为不关心状态。

为了采样时标寄存器中的数据,DS12887/DS12C887 提供了两种避开更新周期内访问时标寄存器的方案:第一种是利用更新周期结束发出的中断。它可以编程允许在每次更新周期结束后发生中断申请,提醒CPU将有998ms左右的时间去获取有效的数据,在中断之后的998ms时间内,程序可先将时标数据读到芯片内部的不掉电静态RAM中。因为芯片内部的静态RAM 和状态寄存器是可随时读写的,在离开中断服务子程序前应清除寄存器C中的IRQF 位。另一种是:利用寄存器A中的UIP位来指示芯片是否处于更新

第 18 页

周期。在UIP位从低变高244μs后,芯片将开始其更新周期,所以检测到UIP位为低电平时,则利用244μs 的间隔时间去读取时标信息。如检测到UIP 位为“1”,则可暂缓读数据,等到UIP 变成低电平后再去读数据。

3.2.3 DS18B20的工作原理

① DS18B20数字温度传感器概述

DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

DS18B20产品的特点

? 只要求一个端口即可实现通信。

? 在DS18B20中的每个器件上都有独一无二的序列号。 ? 实际应用中不需要外部任何元器件即可实现测温。 ? 测量温度范围在-55.C到+125.C之间。

? 数字温度计的分辨率用户可以从9位到12位选择。 ? 内部有温度上、下限告警设置。

TO-92封装的DS18B20的引脚排列见图4-2,其引脚功能描述见表4-1。

表4-1 DS18B20详细引脚功能描述

序号 1 2 3 名称 GND DQ VDD 引脚功能描述 地信号 数字输入输出引脚,开漏单总线接口引脚,当使用寄生电源时,可向电源提供电源 可选择的VDD引脚,当工作于寄生电源时,该引脚必须接地

② DS18B20的内部结构

DS18B20的内部框图如图4-3所示。64位ROM存储器件独一无二的序列号。暂存器包含两字节(0和1字节)的温度寄存器,用于存储温度传感器的数字输出。暂存器还提供一字节的上线警报触发(TH)和下线警报触发(TL)寄存器(2和3字节),和一字节的配置寄存器(4字节),使用者可以通过配置寄存器来设置温度转换的精度。暂存器的5、6和7字节器件内部保留使用。第八字节含有循环冗余码(CRC )。

第 19 页

图3-11 DS18B20的内部框图

DS18B20加电后,处在空闲状态。要启动温度测量和模拟到数字的转换,处理器须向其发出Convert T [44h] 命令;转换完后,DS18B20回到空闲状态。温度数据是以带符号位的16-bit补码存储在温度寄存器中的,如图3-11所示:

图3-12温度寄存器格式

符号位说明温度是正值还是负值,正值时S=0,负值时S=1。表4-2给出了一些数字输出数据与对应的温度值的例子。

第 20 页

温度 +125℃ +85℃ +20.0625℃ +10.125℃ +0.5℃ 0℃ -0.5℃ -10.125℃ 25.0625℃ -55℃ 输出(2进制) 0000 0111 1101 0000 0000 0101 0101 0000 0000 0001 1001 0001 0000 0000 1010 0010 0000 0000 0000 1000 0000 0000 0000 0000 1111 1111 1111 1000 1111 1111 0101 1110 1110 1110 0110 1111 1111 1110 1001 0000 表3-2 温度/数据的关系

输出(16进制) 07D0H 0550H 0191H 00A2H 0008H 0000H FFF8H FF5EH EE6FH FE90H

③ DS18B20的命令序列 ? 初始化

? ROM命令跟随着需要交换的数据; ? 功能命令跟随着需要交换的数据。

访问DS18B20必须严格遵守这一命令序列,如果丢失任何一步或序列混乱,DS18B20都不会响应主机(除了Search ROM 和Alarm Search这两个命令,在这两个命令后,主机都必须返回到第一步)。

a.初始化:

DS18B20所有的数据交换都由一个初始化序列开始。由主机发出的复位脉冲和跟在其后的由DS18B20发出的应答脉冲构成。当DS18B20发出响应主机的应答脉冲时,即向主机表明它已处在总线上并且准备工作。

b. ROM命令:

ROM命令通过每个器件64-bit的ROM码,使主机指定某一特定器件(如果有多个器件挂在总线上)与之进行通信。DS18B20的ROM如表4-3所示,每个ROM命令都是8 bit长。

指令 读ROM 符合ROM 协议 功能 发出此命令后,接着发出64位ROM编码,访问单总线上与33H 读DS18B20中的编码(即64位地址) 55H 该编码相对应的DS18B20,使之作出响应,为下一步对该 第 21 页

DS18B20的读写作准备 搜索ROM 跳过ROM 告警搜索命令 温度转换 读暂存器 写暂存器 复制暂存器 0F0H 用于确定挂接在同一总线上DS18B20的个数和识别64位ROM地址,为操作各器件作好准备 0CCH 忽略64位ROM地址,直接向DS18B20V 温度转换命令,适用于单个DS18B20工作 0ECH 执行后,只有温度超过庙宇值上限或下限的片子才做出响应 44H 启动DS18B20进行温度转换,转换时间最长为500ms(典型为200ms),结果丰入内部9字节RAM中 BEH 读内部RAM中9字节的内容 4EH 发出向内部RAM的第3、4字节写上、下温度数据命令,紧该温度命令之后,传达两字节的数据 48H 将RAM中第3、4字内容复制到EPROM中 2重调E2PROM 0B8H 将E2PROM中内容恢复到RAM中的第3、4字节 读供电方式 0B4H 读DS18B20的供电模式,寄生供电时DS18B20发送“0”,外部供电时DS18B20发送“1”

c. 功能命令:

主机通过功能命令对DS18B20进行读/写Scratchpad存储器,或者启动温度转换。

第 22 页

4软件设计

4.1软件设计原理及设计所用工具

本次设计主要利用C语言编写程序,根据功能的需要进行编程,其中软件设计所用的软件主要是Keil uVision3软件,PROTEUS ISIS软件。

热水器不论在什么样的天气里,都能够在设定的时间向用户提供设定温度的热水,从而给用户带来便利。当控制器在设定的时间使水温达到设定温度时,将通过声光报警提醒用户。

根据这一要求,控制器软件设计采用模块化结构,包括主程序、键盘中断子程序、DS12887更新周期结束中断子程序、LED显示子程序和提前加热时间计算子程序等。系统主程序主要完成温度和水位的检测以及进行辅助加热时间预算和一些初始化功能。在主程序中采用了查表方法进行辅助加热提前量预算。系统主程序流程图如图4所示。

图4-1 系统程序流程图

第 23 页

对于温度和时间设定, 每次设定结束后, 就将设定值存入DS12887 的非易失性RAM中,下次开机时进行读取。这样作至少有两个优点:一是系统在不进行设定时,就认定该设定值和先前一次一样,解决了每次开机总要从头设定的问题,另一个是若系统在运行中间停电而再次来电时,可以不用重新设定, 就能按原设定值对温度进行控制,增强了控制器适应外界变化的能力。对提前加热时间的计算,则是系统能否实现预定功能的重要一环。因为系统采用分段式水位检测,若采用能量守恒的方法对提前加热时间进行预算,也同样得不到精确的结果。为了避开繁琐的计算过程,本系统中采用了模糊控制思想,使用了如下一些控制语句: IF 水位高AND 温度差大THEN 加热时间长 IF 水位适中AND 温度差适中THEN 加热时间适中 IF 水位低AND 温度差低THEN 加热时间少

采用这种思想后,可以用实验方法获得各种情况下需要加热的时间, 编制成表格。使用时,只要查表获得提前加热时间就行了。显然,表格分得越细,控制就越准确。本控制器采用温差每等于5℃为一格, 就能满

足控制要求了。为了减小误差,试验表明,可以采用如图5 的方法。

图4-2 水位监测处理示意图

实验中,用水位达到B1时的结果代替水位达到A1时的结果,B2代替A2,B3 代替A3,B4代替A4。这样,CPU 读入的A1水位查表后得到的预加热时间是实验中水位在B1 处的时间。经过这种处理,会把由于分段检测而产生的计算误差减小一半,由原来的h变成了h/2(h为分段水位检测间隙)。如果水箱水深为40cm,分8段检测,此种处理方法的计算将使水位误差由原来的5cm变成了2.5cm。这种误差对于民用的热水器来说,已完全能够满足要求了。

第 24 页

4.2显示子程序

分析表明,移位寄存器74LS164仅有串入并出作用没有译码功能。因此,在编写显示驱动程序之前,首先需要计算列写出与本电路对应的LED段选码 ,然后由89C52的P3.0口送入74LS164的串行输入端,再并行输出到LED 的段选端。需要指出的是,上面显示电路采用TOS28106BHK型号的共阳极LED显示器,根据PCB印制线路板的连线方便,其LED的8个段选端与74LS164的并行输出口即8根段选线的连接没有遵照通常的规律,而是如图3-5所示的段排列为7、6、4、2、1、9、10、5,相应的段选码也要重新计算,如显示字符0的段选码为11H。电路中设计了4位LED显示器,其功能为:左首位为百位数或标志位,左二位为十位数,左三位为个位数,左四位为小数点后的十分位数。据此,给出如图4-3所示的显示子程序框图。

图4-3 显示子程序框图

第 25 页

5系统调试

5.1软件调试

软件的调试主要通过Keil uVision3软件进行操作,对程序编写过程中的错误进行查找,找出错误,进行修改,然后再进行编译直至编译成功,生成HEX文件,才能下载到单片机里,继而实现相应功能。

第 26 页

6系统功能

6.1系统能实现的功能

本系统通过单片机控制各个电路模块以实现对温度,水位的检测,以及对整个热水器的智能化控制。

6.2系统功能测试

设计前期通过KEIL软件和PROTEUS仿真软件的联调,对设计功能进行仿真,均达到了预期的设计效果,设计后期,硬件制作完毕后,将仿真成功后的程序通过单片机下载程序,写入单片机,再根据显示模块的各个端口连接方式,正确地将单片机跟显示模块连接,最后都实现了设计的功能。

6.3系统功能分析

该控制器和以往显示仪相比具有性能价格比高、温度控制与显示精度高、使用方便和性能稳定等优点。单片机控制系统具有低价、智能的优势,能够根据需求的不同而作相应的调整,更加个性化。同时,使用单片机控制系统能够节约能源,保护设备,延长设备的使用时间。 该热水器具备以下特点:

1.结构简单、运行可靠、操作维护简便。

2.热源取之不尽用之不竭,不需要运输,节省燃料。 3.无污染,不会对周围环境造成任何影响。

4.热水产量受季节、地区纬度、采热面积、采热器类型、环境温度、供水温度、风速、

日照实际等因素影响较大。

5.该系统加装减压阀后可与锅炉配套使用,解决冬季用水。 6.不用考虑玻璃盖的防冻装置。

7.该系统加装减压阀后可与锅炉配套使用,解决冬季用水。 8.不用考虑玻璃盖的防冻装置。

该热水器装置置于浴室屋订占地面积较大,同时增加了建筑物的载荷。

在试制和安装过程中我们体会到只有注意以下几个方面才能保证热水器的正常运行,第一是循环管道水流方向不允许有反坡现象,拐弯要和缓,管道内要清洁无阻塞。第二是冷水箱、热水箱、集热器及热水保温的相对位置及标高合理,符合水流规律,第三是补充给热水箱的水流不允许冲击,第四是电磁阀的选择及安装位置要合理,保证动作灵敏可靠。

总之,无论从市场或技术抑或价格的角度来说,此款热水器具有很大的优势。它市

第 27 页

场前景广阔、技术先进、价格合理、高度智能化,方便省事,是当前市面上热水器的升级产品。它不但适合于城乡民宅需求,还适用于写字楼、餐饮、娱乐、商业服务浴室、理发店、旅馆、招待所、托儿所、敬老院及外贸出口等各种需求。

第 28 页

7总结与体会

本次课程设计是对所学知识的一次综合性运用。其中包括对模拟电子技术基础、和数字电子技术基础、单片机等知识的运用。从而完成了本次设计。在设计的过程中发现了自身知识的不足,也发现我们必须具备专业基础知识以外,才能成功的设计出一件合格的东西。这次课程设计收获很多,体会也很深刻,并且对我们所学的东西也产生了浓厚的兴趣。在设计过程中,也学会了很多新的东西,PROTEL软件绘制电路原理图和PCB图,以及一些仿真软件的应用,最典型的就是PROTEUS软件的应用,以及与KEIL软件的联合使用功能。当然最重要的是学到了关于基本电子设计的一些基本方法,同时也加深了对一些常用的电子元件的理解及其基本用法的掌握。除此之外,我觉得在这次设计的过程中,我发现团队精神的重要性,很多时候一个人的力量是有限的,一个人不可能什么都会,什么都能自己解决,还是有需要他人帮助的时候,我觉得人与人之间的相互帮助很有必要,这样不仅能帮助大家很快的解决问题,还能提高我们每个人的实际水平,也培养了我们的团队合作精神,这些能力对于我们今后的学习和工作都很有帮助。

由于时间关系,本次设计中还有不尽完善之处。希望在以后的学习生涯中不断的完善和改进。

在本次设计过程中遇到不少问题,在舒欣梅老师和同学的帮助和配合下才顺利的完成了本次课程设计。

舒欣梅老师在我们做设计的过程中,给予了我们极大的帮助,不仅从知识方面引导了我们的设计思路,同时,在人生观上也给了我们不少的启示。在此,我对老师和同学表示深深的谢意。

第 29 页

8参考文献

[1] 谢自美.电子线路设计·实验·测试.华中科技大学出版社,2002.07 [2] 康华光.电子技术基础(数字部分).高等教育出版社,2003.03 [3] 康华光.电子技术基础(模拟部分).高等教育出版社,2003.03 [4] 陈振官.新颖高效声光报警器DIY.国防工业出版社,2005.04 [5] 肖景和.初学无线电——电子电路分析.人民邮电出版社,2006.01 [6] 精英科技编著.电路设计完全手册.中国电力出版社.2001 [7] 后俊伟编著.电路设计自动化.电子科技大学出版社.1995.11

[8] 清源科技编著.Protel99SE电路原理图与PCB仿真.机械工业出版社.2007 [9] 马建国,孟宪元主编.电子设计自动化技术基础.清华大学出版社 .2004 [10] 杜刚.电路设计与制版protel应用教程.清华大学出版社.2006

[11] 赵晶编著.电路设计与制版protel99高级应用.人民邮电出版社.2000.11

第 30 页

附录1: 主程序:

ORG 000H JMP START

START: Curtemp EQU 10H ;Curtemp存储地址

Pretemp EQU 11H ;Pretemp存储地址

MOV TMOD, #53H

LCALL InitDS12887 ;初始化DS12887时钟芯片 SETB EA ;开CPU中断 LCALL ReadTempandTime ;读温度时间设定值 LCALL ReadWaterandPosition;读水位高度 CLR C ;C清零 SUB Curtemp,pretemp JC Offheat Heatcontinue:

LCALL FUZZY ;预算提前加热时间 LCALL DELAY LCALL Heat SJMP $ OffHeat:CLR P2.1 RETI

Heat: SETB P2.1 LCALL DELAY CLR C LCALL ReadTemp MOV A, Curtemp ADD A, #2H SUB A, Pretemp JNC KeepTemp JMP Heatcontinue LCALL KeeptempCON RETI InitDS12887:

SETB P2。1

第 31 页

MOV DPTR, #0BH ;初始化DS12887B寄存器 MOV A, #22H ;置DS12887 24小时模式 MOVX @DPTR, A ;允许报警中断禁止其它中断 MOV DPTR, #0AH ;初始化DS12887 A寄存器 MOVX A, #20H ;时钟频率52.628KHZ,禁止SQW MOV DPTR, #00H ;初始化时钟 MOV A, #00H

MOVX @DPTR, A ;秒 MOV DPTR, #02H ;分 MOV @DPTR, A

MOV DPTR, #04H ;时 MOV A, #12H MOV @DPTR, A RETI ReadTempandTime:

LCALL ReadTemp LCALL ReadTime RETI ORG 0013H JMP KeyBoardINT KeyBoardINT:

LED显示子程序:

DISI:

SETB P1.7 ;灭显示 MOV R0, #SBCD

MOV A, @R0 ;取出要显示的数 ADD A, #2DH ;加上偏移量 MOVC A , @A+PC ;查表取出段选码 MOV SBUF, A ;送出显示 DL1:

JNB TI, DL1 ;输出完否?

第 32 页

CLR TI ;完,清中断标志 INC R0 MOV A, @R0 ADD A, #21H MOVC A, @A + PC

ANL A, #OEFH ;个位加小数点 MOV SBUF, A DL2:

JNB TI, DL2 CLR TI INC R0 MOV A, @R0 ADD A, #13H MOVC A, @A+PC MOV SBUF, A DL3:

JNB TI, DL3 CLR TI MOV A, #0FFH MOV SBUF, A DL4:

JNB TI, DL4 CLR TI

CLR P1.7 ;亮显示 RET

SEGTAB:

DB 11H,0D7H,32H DB 92H,0D4H,98H DB 18H,0D3H,10H,0D0H

键盘输入主程序:

MOV P1, #0FH ;键盘初始化,P1.0~P1.3置输入方式,

P1.4~P1.7为0状态

第 33 页

MOV IE, #84H ;开CPU中断,开INT1中断 SJMP $ ;中断等待

中断服务程序:

ORG 0013 ;INT1中断入口地址

LJMP IO51K16 ;从中断入口转移键盘处理程序IO51K16

IO51K16: CALL D10MS ;延时10秒

LCALL KEYIN ;调键输入检查子程序 JNZ LKOUT ;有键输入,转查键号 RETI ;无键输入,中断返回

LKOUT: MOV R2, #0EFH ;首列扫描字写如R2

MOV R4, #00H ;首列偏移值如R4

CONU: MOV P1, R2 ;列扫描字写入列线中

MOV A, P1 ;读入P1口状态到A中

JB ACC.0,LONE ;检查第0行是否为0状态,不为0表示按下

键不在此行,转下行

MOV A, #00H ;第0行为0状态,表明按下键在此行,首列

号如A

AJMP LKP ;转求键号

LONE: JB ACC1.1, LTWO ;检查第1行有无键按下

MOV A, #04H ;有键按下,该行首列号入A AJMP LKP ;转求键号

LTWO: JB ACC.2, LTHR MOV A, #08H AJMP LKP

LTHR: JB ACC.3, NEXT ;该列所有行都无键按下,转NEXT MOV A, #0CH ;有键按下,该行首列号入A中 LKP: ADD A, R4 ;求键号,键号位首列号加列偏移值 PUSH A ;键号入栈保护 WKFE: LACLL KEYIN ;等待键释放

JNZ WKFE ;键未释放转WKFE等待 POP A ;键释放,键号如A

LJMP KJMP ;转键操作转处理 NEXT: INC R4 ;转查下一列,列偏移值加1 MOV A, R2

第 34 页

JNB ACC.7, KND ;最后一列查完?查完中断返回 RL A ;未查完,列扫描字左移1位 MOV R2, A ;扫描字如R2继续查找 LJMP CONU KND: RETI

KEYIN: MOV P1, #0FH ;查完有无键按下,A不为0,有键按下 MOV A, P1 CPL A ANL A, #0FH

RET

KJMP:

SUB A,#OFH JC W riteTemp ADD A, #0FH CLR C SUB A, #0EH

JC StoreTemporTime ADD A, #0EH CLR C SUB A, #ODH JC Waterpoistion ADD A, #ODH CLR C SUB A, #0CH JC Vtemp ADD A, 0CH CLR C SUB A, #OBH JC StoreTime RETI ORG 0003H JMP Heat RET

第 35 页

附录2:

第 36 页

本文来源:https://www.bwwdw.com/article/k4z.html

微信扫码分享

《单片机AT89C52.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文
范文搜索
下载文档
Top