基于单片机的饮水机
四年级 记叙文 12320字 433人浏览 落泪情絮零碎

基于单片机控制的饮水机设计

侯昭广 (容县职业中等专业学校,广西容县 537500)

2009-9-14

摘要:为了避免饮水机的开水有反复烧开的二次污染、冷开水混合、开水容器不容易清洗等问题,该设计利用水位传感器和AT89C52单片机芯片对水量进行智能控制,为了对开水容器方便打开清洗采用活动盖式,并设置有自动断电和防干烧功能。饮用该种饮水机的水更为安全和卫生。经反复试验证明加水控制、自动断电、防干烧功能的效果和细菌杀灭率都很好。 关键词:单片机控制;水位传感器;AT89C52单片机芯片;活动盖;饮水机设计

中图分类号:TU991 文献标识码:A 文章编号:1009-2374(2009)19-0031-02

医学专家已证实人们长期饮用二次污染和含氧化镉的开水对人体健康有害。普通饮水机是难以避免的。因此,设计出开与生水完全隔离,防止没有取出的开水冷后再反复再烧,下一次饮的水可能是重烧的二次污染的水,喝这样的水对人的健康是有害的。另外,以往的饮水机用来装加热水的容器是连体密闭的,内部很不利于清洗,时间长了,水有沉污物,电热管有氧化镉,饮用这样的水也是有害健康的。因此,该设计的饮水机对加热器不但方便清洗,而且采用开、冷水彻底隔离法,保证饮用水安全和卫生。

一、硬件组成

本设计基于AT89C52单片机芯片控制饮水机,在储水容器与加热容器之间设置有进水电磁阀控制,进水电磁阀门接12V 电压,开启时间由AT89C52单片机按照用户实际需求控制。开水容器到达预定水位后,水位传感器把信息送给AT89C52单片机芯片P11~P17端输入,经内部逻辑运算后从P30输出接通加热开关,使加热器获得220V 电压加热,开水容器的水温不断上升,当达到100℃后它立即断电,表示加热结束,指示灯由红色变为绿色。单片机控制饮水机硬件是由储水容器﹑进水电磁阀、开水容器、加热开关、加热容器﹑温度传感器、水位传感器、AT89C52单片机芯片﹑12V 与5V 稳压电源、指示灯、手动出水阀、水杯平台和机体等组成。饮水机控制系统硬件组成框图如图1所示:

图1 智能控制饮水机组成框图

二、水位传感器的设计

(一)水位传感器的设计

水位传感器有接触型和非接触型之分。由于该饮水机的水位测定的环境温度较高(100℃),如果采用接触型的水位传感器对测量的器件寿命和准确度都受影响。所以,本设计采用非接触型水位传感器,其工作原理为:根据连通器原理在小管内安装一个浮标,浮标上端连接一个V 型反射镜,红外激光二极管发出激光光束垂直射到V 型反射镜面上进行90°角变换,光束分别对应地射到光敏二极管D1~D7上,有光束射到光敏二极管导通,输出为高电平(2.4V ),相反的为低电平(0V )。该电压加到AT89C52单片机芯用接触型的水位传感器对测量的器件寿命和准确度都产生影响。所以,本设计采用非接触型水位传感器,其中用接触型的水位传感器对测量的器件寿命和准确度都受影响。所以,本设计采用非接触型水位传感器,其工作原理为:根据连通器原理在小管内安装一个浮标,浮标上端连接一个V 型反射镜,红外激光二极管发出激光光束垂直射到V 型反射镜面上进行90°角变换,光束分别对应地射到光敏二极管D1~D7上,有光束射到光敏二极管导通,输出为高电平(2.4V ),相反的为低电平(0V )。该电压加到AT89C52单片机芯片P11~P17端输入,水位传感器电路如图2所示:

图2 光反射式水位高度测定电路原理图

(二)键盘阵列电路

键盘阵列S1~S7为用户所需开水量的地址码按键。当选择S1~S7中的某一按键按下,信号从P10~P16端加入AT89C52单片机芯片内进行寻址,于是把原来存储在AT89C52单片机芯片寄存器的存储一单元上的对应数据调出。从I/O端口P22输出加水信号,键盘阵列电路如图3所示:

图3 开水量确定电路原理图

(三)加水控制电路工作原理

当用户需要烧开水时,只在键盘上选择一个相应数字键按下,从AT89C52单片机芯片的P10~P15端输入一个地址码(001)、(010)、„、(111),根据地址码由P22端输出高电平(1.4V ),

经R11和R12分压后使Q1三极管基极(电压约为0.7V )为高电平而导通,使集电极有电流通过,加水开关闭合,开始对开水容器加水。加水量单片机内按下式确定:

(1)

其中,D1、D2、„、D7为水位传感器对应刻度值,A0、A1、A2为用户所需开水量的对应码。由(1)式可知加水量控制是由水位传感器和地址码共同决定的。当满足(1)式后AT89C52单片机芯片I/O端口的P22由高电平输出变为为低电平(0.3V )输出,此时三极管Q1的基极电压约为0.1V ,Q1截止,集电极没有电流通过,加水开关断,加水结束`。加水控制电路原理如图4所示:

(四)加热控制工作原理

由于为了快速烧水,把开水容器水位达到1位置设定开始加热信存储于AT89C52单片机芯片的存储器2单元内,当加水时水位达到1位置,存储器获得地址码,AT89C52单片机芯片P12(PW11)端输出高电平,温度低于100℃热敏电阻R 的阻值较小,烧水控制电路中的Q2基极获得0.7V 电压而导通,加热开关K2闭合给水开始加热,当开水容器中的水温达到100℃时的热敏电阻R 的阻值突然变大,Q2基极电压只有0.2V 左右,Q2截止,加热开关K2断电,加热结束。给水加热电路如图5所示:

图5 加热电路原理图

(五)指示电路

为了节约成本该饮水机的指示器件均采用发光二极管进行显示,加水时由图3可知黄色指示灯DL1亮,加热时由图4可知红色指示灯DL2亮;开水容器有温水绿色指示灯亮。

(六)饮水机控制程序图

饮水机控制程序,如图6所示:

图6 饮水机控制程序图

三、实验

为了检验本设计的优劣,对本设计的饮水机进行对加水时间、水位测定误差、加热时间和跳闸温度测量。测量时用天平每杯水质量为157克,测量时间用秒表,水位用刻度尺,加热盘功率1200W ,工业温度计测得数据见表2:

表2 测量数据表

但连通管用圆形管进水电磁阀的开启和关闭时间误差明显增加。

四、结语

从实验数据看,本设计的计算机控制饮水机在水位传感器水位测定、进水电磁阀开启和关闭、断电跳闸温度的误差都在正常值之内。连通管用方形管,这样浮标面上的V 型反射镜的角度能够固定。本设计的计算机控制饮水机采用控制加水系统,完全避免了开水二次污染;开水容器的盖是活动的很方便清洗,保证了饮用水的质量和卫生。文中设计的水位传感器也可

以用于其它测量液面的地方。该系统经少量改装可应用于工厂、学校的开水柜自动控制。

参考文献

[1]王庆元.新型传感器原理及应用[M].北京:机械工业出版社,2003.

[2]张福学.传感器应用及其电路精选(上册)[M].北京:电子工业出版社,1991.

[3]母国光,战元令.光学[M].北京:高等教育出版社,1978.

[4]朱一锟. 流体力学基础[M].北京:北京航空航天大学出版社,1990.

[5]杨经国,冉瑞江,等.光电子技术[M].成都:四川大学出版社,1990.

[5]刘华东,张亚华.单片机原理与应用(第二版)[M].北京:电子工业出版社,2006.

[6]杨金岩,郑应强,张振仁.8051单片机数据传输接口扩展技术与应用实例[M].北京:人民邮电出版社,2004.

作者简介:侯昭广(1950-),男,广西容县人,广西容县职业中等专业学校一级教师,研究方向:低压电路理论与应用。

AT89C52是51系列单片机的一个型号,它是ATMEL 公司生产的。

AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash 只读程序存储器和256 bytes 的随机存取数据存储器(RAM ),器件采用ATMEL 公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash 存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。

AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash 存储器结合在一起,特别是可反复擦写的Flash 存储器可有效地降低开发成本。

AT89C52有PDIP 、PQFP/TQFP及PLCC 等三种封装形式,以适应不同产品的需求。 主要功能特性:

²兼容MCS51指令系统² 8k 可反复擦写(>1000次)Flash ROM

² 32个双向I/O口² 256x8bit 内部RAM

² 3个16位可编程定时/计数器中断²时钟频率0-24MHz

² 2个串行中断²可编程UART 串行通道

² 2个外部中断源²共6个中断源

² 2个读写中断口线² 3级加密位

²低功耗空闲和掉电模式²软件设置睡眠和唤醒功能

AT89C52各引脚功能及管脚电压

概述:AT89C52P 为40 脚双列直插封装的8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM 及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR 的接收解码及与主板CPU 通信等。主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)

为复位输入端口,外接电阻电容组成的复位电路。VCC (40 脚)和VSS (20 脚)为供电端口,分别接+5V电源的正负端。P0~P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(32~39 脚)被定义为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为IR 输入端,10 脚和11脚定义为I2C 总线控制端口,分别连接N1的SDAS (18脚)和SCLS (19脚)端口,12 脚、27 脚及28 脚定义为握手信号功能端口,连接主板CPU 的相应功能端,用于当前制式的检测

及会聚调整状态进入的控制功能。

²P0 口:P0 口是一组8 位漏极开路型双向I/O 口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的

方式驱动8 个TTL 逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用。 在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上

拉电阻。

在Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

²P1 口:P1 是一个带内部上拉电阻的8 位双向I/O 口, P1 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑

门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉

电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

与AT89C51 不同之处是,P1.0 和P1.1 还可分别作为定时/计数器2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),

参见表1。

Flash 编程和程序校验期间,P1 接收低8 位地址。

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

引脚号

功能特性

P1.0

T2,时钟输出

P1.1

T2EX (定时/计数器2)

²P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑

门电路。对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,

作输入口使用时,因为内部存在

上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

在访问外部程序存储器或16 位地址的外部数据存储器(例如执行MOVX @DPTR 指令)时,P2 口送出高8 位地址数

据。在访问8 位地址的外部数据存储器(如执行MOVX @RI 指令)时,P2 口输出P2 锁存器的内容。

Flash 编程或校验时,P2亦接收高位地址和一些控制信号。

²P3 口:P3 口是一组带有内部上拉电阻的8 位双向I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻

辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3 口将用上拉电阻

输出电流(IIL )。

P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能

P3 口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号。

²RST :复位输入。当振荡器工作时,RST 引脚出现两个机器周期以上高电平将使单片机复位。

²ALE/PROG:当访问外部程序存储器或数据存储器时,ALE (地址锁存允许)输出脉冲用于锁存地址的低8 位字

节。一般情况下,ALE 仍以时钟振荡频率的1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的

是:每当访问外部数据存储器时将跳过一个ALE 脉冲。

对Flash 存储器编程期间,该引脚还用于输入编程脉冲(PROG )。

如有必要,可通过对特殊功能寄存器(SFR )区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条

MOVX 和MOVC 指令才能将ALE 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE 禁止位无效。

²PSEN :程序储存允许(PSEN )输出是外部程序存储器的读选通信号,当AT89C52 由外部程序存储器取指令(或数

据)时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN 信号。

²EA/VPP:外部访问允许。欲使CPU 仅访问外部程序存储器(地址为0000H —FFFFH ),EA 端必须保持低电平(接

地)。需注意的是:如果加密位LB1 被编程,复位时内部会锁存EA 端状态。 如EA 端为高电平(接Vcc 端),CPU 则执行内部程序存储器中的指令。

Flash 存储器编程时,该引脚加上+12V 的编程允许电源Vpp ,当然这必须是该器件是使用12V 编程电压Vpp 。

²XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。

²XTAL2:振荡器反相放大器的输出端。

²特殊功能寄存器:

在AT89C52 片内存储器中,80H-FFH 共128 个单元为特殊功能寄存器(SFE ),SFR 的地址空间映象如表2 所示。

并非所有的地址都被定义,从80H —FFH 共128 个字节只有一部分被定义,还有相当一部分没有定义。对没有定义的

单元读写将是无效的,读出的数值将不确定,而写入的数据也将丢失。

不应将数据“1”写入未定义的单元,由于这些单元在将来的产品中可能赋予新的功能,在这种情况下,复位后这些单

元数值总是“0”。

AT89C52除了与AT89C51所有的定时/计数器0 和定时/计数器1 外,还增加了一个定时/计数器2。定时/计数器2 的控

制和状态位位于T2CON (参见表3)T2MOD (参见表4),寄存器对(RCAO2H 、RCAP2L )是定时器2 在16 位捕获方式或16 位

自动重装载方式下的捕获/自动重装载寄存器。

²数据存储器:

AT89C52 有256 个字节的内部RAM ,80H-FFH 高128 个字节与特殊功能寄存器(SFR )地址是重叠的,也就是高128

字节的RAM 和特殊功能寄存器的地址是相同的,但物理上它们是分开的。

当一条指令访问7FH 以上的内部地址单元时,指令中使用的寻址方式是不同的,也即寻址方式决定是访问高128 字节

RAM 还是访问特殊功能寄存器。如果指令是直接寻址方式则为访问特殊功能寄存器。 例如,下面的直接寻址指令访问特殊功能寄存器0A0H (即P2 口)地址单元。 MOV 0A0H,#data

间接寻址指令访问高128 字节RAM ,例如,下面的间接寻址指令中,R0 的内容为0A0H ,则访问数据字节地址为0A0H ,

而不是P2 口(0A0H )。

MOV @R0,#data

堆栈操作也是间接寻址方式,所以,高128 位数据RAM 亦可作为堆栈区使用。 ²定时器0和定时器1:

AT89C52的定时器0和定时器1 的工作方式与AT89C51 相同。

²定时器2:

定时器2 是一个16 位定时/计数器。它既可当定时器使用,也可作为外部事件计数器使用,其工作方式由特殊功能寄

存器T2CON (如表3)的C/T2 位选择。定时器2 有三种工作方式:捕获方式,自动重装载(向上或向下计数)方式和波

特率发生器方式,工作方式由T2CON 的控制位来选择。

定时器2 由两个8 位寄存器TH2 和TL2 组成,在定时器工作方式中,每个机器周期TL2 寄存器的值加1,由于一个机

器周期由12 个振荡时钟构成,因此,计数速率为振荡频率的1/12。

在计数工作方式时,当T2 引脚上外部输入信号产生由1 至0 的下降沿时,寄存器的值加1,在这种工作方式下,每个

机器周期的5SP2 期间,对外部输入进行采样。若在第一个机器周期中采到的值为1,而在下一个机器周期中采到的值为0,

则在紧跟着的下一个周期的S3P1 期间寄存器加1。由于识别1 至0 的跳变需要2 个机器周期(24 个振荡周期),因此,最

高计数速率为振荡频率的1/24。为确保采样的正确性,要求输入的电平在变化前至少保持一个完整周期的时间,以保证输

入信号至少被采样一次。

²捕获方式:

在捕获方式下,通过T2CON 控制位EXEN2 来选择两种方式。如果EXEN2=0,定时器2

是一个16 位定时器或计数器,

计数溢出时,对T2CON 的溢出标志TF2 置位,同时激活中断。如果EXEN2=1,定时器2 完成相同的操作,而当T2EX 引

脚外部输入信号发生1 至0 负跳变时,也出现TH2 和TL2 中的值分别被捕获到RCAP2H 和RCAP2L 中。另外,T2EX 引

脚信号的跳变使得T2CON 中的EXF2 置位,与TF2 相仿,EXF2 也会激活中断。捕获方式如图4 所示。

²自动重装载(向上或向下计数器)方式:

当定时器2工作于16位自动重装载方式时,能对其编程为向上或向下计数方式,这个功能可通过特殊功能寄存器T2CON

(见表5)的DCEN 位(允许向下计数)来选择的。复位时,DCEN 位置“0”,定时器2 默认设置为向上计数。当DCEN

置位时,定时器2 既可向上计数也可向下计数,这取决于T2EX 引脚的值,参见图5,当DCEN=0 时,定时器2 自动设置

为向上计数,在这种方式下,T2CON 中的EXEN2 控制位有两种选择,若EXEN2=0,定时器2 为向上计数至0FFFFH 溢

出,置位TF2 激活中断,同时把16 位计数寄存器RCAP2H 和RCAP2L 重装载,RCAP2H 和RCAP2L 的值可由软件预置。

若EXEN2=1,定时器2 的16 位重装载由溢出或外部输入端T2EX 从1 至0 的下降沿触发。这个脉冲使EXF2 置位,如果

中断允许,同样产生中断。

定时器2 的中断入口地址是:002BH ——0032H 。

当DCEN=1 时,允许定时器2 向上或向下计数,如图6 所示。这种方式下,T2EX 引脚控制计数器方向。T2EX 引脚为逻

辑“1”时,定时器向上计数,当计数0FFFFH 向上溢出时,置位TF2,同时把16 位计数寄存器RCAP2H 和RCAP2L 重装

载到TH2 和TL2 中。 T2EX 引脚为逻辑“0”时,定时器2 向下计数,当TH2 和TL2 中的数值等于RCAP2H 和RCAP2L

中的值时,计数溢出,置位TF2,同时将0FFFFH 数值重新装入定时寄存器中。 当定时/计数器2 向上溢出或向下溢出时,置位EXF2 位。

²波特率发生器:

当T2CON (表3)中的TCLK 和RCLK 置位时,定时/计数器2 作为波特率发生器使用。如果定时/计数器2 作为发送器或

接收器,其发送和接收的波特率可以是不同的,定时器1 用于其它功能,如图7 所示。若RCLK 和TCLK 置位,则定时器2

工作于波特率发生器方式。

波特率发生器的方式与自动重装载方式相仿,在此方式下,TH2 翻转使定时器2 的寄存器用RCAP2H 和RCAP2L 中的16

位数值重新装载,该数值由软件设置。

在方式1 和方式3 中,波特率由定时器2 的溢出速率根据下式确定:

方式1和3的波特率=定时器的溢出率/16

定时器既能工作于定时方式也能工作于计数方式,在大多数的应用中,是工作在定时方式(C/T2=0)。定时器2 作为波

特率发生器时,与作为定时器的操作是不同的,通常作为定时器时,在每个机器周期

(1/12 振荡频率)寄存器的值加1,

而作为波特率发生器使用时,在每个状态时间(1/2 振荡频率)寄存器的值加1。波特率的计算公式如下:

方式1和3的波特率=振荡频率/{32*[65536-(RCP2H,RCP2L)]}

式中(RCAP2H ,RCAP2L )是RCAP2H 和RCAP2L 中的16 位无符号数。

定时器2 作为波特率发生器使用的电路如图7 所示。T2CON 中的RCLK 或TCLK=1 时,波特率工作方式才有效。在

波特率发生器工作方式中,TH2 翻转不能使TF2 置位,故而不产生中断。但若EXEN2 置位,且T2EX 端产生由1 至0 的

负跳变,则会使EXF2 置位,此时并不能将(RCAP2H ,RCAP2L )的内容重新装入TH2 和TL2 中。所以,当定时器2 作

为波特率发生器使用时,T2EX 可作为附加的外部中断源来使用。需要注意的是,当定时器2 工作于波特率器时,作为定

时器运行(TR2=1)时,并不能访问TH2 和TL2。因为此时每个状态时间定时器都会加1,对其读写将得到一个不确定的

数值。

然而,对RCAP2 则可读而不可写,因为写入操作将是重新装载,写入操作可能令写和/或重装载出错。在访问定时器2

或RCAP2 寄存器之前,应将定时器关闭(清除TR2)。

²可编程时钟输出:

定时器2 可通过编程从P1.0 输出一个占空比为50%的时钟信号,如图8 所示。P1.0 引脚除了是一个标准的I/O 口外,

还可以通过编程使其作为定时/计数器2 的外部时钟输入和输出占空比50%的时钟脉冲。当时钟振荡频率为16MHz 时,输

出时钟频率范围为61Hz —4MHz 。

当设置定时/计数器2 为时钟发生器时,C/T2(T2CON .1)=0,T2OE (T2MOD.1) =1,必须由TR2(T2CON.2)启

动或停止定时器。时钟输出频率取决于振荡频率和定时器2 捕获寄存器(RCAP2H ,RCAP2L )的重新装载值,公式如下:

输出时钟频率=振荡器频率/{4*[65536-(RCP2H,RCP2L)]}

在时钟输出方式下,定时器2 的翻转不会产生中断,这个特性与作为波特率发生器使用时相仿。定时器2 作为波特率

发生器使用时,还可作为时钟发生器使用,但需要注意的是波特率和时钟输出频率不能分开确定,这是因为它们同使用

RCAP2L 和RCAP2L 。

²UART :

AT89C52的UART 工作方式与AT89C51 工作方式相同。

²中断:

AT89C52 共有6 个中断向量:两个外中断(INT0 和INT1),3 个定时器中断(定时器0、1、2)和串行口中断。所有

这些中断源如图9 所示。

这些中断源可通过分别设置专用寄存器IE 的置位或清0 来控制每一个中断的允许或禁止。IE 也有一个总禁止位EA ,

它能控制所有中断的允许或禁止。

注意表5 中的IE.6 为保留位,在AT89C51 中IE.5 也是保留位。程序员不应将“1”写入这些位,它们是将来AT89 系

列产品作为扩展用的。

定时器2 的中断是由T2CON 中的TF2 和EXF2 逻辑或产生的,当转向中断服务程序时,这些标志位不能被硬件清除,

事实上,服务程序需确定是TF2 或EXF2 产生中断,而由软件清除中断标志位。

定时器0 和定时器1 的标志位TF0 和TF1 在定时器溢出那个机器周期的S5P2 状态置位,而会在下一个机器周期才查

询到该中断标志。然而,定时器2 的标志位TF2 在定时器溢出的那个机器周期的S2P2 状态置位,并在同一个机器周期内

查询到该标志。

²时钟振荡器:

AT89C52 中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1 和XTAL2 分别是该放大器的输入端和输出端。

这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路参见图10。

外接石英晶体(或陶瓷谐振器)及电容C1、C2 接在放大器的反馈回路中构成并联振荡电路。对外接电容C1、C2 虽

然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳

定性,如果使用石英晶体,我们推荐电容使用30pF ±10pF ,而如使用陶瓷谐振器建议选择40pF ±10F 。

用户也可以采用外部时钟。采用外部时钟的电路如图10 右图所示。这种情况下,外部时钟脉冲接到XTAL1 端,即内部

时钟发生器的输入端,XTAL2 则悬空。

由于外部时钟信号是通过一个2 分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但

最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。 ²空闲节电模式:

在空闲工作模式状态, CPU 自身处于睡眠状态而所有片内的外设仍保持激活状态,这种方式由软件产生。此时,同

时将片内RAM 和所有特殊功能寄存器的内容冻结。空闲模式可由任何允许的中断请求或硬件复位终止。

由硬件复位终止空闲状态只需两个机器周期有效复位信号,在此状态下,片内硬件禁止访问内部RAM ,但可以访问端

口引脚,当用复位终止空闲方式时,为避免可能对端口产生意外写入,激活空闲模式的那条指令后一条指令不应是一条对

端口或外部存储器的写入指令。

²掉电模式:

在掉电模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的指令,片内RAM 和特殊功能寄存器的内

容在终止掉电模式前被冻结。退出掉电模式的唯一方法是硬件复位,复位后将重新定义全部特殊功能寄存器,但不改变RAM

中的内容,在Vcc 恢复到正常工作电平前,复位应无效,且必须保持一定时间以使振荡

器重启动并稳定工作。

²程序存储器的加密:

AT89C52 有3 个程序加密位,可对芯片上的3 个加密位LB1、LB2、LB3 进行编程(P )或不编程(U )来得到。

当加密位LB1 被编程时,在复位期间,EA 端的逻辑电平被采样并锁存,如果单片机上电后一直没有复位,则锁存起的

初始值是一个随机数,且这个随机数会一直保存到真正复位为止。为使单片机能正常工作,被锁存的EA 电平值必须与该引

脚当前的逻辑电平一致。此外,加密位只能通过整片擦除的方法清除。

²Flash 存储器的编程:

AT89C52单片机内部有8k 字节的Flash PEROM,这个Flash 存储阵列出厂时已处于擦除状态(即所有存储单元的内容

均为FFH ),用户随时可对其进行编程。编程接口可接收高电压(+12V)或低电压(Vcc )的允许编程信号。低电压编程模

式适合于用户在线编程系统,而高电压编程模式可与通用EPROM 编程器兼容。

AT89C52 单片机中,有些属于低电压编程方式,而有些则是高电压编程方式,用户可从芯片上的型号和读取芯片内的

签名字节获得该信息。

AT89C52 的程序存储器阵列是采用字节写入方式编程的,每次写入一个字节,要对整个芯片内的PEROM 程序存储器

写入一个非空字节,必须使用片擦除的方式将整个存储器的内容清除。

²编程方法:

编程前,须按表9 和图11 所示设置好地址、数据及控制信号, AT89C52 编程方法如下:

1.在地址线上加上要编程单元的地址信号。

2.在数据线上加上要写入的数据字节。

3.激活相应的控制信号。

4.在高电压编程方式时,将EA/Vpp 端加上+12V 编程电压。

5.每对Flash 存储阵列写入一个字节或每写入一个程序加密位,加上一个ALE/PROG 编程脉冲。每个字节写入周期

是自身定时的,通常约为1.5ms 。重复1—5 步骤,改变编程单元的地址和写入的数据,直到全部文件编程结束。

²数据查询:

AT89C52 单片机用Data Palling 表示一个写周期结束为特征,在一个写周期中,如需读取最后写入的一个字节,则读

出的数据的最高位(P0.7)是原来写入字节最高位的反码。写周期完成后,所输出的数据是有效的数据,即可进入下一个

字节的写周期,写周期开始后,Data Palling 可能随时有效。

²Ready/Busy:字节编程的进度可通过“RDY/BSY 输出信号监测,编程期间,ALE 变为高电平“H ”后,P3.4(RDY/BSY)

端电平被拉低,表示正在编程状态(忙状态)。编程完成后,P3.4 变为高电平表示准备就绪状态。

²程序校验:如果加密位LB1、LB2 没有进行编程,则代码数据可通过地址和数据线读回原编写的数据,采用如图12

的电路。加密位不可直接校验,加密位的校验可通过对存储器的校验和写入状态来验证。 ²芯片擦除:利用控制信号的正确组合(表6)并保持ALE/PROG 引脚10mS 的低电平脉冲宽度即可将PEROM 阵列

(4k 字节)和三个加密位整片擦除,代码阵列在片擦除操作中将任何非空单元写入“1”,这步骤需再编程之前进行。

²读片内签名字节:AT89C52 单片机内有3 个签名字节,地址为030H 、031H 和032H 。用于声明该器件的厂商、型

号和编程电压。读AT89C52 签名字节需将P3.6 和P3.7 置逻辑低电平,读签名字节的过程和单元030H 、031H 及032H 的

正常校验相仿,只返回值意义如下:

(030H )=1EH 声明产品由ATMEL 公司制造。

(031H )=52H 声明为AT89C52 单片机。

(032H )=FFH 声明为12V 编程电压。