摘要:当前能源紧缺,用电紧张,太阳能是绿色能源,得到广大用户的喜爱。使用太阳能热水器时存在的问题:不可缺水,空晒情况下上水会爆炸;春、秋天,水温升高蒸发,造成热能损失;冬天水温不够,须用电等等。采用太阳能热水器智能仪(仪称太阳能热水器水温水位测控仪),能解决上述问题。使用户省心,使用方便,智能运行,用户不必作任何操作。
关键词:太阳能热水器 工作原理 技术性能
引言
当前能源紧缺,用电紧张,太阳能是绿色能源,得到广大用户的喜爱。使用太阳能热水器时存在的问题:不可缺水,空晒情况下上水会爆炸;春、秋天,水温升高蒸发,造成热能损失;冬天水温不够,须用电等等。采用太阳能热水器智能仪(仪称太阳能热水器水温水位测控仪),能解决上述问题。使用户省心,使用方便,智能运行,用户不必作任何操作。
太阳能是一种低密度、间歇性、空间分布不断变化的能源,与常规能源有很大的区别,这就对太阳能的收集和利用提出了较高的要求。在太阳能热利用中,为了得到中高温热能,必须使集热器从日出到日落跟踪太阳,而在太阳能光电中,相同条件下,自动跟踪发电设备要比固定发电设备的发电量提高35%,成本下降25%。因此在太阳能利用中,进行跟踪装置的控制方式进行研究是一项很有意义的工作。
1. 本课题技术性能要求:
(1) 使用电源220V AC,功耗<5W。
(2) 水温数码显示,测温范围0~99 0C;精度±20C。
(3) 水位分五档显示(缺水、20、50、80、100%)。
(4) 具有缺水上水、温控上水、手动上水和低水压上水等功能。
(5) 水位设置。可设置加水水位20、50、80、100%(本仪预置水位50%)。
(6) 缺水报警。当水位从高到低,出现缺水状态时,蜂鸣报警,缺水指示灯闪亮。
2. 工作原理:
2.1 原理:
利用热敏电阻和液位传感器检测水温和水位,并加以显示。根据水温水位情况进行控制。当水位从高到低,出现缺水状态时,蜂鸣报警,缺水指示灯亮,延时15分钟,若温度不超过990C,(以免空晒后上水造成炸管),自动上水至预置水位;若温度高于1000C,不上水。太阳晒后,水温上升,当温度超过600C且水未满时,打开电池阀上水至500C;防止出现低水量、高水温的不合理现象。晚上,若热水已用完,延时15分,进行缺水上水;若热水未用完,不上水,以保证热水充分利用;第二天太阳出来后,利用温控上水。在上水的过程中,水压过低或停水,智能仪会自动进入低水压上水模式,低水压声光报警,间隔30分钟启动上水,若30分钟内不能使水位上升一挡,则停止30分钟,然后再启动,反复循环。以免电池阀长时间通电而烧毁。
2.2实现方案:(附录1:系统示意图)
通过“水位设置”键可进行水位设置,可设置加水水位20、50、80、100%(本仪预置水位50%)。通过“上水”键,可实现手动上水。通过“上水”键,若水位低于预置水位,可上水至预置水位;若水位已达到预置水位,则在原水位基础上再加一档;若水位已加满,则停止手动加水。在上水过程中,按“上水”键,可停止上水。
3. 硬件设计: 3.1 直流电源的设计:
3.1.1 直流电源的图解:
本课题可采用集成三端稳压器,只要加上一些外围元件即可实现。其框图和电路分别如下图:
3.1.2 方案论证:
通过框图分析,该电路由四个部分组成,它们的功能分述如下:
(1) 电源变压器
它的任务是把电源电压变压到合适的大小。如果u2的值太大,会造成集成三端稳压器7805的功耗太大,温度升高,且浪费电能。反之,如果u2的值小到一定的程度,三端稳压器不能正常工作,失去稳压作用 。因此u2的值应大小合适,这个值应该使三端稳压器在交流电网电压最低和输出电流最大时能正常工作。而且在正常稳压的前提下,它的压降尽可能小,以减少功耗。
(2) 整流电路
它的任务是将正弦波变换成直流电压。这里一般采用桥式整流电路来实现,即可用四个二极管来组成,也可用整流桥堆来完成,只是参数一定要选择合理。
(3) 滤波电路
它的任务是将全滤波形通过 RC 滤波网络以后变成更平坦的直流电压,减小脉动,提高整流的效果。这时整流管中通过的电流的瞬时值要比平均值大得多,特别在接通电源瞬间有相当大的冲击电流(即充电电流)通过整流管,这一点要引起注意。
(4) 稳压电路
要求输出恒定的直流电压,且要达到提出的要求,
3.1.3 方案实现 :
(1)计算u2和C1
查阅集成三端稳压器的知了可知,对输出电压在5v~12v之间的稳压器,其输入端的电压一般要比输出端电压高5v。而输出电压在15v~24v的稳压器,其两端电压差达到7v~9v左右。在此,如果1,2两端的电压为12V,那么可以求得u2为10v。从电容滤波出发,C1的容量应足够大,但C1的容量也不能太大,否则整流元件的瞬时电流太大,而且容量越大,电容器的体积越大,价格越贵,根据经验综合各方面情况,取C1=3300uF.
(2) 整流元件的参数
1)反向耐压 根据桥式整流电路的性能可知,每个整流二级管在交流电网最高时承受的最大反向峰植电压为:
为了安全,整流管的反向耐压应比上述植高50%以上,因此选择整流管时,其耐压应按下式考虑:
2)正向电流 桥式整流电路中,每个整流二极管的正向电流平均值是输出电流的一半,其最大值为:
由于整流管在接通电源瞬间有相当大的冲击电流(即充电电流)通过,因此,整流管的参数(正向电流平均值)应比上述值大(0.5~2)倍。若按比上述值大1.8倍考虑,则=1.8
目前,市场上有各种规格的整流桥堆出售,它有两个交流输入端和两个直流输出端。由于它体积小,使用方便,价格较低,已成为常用整流元件。根据上面的计算,本电源可选用1A/25V的整流桥堆。
(3) 变压器二次绕组的电流
由于电容滤波整流电路中,整流管的电流不是正弦波,变压器二次绕组电流的有效值要比输出电流大,一般情况下,前者是后者的(1.1~3)倍。这里我们取
因此,变压器二次绕组的额定电流(交流有效值)应按2A设计。
在本设计中,对电磁阀的直流电源的要求不不高,又因为1,2两端的电压为12V,为节省资源,故可直接取用1,2两端的电压作为电磁阀的直流电压,无需再另行设计12V稳压电源。
3.2 输入接口电路:
接口电路是一组电路,是中央处理器与存储器、输入/输出设备等外设之间协调动作的控制电路。从更一般的意义上说,接口电路是在两个电路或外设之间,使两者动作条件相配合的连接电路。接口电路并不局限在中央处理器与存储器或外设之间,如直接存储器存取DMA接口电路就是控制存储器与外设之间数据传送的电路。
接口电路的作用就是将来自外部设备的数据信号传送给微处理器,微处理器对数据进行适当加工,再通过接口电路传回外部设备。所以,接口电路的基本功能就是对数据传送实现控制,具体包括5种功能:地址译码、数据缓冲、信息转换、提供命令译码和状态信息、定时和控制。
不同的接口电路用于不同的控制场合,因此其功能也各有特点。如并行接口电路不要求数据格式转换功能,来自总线的并行数据就可直接传送到并行外设中;而串行通信接口电路就必须具备将并行数据转换为串行数据和将串行数据转换为并行数据的功能。
本设计所用到的传感器,包括测水位的传感器与测水温的传感器,分别作如下介绍:
(1)水位传感器:
它的结构图如下:
说明:结构图中的电阻外表面均不与水直接接触,但分别与a、b、、c、d 良好接触,a、b、c、d用于感知水位。
硬件图中HD74HC04P是一个六反向器,管脚如下图所示:
它在本设计中用于接成环形振荡器。
选择合适电容、电阻值时,环形振荡器就能根据每次传感器的阻值产生相应特定周期的方波。
其中为水位传感器的电阻值
由传感器的结构图可看出:
当水位未达到a时,即h<a时、这时传感器的总阻值为4R,对应,系统处于缺水状态。
当ah<b时,传感器电阻阻值为3R,对应,系统处于20%水位。
当bh<c时,传感器电阻阻值为2R,对应,系统处于50%水位。
当ch<d时,传感器电阻阻值为R,对应,系统处于80%水位。
当h=d时,传感器电阻阻值为0,对应,系统处于100%水位。
其中,环形振荡器产生的方波周期T(或f)可通过单片机P87LPC744BN的两个定时/计数器(T0、T1)来确定,T1用来计数,T0用来定时。
所以,水位传感器测水位的基本原理如下:
(m为T1的计数值,为T0的定时值)。
(2)水温传感器
本设计可选选用具有负温度系数的热敏电阻来测水温,热敏电阻与普通电阻不同,它具有负的温度特性,当温度升高时,电阻值减小,它的应用是为了感知温度。
现选用MF51型直热式负温度系数热敏电阻,它的技术特性如下:
型号 | 标称电阻() | 材料常数() | 温度系数() | 使用温度范围 |
MF51 | 1~5K | | 3300 | | 3.7 | 55~ 300 |
5~20K | 3600 | 4.0 |
20~80K | 3900 | 4.3 |
80~100K | 4300 | 4.7 |
它能满足本设计的测量灵敏度要求和2%的测量精度要求,性价比较高。
测量原理:
与水位传感器一样,在设定好合适的参数(R1、R2、Rs、C)后,对应每个热敏电阻阻值,环形振荡器便能产生一个特定周期的矩形波。
T可通过单片机的T0外部计数和T1内部定时的方式确定。
故
然后通过下列公式求温度:
其中 --------------被测温度
-------------与热敏电阻特性有关的参数
------------与热敏电阻特性有关的系数
--------------热敏电阻阻值
以上计算均可由软件编程实现,把计算出的温度转化成BCD码,然后再存放于显示缓冲区中,执行相应的功能程序。
3.3 键盘中断:
本系统存储容量不大,4KROM,128RAM足够,,由于只有二个键,且不经常操作,所以本设计中采用了中断方式,其中与P0.2口的键盘是用于手动上水功能,与P0.3口连接的键盘用于水位设置的功能。
3.4 显示接口:
本设计中采用了共阴极接法,对于显示水温水位的程序作如下说明:
① 在动态扫描过程中,调用延时子程序Del1,其延迟时间为1ms,这是为了使扫描到哪位显示器稳定的点亮一段时间,犹如扫描过程中在每一位显示器上都一段驻留时间,以保证其显示亮度。
② 本设计接口电路是软件为主的接口电路,对显示数据以查表方法得到其字形代码,为此在程序中有字形代码Table,从0开始依次写入十六进制数的字形代码。为了进行查表操作,使用查表指令 MOVC A,@A DPTR,由DPTR提供16位基址,由A提供变址,因此显示数据送A后,再由A送P0.1~P0.6输出给显示器。
(1)水位显示:
本系统需显示水位,水位分缺水、20、50、80%五档,均用发光二极管来指示。
(2)水温显示:
本系统需显示水温,测量范围为0~99 0C,用两个八位LED数码管显示。
1)LED结构和显示原理。LED(Light Emitting Diode)显示器是由发光二极管作为显示字段的显示器件,最常见的是由7段型发光二极管(a~g7段)和1个圆点型发光二极管(常以dp表示,主要用来显示小数点)组成的LED显示器,其排列形状如下图所示。这种LED显示器也可称为7段数码显示器(或8段数码显示器)。
LED显示中的发光二极管根据其连接的方法有共阴极和共阳极两种结构。
共阴极结构:把各段发光二极管的阴极连接在一起构成公共阴极,如图a所示。使用时,公共阴极接地,根据要求需点亮发光二极管的阳极输入高电平,不需点亮的发光二极管的阳极输入低电平。
共阳极结构:把各段发光二极管的阳极连接在一起构成公共阳极,如图b 所示。使用时,公共阳极接 5V,根据要求需要点亮发光二极管的阴极输入低电平,不需点亮的发光二极管的阴极输入高电平。
通过控制7个段的发光二极管的亮暗的不同组合,可以显示多种数字、字母以及其他符号。
2)字段码。为了显示各个数字或字符,就需要为LED提供相应的代码,因为这些代码是控制各段的亮或灭,供显示器显示字形的,所以称为字段码(也可以称为段选码或字形码)。
七段发光二极管再加上1个小数点位,共计8段,因此提供给LED显示器的字段码正好1个字节。各代码位的对应关系如下:
D7 D6 D5 D4 D3 D2 D1 D0
下图所示为共阴极LED所显示的不同字符的字段码,测量范围为0~99 0C,当温度超出范围时,显示器均显示F。
显示字符 | 共阴极字段码 |
0 | 3FH |
1 | 06H |
2 | 5BH |
3 | 4FH |
4 | 66H |
5 | 6DH |
6 | 7DH |
7 | 07H |
8 | 7FH |
9 | 6FH |
F | 71H |
3)N位LED显示器。在单片机应用系统中,实际使用的LED显示器有多个,N位LED显示器的显示要从两个方面来控制:其一是控制N位的字段显示(即显示什么字符);其二是控制字位(即哪一位到哪一位亮)。由LED的显示原理可知,要使某N位LED显示器的某一位显示某个字符,就必须将此字符转换为对应的字段码来控制该位的8个段,同时,该位的字位线也要控制有效,这要通过一定接口来实现。
LED显示器有两种显示方式,即静态显示方式和动态显示方式。N位LED显示器有N根字位选线(简称:“位选线”)和N*8根字段选线(简称:“段选线”)。根据显示方式不同,位选线和段选线的连接方式也不同。
各种字符的字段码的获取方法有两种:即软件译码和硬件译码法。目前通常所用的各种型号的单片机开发系统或实验装置普遍采用软件译码。
当单片机应用系统中的LED显示器位数较多时,为了简化电路降低成本,本设计采用动态显示的方式。动态显示方式的接口电路的连接方法是:将所有LED位的段选线(a ~ dp)同名并联,即所有a段并联,所有b段并联。依次类推,然后由一个8位I/O接口来控制各个段,而所有位的位选线则由另外一个相应的I/O接口线来控制。这样用两个8位I/O接口就能控制8位LED显示器。
LED显示器是由电流型控制器件,其工作电流为2mA~20mA,使用时须加限流电阻。本设计中限流电阻选用1K。
动态扫描显示控制方式就是逐个地循环点亮各位显示器,即在某一瞬间,只让某一位的位选线处于选通状态(共阳极的为高电平,共阴极的为低电平)其它各位的位选线处于段开状态,同时段选线上输出相应位要显示字符的字段码。这样在每一个瞬间,8位LED中只有选通的那一位LED显示出字符,而其它7位则是熄灭的。同样,在下一瞬间,只显示下1位LED。如此继续下去,等8位LED都显示完毕后,在循环进行。虽然这些字符是在不同的瞬时轮流点亮的,但由于人眼的视觉残留效应,看到的是8位稳定显示的字符,与静态显示的效果完全一样。所以为了简化电路、降低成本,此系统中采用动态显示方式。
3.5 电磁阀:
由于本系统中执行机构控制的是电磁阀,因此需用三极管进行功率放大。
3.6 晶振:
为给单片机提供工作所需要的时钟信号,本设计中采用了6MHZ的晶振。故系统中CPU执行的每一个机器周期为2us.
3.7 主机:
主机的选择是关键,选得好,可节省许多外围电路,本设计采用的是由Philips公司生产的P87LPC764BN芯片,是20脚封装的单片机,适合于要求高集成度、低成本的场合。采用80C51加速处理器结构,指令执行速度是标准80C51的两倍。片内有4K字节OTP程序存储器,128字节的RAM。32Byte用户代码区可用来存放序列码及设置参数;有看门狗电路、复位电路(使用片内上电复位时不需要外接组件);2个16位定时/计数器,2个A/D转换器;所有口线均有20m A的驱动能力;电源电压VDD=4.5~6.0(操作频率为20MHZ)。
本设计中已经充分利用了该单片机的所有I/O口,且已能满足设计的要求,性价比高,组成了一个最小,最优化的系统。
现对P87LPC764BN这块芯片作如下介绍:
(1)概述:
P87LPC76x是20脚封装的单片机,适合于许多要求高集成度、低成本的场合。可以满足许多方面的性能要求。作为Philips小型封装系列中的一员,P87LPC76x提供高速和低速的晶振和RC振荡方式,可编程选择。具有较宽的操作电压范围。可编程I/O口线输出模式选择,可选择施密特触发输入,LED驱动输出。有内部看门狗定时器。P87LPC76x采用80C51加速处理器结构,指令执行速度是标准80C51 MCU的两倍。
P87LPC76x采用增强型80C51 MCU,其运行速度是标准80C51的2倍,这意味着P87LPC76x在5MHZ时性能和标准80C51采用10MHZ时性能相同。一个机器周期由6个振荡周期组成,大多数指令执行时间为6或12个振荡周期,用户亦可选择工作在标准80C51 MCU时序,这时一个机器周期变为12个振荡周期。 “MCU时钟”指控制内部指令执行的时钟。当系统被设置成为标准80C51时序(由CLKR位确定)或通过设定DIVM寄存器分频时,“MCU时钟”和外部所加时钟不同。
(2)特性:
操作频率为20MHz时,除乘法和除法指令外,加速80C51指令执行时间为300~600ns。VDD=4.5~6.0V时,时钟频率可高达到20MHz,VDD=2.7~4.5V时,时钟频率最大为10MHz。
VDD=4.5~6.0V(P87LPC765HDH) 数字信号的操作电压为2.7~6.0V。 P87LPC762为2K字节OTP程序存储器,P87LPC764为4K字节OTP程序存储器,128字节的RAM。32Byte用户代码区可用来存放序列码及设置参数。
2个16位定时/计数器,每一个均可设置为超时溢出时相应端口输出。
八个键盘中断输入,另加2路外部中断输入。4个中断优先级。
看门狗定时器利用片内振荡,无需外接元件,看门狗定时器溢出时间有8级选择。
低电平复位。使用片内上电复位时不需要外接元件。
低电压复位。可选择预先设定好的两种电压之一复位,当掉电时允许系统安全关闭。也可将其设置为一个中断源。
可选择片内振荡及其频率范围和RC振荡(用户通过对EPROM位编程选择)。选择RC振荡器时不需外接振荡器件。
如果选择片内振荡及复位时,P87LPC76x仅需要连接电源线和地线。
20脚DIP、SO和TSSOP封装。
管脚配置:
逻辑符号:
方框图:
(3)键盘中断(KBI):
键盘中断功能主要是使得连至P87LPC76x特殊脚的键盘上任一键被按下时能产生一个中断(见图12)。该中断可用于将MCU从空闲模式或掉电模式中唤醒。此特性尤其适合便携式且使用电池供电的系统。
P87LPC76x允许端口0的部分或全部引脚被使能触发中断,这是通过对KBI寄存器对应位置位完成的,如图13所示。当打开KBI中断功能后,任一被使能引脚被拉低都会将AUXR1寄存器内键盘中断标志(KBF)置位。如若中断允许则将产生一中断。注意KBF位必须由软件清除。
由于人对时间分辨精度及键开关闭合的机械延迟,KBI特性通常可用于中断服务程序轮流查询端口0以确定按下的是哪个键,甚至决定处理器从低功耗模式唤醒。参见低功耗模式部分。
本系统存储容量不大,4KROM,128RAM足够,由于只有二个键,且不经常操作,所以本设计中采用了中断方式,其中与P0.2口的键盘是用于手动上水功能,与P0.3口连接的键盘用于水位设置的功能。当产生键盘中断时,用软件判断按下的是哪个键,框图如下:
本设计中键盘中断要实现两个功能:水位设置和手动上水:
1) 其中水位设置键与P0.3口连接,具体功能叙述如下:
当水位不足情况下,未按下水位设置键时,默认预置水位为50%,在上水过程中,水位指示灯灭。
当按一下水位设置键时,80%水位指示灯亮,表明要上水到80%;
当按第二下水位设置键时,100%水位指使灯亮,表明要上水到100%;
当按第三下水位设置键时,20%水位指示灯亮,表明缺水时,要上水到20%;
当按第四下水位设置键时,预置水位又为50%,表明要上水到50%;
在具体的软件判别中,可通过查表P0.3是否置高电平来确认键盘有没按下,可用MOV A,P0;JNB ACC、3等几条指令来实现。通过对每一次的键盘按动进行加1记录,即当每次P0.3为高电平时,加一条INC R,指令,当R1为5时,又重新赋值为1,而后对R1的值进行判断,以确认水位设置键到底设置了哪个水位,框图如下:
2) 手动上水键与P0.2口连接,可用MOV A,P0;JNB ACC、2两条指令来
查看手动上水键有没被按下。
它的具体功能如下:按“上水”键,若水位低于预置水位,可上水至预置水位;若水位已达到预置水位,则在原水位的基础上再加一档;若水位已加满,则停止手动加水,在上水过程中,按“上水”键,可停止上水。
同水位设置键一样,当奇数次按下此键时,表示要上水,当偶数次按下此键时,表示停止上水,框图如下:
(4)振荡器:
P87LPC76x提供几种用户可选振荡器选项,允许根据需要从高精度至最低成本范围内选择。这些选项在EPROM编程时配置。支持的基本振荡器类型包括:低、中、及高速晶振,20KHz~20MHz,陶瓷振荡器及片内RC振荡器。
片内RC振荡器选项(RC)
片内RC振荡器典型频率为6MHz,可通过DIVM寄存器分频后获取较低频率。注意片内振荡器频 率有±25%误差,因此不适于某些场合使用。使用RC振荡器时X2/P2.0脚可用作标
准端口引脚。此时亦可选择X2/P2.0脚输出时钟。
时钟输出
P87LPC76x在选择片内RC振荡器或外部时钟输入时支持时钟输出功能。这使得外部器件可与P87LPC76x同步。对P2M1寄存器的ENCLK置位后, 无论是否处于空闲模式, 只要片内振荡器运行, X2/CLKOUT就有信号输出。输出时钟频率为MCU时钟频率的1/6。如果空闲模式时不需要时钟输出,可在进入空闲模式之前关闭输出以节省电能。选择外部时钟时亦可输出时钟。
振荡器必须设置为下列模式之一:
——低频晶振
——中频晶振
——高频晶振
为限制晶振驱动电平可串联电阻,对于低频晶振尤其重要。
振荡器须设置为外部时钟输入模式。将P2M1寄存器内CLK位置位可从X2脚输出时钟。
(5)复位:
P87LPC76x内部集成了上电复位电路,用于在器件上电时提供一个复位信号。建议使用内部复位以节省外部元件并可将P1.5作为通用的输入口使用。
P87LPC76x另外还可通过对用户配置寄存器UCFG1中的RPD位编程为0,将P1.5作为外部低有效复位管脚RST。此时内部复位在器件上电时仍然有效。当RST脚的信号为低电平时,P87LPC76x保持复位直到信号变为高电平。
看门狗定时器可用于检测振荡器是否正常工作,因为看门狗定时器使用的是独立的片内振荡器。对UCFG1的描述见本手册的“系统配置字节”一节。
将EPROM配置寄存器UCFG1内RPD位编程为1可关闭外部复位输入,即选择使用完全内部复位。
(6)定时器/计数器:
P87LPC76x有两个通用定时/计数器,与80C51定时器0及定时器1兼容。两者均可选择以计数器或定时器方式工作。另外增加了定时器溢出时T0与/或T1脚自动翻转的功能。
在用于定时器功能时,每个机器周期寄存器加1。所以可以视为计数机器周期。由于一个机器周期包含6个MCU时钟周期,所以计数频率为MCU时钟频率的1/6。有关MCU时钟参见增强MCU一节。
在用于计数器功能时,寄存器在T0或T1脚的每一个下降沿加1。此时,每一个机器周期对外部输入采样一次。当某一周期时引脚状态采样为高而下一周期采样为低,计数器加1。检测到跳变的下一周期寄存器更换新值。由于检测下降沿跳变需两个机器周期,所以计数频率最大值为MCU时钟频率的1/6。外部输入信号占空比并无限制,但必须保证信号在改变之前至少被采样一次,信号必须保持至少一个整的机器周期。
通过特殊功能寄存器TMOD内控制位C/T选择定时器或计数器功能。此外,定时器0及定时器1有4种工作模式,由TMOD内M1及M0选择,模式0、1、2对于定时器及计数器是一样的。模式3则不同。
(7)看门狗定时器:
看门狗定时器由一个完全独立的振荡器控制,以保证其最大限度的可靠性,它通过“WDTE”位启动。当看门狗功能被启动,定时装置必须定时得到软件的清除,以防止其溢出,对MCU复位,但是定时装置不能被关闭。当不作为看门狗定时器(通过UCFG1寄存器的WDTE位控制),它将作为一个内部定时器使用,且产生中断。看门狗定时器如图31所示。
看门狗溢出时间选择有8个数据,理论上时间跨度从16ms到2.1秒。独立的看门狗RC振荡器的频率误差±37%,溢出时间和其它的控制位如图32所示。当使能看门狗功能时,在芯片初始化时向WDCON写入数据以设定看门狗溢出时间。建议初始化WDCON时,先清看门狗,然后写“WDCON”配置的WDS2~0位。采用这种方式,能在10ms内完成设置,从而避免在初始化完成前看门狗溢出复位。
由于看门狗定时器振荡器是一个完全独立于MCU的片内振荡电路,它实质上执行的是内部振荡器失灵的检测功能。当看门狗功能被启动,无论MCU振荡器因何故失灵,看门狗定时器都会溢出使MCU复位。
当看门狗功能被启动,定时器会因由于其它原因造成芯片复位而暂时无效。如:电源复位、掉电复位或外部复位等。
(8)看门狗清“0”顺序:
如果看门狗定时器正在进行,必须在其溢出产生复位前清“0”,看门狗清“0”顺序包括:先写立即数1EH,再写0E1H到“WDRST”寄存器。下面是一个操作实例:
WDFeed:
MOV WDRST,#1EH
MOV WDRST,#0E1H
这两条写WDRST的命令不必是连续的两条指令。一个不正确的看门狗清“0”顺序不会引起看门狗定时器的任何即刻反应。只要此时间之前没有给它一个正确的清“0”,它仍然按最初设置的时间直到溢出。
发生芯片复位后,程序设计者清看门狗或改变溢出时间都有一定的限制时间。如果操作中使用低MCU时钟频率,那么在发生看门狗溢出之前能被执行的指令非常少。
(9)附加功能:
“AUXR1”寄存器由几个特别控制位组成,这些位另几种芯片功能相关。AUXR1在图33中详述。
4. 软件设计: 4.1 I/O口的说明:
P0.0~0.6分别用于输出7个字型码给显示器,同时,P0.0也作为缺水灯指示控制口,P0.1作为20%水位灯指示的控制口,P0.4作为50%水位灯指示的控制口,P0.5作为80%水位灯指示的控制口,P0.6作为100%水位灯指示的控制口。
P0.3口还作为水位设置的输入口,在软件中可查看该口的电平高低,以确认水位设置键是否被按下。
同理,P0.2口作为上水键的输入口,在软件中可查看该口的电平高低,以确认水位设置键是否被按下。
P1.0作为显示器显示温度值十位的位选,当P1.0=0时,显示器才能显示个位,否则 不显示。
P1.7作为水位灯显示的位选,P1.7为高电平时,不显示水位灯,P1.7为低电平时,水位灯才能显示。
P1.3口用于控制低水压上水指示灯,当系统正处于低水压上水时,低水压上水指示灯闪亮,即P1.3先处于高电平1s,再处于低1s,重复一段时间。
P1.6口用于控制蜂鸣器,当系统处于缺水状态或低水压上水时,蜂鸣器都会鸣叫,即让P1.6处于高电平1 s,低电平1s,重复一定时间,以实现蜂鸣。
P1.4口控制电磁阀,当系统需要上水或不上水时,即需通过软件使P1.4处于高低电平,将P1.4置1时,打开电磁阀上水,将P1.4清0时,关电磁阀。
P2.1及P2.0口用于外接晶振,为单片机提供工作所需的脉冲。
P1.2口是定时/计数器T0的接口,用于对温度传感器,通过环形振荡器产生的方波进行计数,以求通过软件来计算出所测温度值。
P0.7口用于定时/计数器T1的接口,水位传感器通过环形振荡器后,产生的方波的频率(或周期),即可由T1的计数,与T0的定时来求得。
4.2 系统存储器功能:
本设计中将温度传感器所测出的温度值的个位放入内部RAM 30H中,将十位放入内部RAM 31H中,将计数器T1读取的计数值放入50H中,在测水位时,将T0计数器读取的计数值存入60H中,经软件计算后,所得的用于衡量水位高度的频率值放入20H中。
查表程序中的数据表格,十六进制数字形代码表如下:
TABLE 00H TABLE 01H TABLE 02H . . . TABLE 0FH | 3FH | 0 1 2 . . . F |
06H |
5BH |
. . . |
71H |
4.3 水温水位显示主程序:
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INT0
ORG 0013H
AJMP INT1
ORG 0030H
MAIN: ACALL LOOP1 ; 调用显示水温子程序
ACALL DEL1 ; 延时子程序
SETB P1.0 ; 不显示温度(以下是水位程序)
SETB P1.1 ; 同上
CLR P1.7 ; 水位灯位选为0
MOV A,20H ; 将水位值送入(A)
CJNE A,#a,PB0
SETB P0.1
SJMP FH
PB0: JNC TD0 ; 如果f比a大,则转移,比a小是缺水状态
MOV R4,#05H
SETB P1.6 ; 蜂鸣器每3分钟叫一次
LP6: MOV R3,#5AH
LP5: MOV R7,#02H ;设置R7值
LP2: MOV R6,#0FAH ;设置R6值
LP1: SETB P1.0 ;十位显示器位选置1
SETB P1.1 ;个位显示器位选置1
CLR P1.7 ;水位显示位选清0
SETB P0.0 ;缺水指示灯亮
ACALL DEL1 ;调用1ms延时子程序
ACALL LOOP1 ; 调温度显示子程序
DJNZ R6,LP1
DJNZ R7,LP2
MOV R7,#04H
LP4: MOV R6,#0FAH
LP3: ACALL LOOP1;
DJNZ R6,LP3
DJNZ R7,LP4
DJNZ R3,LP5
CLR P1.6 ;关蜂鸣器
DJNZ LP6
MOV A,31H
RL A
ADD A,30H
CJNE A,#99,ZY ;温度值不等990C则转
ACALL SHSH
SJMP MAIN
ZY: JNC BSH;;温度超过990C不上水,小于990C上水
ACALL SHSH
SJMP MAIN ;调转主程序
BSH: CLR P1.4
SJMP MAIN
TD0: CJNE A,#b,TD1 ; 水位值没到50%则转
SETB P0.4 ;50%水位指示灯亮
SJMP FH
TD1: CJNE A,#c,TD2 ;水位值没到80%则转
SETB P0.5 ;80%水位指示灯亮
SJMP FH
TD2: CJNE A,#d,TD3
SETB P0.6
SJMP FH
PB: SETB P0.5
SJMP FH ;不缺水时水位指示灯显示子程序
以上为显示水位子程序
4.4 水温显示子程序:
ORG 0050H
LOOP1:MOV R0,#30H
MOV DPTR,#TABLE
CLR P1.1
SETB P1.7
SETB P1.0
ACALL LOOP2 ;先显示个位
ACALL DEL1
SETB P1.1
CLR P1.0
INC R0
ACALL LOOP2 ;再显示十位
RET
ORG 0070H
LOOP2: MOV A,@R0 ;查表子程序
MOVC A,@A DPTR
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
DB 77H,7CH,39H,5EH,79H
DB 71H,00H
MOV P0,A
RET
ORG 0090H
DEL1: MOV R6,#0F9H ;1ms延时子程序
LOOP3: DJNZ R6,LOOP3
RET
FH: MOV A,31H
RL A
ADD A,30H
CJNE A,#60H,PD0
SJMP MAIN
ZP0: MOV A,20H
CJNE A,#d SH0 ;水位小于100%则上水至500C
SJMP MAIN
SH0: MOV R3,#09H
ZL2: MOV R7,#OFFH
ZL1: MOV R6,#OFFH
ZL0: SETB P1.4
ACALL DEL1 ;1ms
ACALL LOOP1 ;1ms调水温显示
ACALL DEL1 ;1ms
SETB P1.0
SETB P1.1
CLR P1.7
ACALL TD0 ;调水位显示
MOV A,31H
RL A
ADD A,30H
CJNE A,#50H,JXX ;30分钟内有没上水到500C,若没转移
CLR P1.4
SJMP MAIN
JXX: DJNZ R6,ZL0
DJNZ R7,ZL1
DJNZ R3,ZL2
CJNE A,#50H
CLR P1.4
SJMP MAIN
ZZH: ACALL DSH ;调低水压上水
SJMP SH0
4.5 T1中断服务程序:
ORG 0100H
INT1: CLR TR0
PUSH ACC
MOV A,TH0
CJNE A,61H,ZHYD2
MOV A,TL0 ;读低八位
CJNE A,50H ;比较低八位
SJMP ZHYD3 ;T0值没有变化转移ZHYD程序
ZHYD2:MOV A,TH0 ;存放高八位
MOV 61H,A
MOV A,TL0
MOV 60H,A ;存放低八位
MOV 20H,#H ; 把所测水位值放入20H中
ZHYD3:MOV TMOD,#51H ;设置T0定时,T1计数并采用方式2
MOV TH0,#00H
MOV TL0,#00H
MOV TH1,#00H
MOV TL1,#00H
SETB TR0 ;启动T0
SETB TR1 ;启动T1
POP ACC
RET
4.6 T0中断服务程序:
ORG 0200H
INT0: CLR TR1
MOV SP,#30H
PUSH ACC
MOV A,TH1 ;读高八位
CJNE A,51H,ZHYD0 ;高八位不等,则两数不等转移
MOV A, TL1 ;读低八位
CJNE A,50H ;比较低八位
SJMP ZHDY1 ;相等则转移
ZHYD0:MOV A,TH1 ;放入高八位
MOV 51H,A
MOV A,TL0 ;放入低八位
MOV 50H,A
LOOP: MOV B,#XXH
MUL AB
MOV A,#YYH
CLR C
SUBB A,B
CJNE A,#6AH ;看下所测温度有没超1000C
LOOP1:JNC LOOP2 ;低于1000C顺序执行,高于1000C转移
MOV R0,#00H
CLR C
CHAN2:SUBB A,#0AH ;减10
JC CHAN3 ;不够减转移
INC R0 ;够减,十位数加1
SJMP CHAN2 ;重复减10
CHIN3: ADD A,#0AH
MOV 31H,R0 ;BCD码十位送显缓
MOV 30H,A ;BCD码个位送显缓
ZHYD1:MOV TMOD,#15H ;设置T1定时,T0计数并采用方式1
MOV TH0,#00H ;送初值
MOV TL0,#00H
MOV TH1,#00H
MOV TL1,#00H
SETB TR0 ;开启T0计数
SETB TR1 ;开启T1定时
SJMP LOOP3
LOOP2:MOV 30H,0FH
MOV 31H,0FH
ACALL LOOP1 ;显示温度
LOOP3:POP ACC
RETI
4.7 水位设置及缺水上水至预置水位的程序:
ORG 0300H
SHSH: MOV R1,#00H
MOV AUXR1,#00H ;先将置位端KBF清 0
MOV KBI,#0CH ;允许.P0.3,P0.2口中断
SETB EKB ;使能触发
MOV A,P0
ORL A,#0CH ;将P0.2,P0.3位先置高,其它位不变
MOV P0,A
MOV A,P0
JNB ACC.3,KEY ;P0.3为0,即键被按下
ACALL SH50 ;未被按下,预置水位为50%
SJMP FHZ
KEY3: INC R1
MOV AUXR1,#00H
CJNE R1,#05H,BJ1
MOV R1,#01H
ACALL SH80
SJMP FHZ
BJ1: CJNE R1,#01H,BJ2
ACALL SH80
SJMP FHZ
BJ3: CJNE R1,#03H,ZHD
ACALL SH20
SJMP FHZ
ZHD: ACALL SH50
FHZ: RETI
4.8 上水及低水压上水子程序:
ORG 0400H
SH50: MOV R4,#09H
JX3: MOV R3,#6AH
JX2: MOV R7,#04H
JX1: MOV R6,#0FAH
JX0: SETB P1.0
SETB P1.1
SETB P1.7
SETB P0.4
SETB P1.4 ;开电磁阀
ACALL DEL1 ;1ms
MOV A,20H
CJNE A,#b,JX
SETB P1.3
CLR P1.4 ;上水完毕关电磁阀
SJMP FHD
JX: DJNZ R6,JX0
DJNZ R7,JX1
DJNZ R3,JX2
DJNZ R4,JX3
MOV A,20H
CJNE A,#b,CY ;采用低水压上水
SETB P1.3
CLR P1.4
SJMP FHD
CY: ACALL DSH
SJMP SH50
FHD: RET
ORG 0500H
SH80: MOV R4,#09H
JX3: MOV R3,#6AH
JX2: MOV R7,#04H
JX1: MOV R6,#0FAH
JX0: SETB P1.0
SETB P1.1
CLR P1.7
SETB P0.5
SETB P1.4 ;开电磁阀
ACALL DEL1 ;1ms
MOV A,20H
CJNE A,#c,JX
SETB P1.3
CLR P1.4 ;上水完毕关电磁阀
SJMP FHD1
JX: DJNZ R6,JX0
DJNZ R7,JX1
DJNZ R3,JX2
DJNZ R4,JX3
MOV A,20H
CJNE A,#a,CY ;采用低水压上水
CY: ACALL SDH
SJMP SH80
FHD: RET
ORG 0600H
SH20: MOV R4,#09H
JX3: MOV R3,#6AH
JX2: MOV R7,#04H
JX1: MOV R6,#0FAH
JX0: SETB P1.0 ;位选置1,不显示十位
SETB P1.1 ;不显示个位
CLR P1.7 ;显示水位灯
SETB P0.1 ;20%水位灯亮
SETB P1.4 ;开电磁阀
ACALL DEL1
ACALL LOOP1
MOV A,20H
CJNE A,#a,JX
SETB P1.3
CLR P1.4
SJMP FHD
JX: DJNZ R6,JX0
DJNZ R7,JX1
DJNZ R3,JX2
DJNZ R4,JX3
MOV A,20H
CJNE A,#a ,CYD
SETB P1.3
CLR P1.4
SJMP FHD
CYD: ACALL DSH
SJMP SH20
FHD; RET
ORG 0700H
SH100: MOV R4,#09H
JX3: MOV R3,#6AH
JX2: MOV R7,#04H
JX1: MOV R6,#0FAH
JX0: SETB P1.0 ;位选置1,不显示十位
SETB P1.1 ;不显示个位
CLR P1.7 ;显示水位灯
SETB P0.1 ;20%水位灯亮
SETB P1.4 ;开电磁阀
ACALL DEL1
ACALL LOOP1
MOV A,20H
CJNE A,#a, CYD
SETB P1.3
CLR P1.4
SJMP FHD
CYD: ACALL DSH
SJMP SH20
FHD: RET