1、 编号 淮安信息职业技术学院毕 业 论 文多 段 定 时 控 制 在 养 鸡 场 的应 用学生姓名: 曹 慧 学 号: 15077014 系 部: 电子工程系 专 业: 应用电子 班 级: 150770 指导教师: 刁志刚 顾问教师: 二一年六月摘 要当今科学技术快速发展,人们的生活变得多姿多彩,然而日常生活有很多重复烦躁的事情需要我们去解决,为了提高我们的工作效率,因此我们设计一个定时控制系统来自动完成这些工作,减少人们的负担,于是老师在单片机理论课程学习的基础上,为我们安排了一个涉及 MCS51 单片机多种资源应用及具有综合功能的单片机定时控制系统设计。关键词: 显示时间 定时 复位电路
2、时钟电路 驱动目 录摘 要 I第一章 绪论 .11.1 研究课题的背景 11.2 相关开发技术 2第二章 对系统要求的分析 .32.1 多段定时控制在养鸡场应用的功能要求 32.2 多段定时控制在养鸡场应用的工作过程 4第三章 元器件的选择 .53.1 型号选择:AT89S52 53.2 显示元器件的选择 5第四章 对多段定时控制器电路板的设计与分析 .74.1 多段定时控制器的电路结构 74.2 硬件电路设计 7第五章 程序设计 .95.1【按键电路程序】 .95.2【时钟电路程序】 .9第六章 总结 .11致 谢 .12参考文献 .13第一章 概述1.1 设计背景21 世纪是一个全新的时代
3、,方方面面都离不开技术,生产效率决定着企业的收益。养鸡场的产蛋量是收益的关键,能否降低成本,获得最大利润一直是养鸡专业户关注的问题。本次课题结合实际,运用到实践中,决绝上述问题,可以说是广大养鸡场期待已久的技术方案。1.2 设计要求1. 养鸡场内的照明设施应设定为三个时段亮起。 2. 无需人为控制养鸡场内的照明设施在设定好的时间内准时同时亮起。3. 无需人为控制养鸡场内的照明设施在亮起一个设定好的时段后准时同时熄灭。4.有时间表对时间进行计时。1.3 设计意义1.增加养鸡场产蛋量;2.降低管理成本;3.增长利润,创新型生产模式第二章 系统硬件方案设计2.1 模块设计1.单片机芯片选择方案和论证
4、方案一: 采用 89C51 芯片作为硬件核心,采用 Flash ROM,内部具有 4KB ROM 存储空间,能于 3V 的超低压工作,而且与 MCS-51 系列单片机完全兼容,但是运用于电路设计中时由于不具备 ISP 在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二:采用 AT89S52,片内 ROM 全都采用 Flash ROM;能以 3V 的超底压工作;同时也与 MCS-51 系列单片机完全该芯片内部存储器为 8KB ROM 存储空间,同样具有 89C51 的功能,且具有在线编程可擦除技术,当在对电路进
5、行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。所以选择采用 AT89S52 作为主控制系统.2.显示模块选择方案和论证方案一:采用 LED 数码管动态扫描,LED 数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。但所需数码管太多焊接困难极易出错。所以不采用 LED 数码管作为显示。方案二:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示.方案三:采用 LCD 液晶显示屏,液晶显示屏的显示
6、功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,本设计所需显示较多且需要文字。所以在此设计中采用 LCD 液晶显示屏.3.时钟芯片选择方案和论证方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二:采用 DS1302 时钟芯片实现时钟,DS1302 芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的 RAM 做为数据暂存区,工作电压 2.5V5.5V 范围内,2.5V 时耗电小于
7、300nA.4.输入模块它是整个系统中最简单的部分,根据功能要求,本系统共需五个按键:功能选择键、功能加键、功能减键、确定键、定时开关键。2.2 电路设计最终方案决定综上各方案所述,对此次作品的方案选定: 采用 AT89S52 作为主控制系统; DS1302 提供时钟;四脚按键;两组共 8 只数码管作为显示。第三章 系统软件方案设计3.1 程序流程框图硬件制作完毕之后,接下来就是程序设计,本设计采用 C 语言,在主程序中,主要实现初始化,按键处理,时间采用动态显示方式。当有键按下时,进入按键处理程序。流程图如下:开始程序初始化显示时间结束定时时间到? 显示是哪组点亮照明设施YN参数设置确定选择
8、结束第四章 主要单元电路设计4.1 最小控制系统AT89S52 单片机为 40 引脚双列直插芯片,有四个 I/O 口 P0,P1,P2,P3, MCS-51 单片机共有 4 个 8 位的 I/O 口(P0、P1、P2、P3) ,每一条 I/O 线都能独立地作输出或输入。单片机的最小系统如下图所示,18 引脚和 19 引脚接时钟电路,XTAL1 接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2 接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第 9 引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20 引脚为接地端,40 引脚为电源端. 如图-1
9、所示图-1 主控制系统 4.2 复位电路复位是由外部的复位电路来实现的。复位电路采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路。4.3 时钟电路图-2 示出 DS1302 的引脚排列,其中 Vcc1 为后备电源,Vcc2 为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302 由 Vcc1 或 Vcc2两者中的较大者供电。当 Vcc2 大于 Vcc1+0.2V 时,Vcc2 给 DS1302 供电。当Vcc2 小于 Vcc1 时,DS1302 由 Vcc1 供电。X1 和 X2 是振荡源,外接32.KHz 晶振。RST 是复位/片选线,通过把 RST 输
10、入驱动置高电平来启动所有的数据传送。RST 输入有两种功能:首先,RST 接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST 提供终止单字节或多字节数据的传送手段。当 RST 为高电平时,所有的数据传送被初始化,允许对 DS1302 进行操作。如果在传送过程中 RSTS 置为低电平,则会终止此次数据传送,I/O 引脚变为高阻态。上电动行时,在 Vcc 大于等于 2.5V 之前,RST 必须保持低电平。中有在 SCLK 为低电平时,才能将 RST 置为高电平,I/O 为串行数据输入端(双向) 。SCLK 始终是输入端。图 2 时钟电路4.4 显示电路显示部分是时钟最为重要的部分,共需要
11、 8 位 LED 显示器。采用动态显示方式,由于端口的问题以及动态显示方式的优越性,在此设计的连接方式上采用共阴级接法。显示器 LED 有段选和位选两个端口,首先说段选端,它由 LED八个端口构成,通过对这八个端口输入的不同的二进制数据使得它的时间显示也不同,从而可以得到我们所要的时间显示。由于单片机 I/O 口不能直接驱动数码管子所以要用 PNP 三极管来驱动。管动原理如下图:4.5 按键电路它是整个系统中最简单的部分,根据功能要求,本系统共需五个按键:功能选择键、功能加键、功能减键、确定键、定时开关键。按确定键将依次业显时间和各个定时时间,如果再按选择就可以选择要调整的时间(时、分、秒)按
12、加(减)键就可以调整时间或定时时间。调整完成后按确定键就完成参数设定。调时间步骤如下:1 按确定键-数码管显示当前时间并定留不动2 按选择键-数码管显示当前时间,并有两位闪烁。3 按增加键-就可以调整,长按就可以快整增加。调整定时间和调整时间方法一样。第五章 总体设计5.1 电路设计框图5.2 系统硬件概述本电路是由 AT89S52 单片机为控制核心,具有在线编程功能,低功耗,能在 3V 超低压工作;时钟电路由 DS1302 提供,它是一种高性能、低功耗、带RAM 的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V5.5V。采用三线接口与 CP
13、U 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据。DS1302 内部有一个 31*8 的用于临时性存放数据的 RAM 寄存器。可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能。5.3 画印刷电路板 PCB 图显示模块电路板如下:AT89C51主控制模 块DS1302 时钟模块数码管显示模块复位电路模块键盘模块主控制电路板如下:5.4 程序编译由于程序太长,占用大量篇幅,这里仅此对时钟程序做一个编写。时钟电路程序:#define H 0#define L 1#define uchar unsigned charucha
14、r idata da7;uchar idata ram27; sbit ds_clk=P20; sbit rst=P22; sbit ds_dat=P21;/sbit ds_clk=P22; /sbit rst=P24; /sbit ds_dat=P23;sbit a0=ACC0; sbit a1=ACC1;sbit a2=ACC2;sbit a3=ACC3;sbit a4=ACC4;sbit a5=ACC5;sbit a6=ACC6;sbit a7=ACC7;/*DS1302 命令及写数据,时钟上升沿输入数据。先送低位*/void comm_ds(uchar dd)ACC=dd;ds_dat
15、=a0;ds_clk=1;ds_clk=0; ds_dat=a1;ds_clk=1;ds_clk=0; ds_dat=a2;ds_clk=1;ds_clk=0;ds_dat=a3;ds_clk=1;ds_clk=0;ds_dat=a4;ds_clk=1;ds_clk=0;ds_dat=a5;ds_clk=1;ds_clk=0;ds_dat=a6;ds_clk=1;ds_clk=0;ds_dat=a7;ds_clk=1;ds_clk=0;/*=DS1302 读数据,时钟下降沿输出数据,先读高位。*/uchar read_ds(void) /*命令最后一位下降沿开始输出*/ds_dat=1; a0
16、=ds_dat; ds_clk=1;ds_clk=0;a1=ds_dat;ds_clk=1;ds_clk=0;a2=ds_dat;ds_clk=1;ds_clk=0;a3=ds_dat;ds_clk=1;ds_clk=0;a4=ds_dat;ds_clk=1;ds_clk=0;a5=ds_dat;ds_clk=1;ds_clk=0;a6=ds_dat;ds_clk=1;ds_clk=0;a7=ds_dat;return ACC;void write_ds(uchar ord,uchar dd)ds_clk=0;rst=L; rst=H;comm_ds(ord);comm_ds(dd);rst=
17、L; ds_clk=0;void read_fast(uchar ord,uchar m)uchar dd=0,i;ds_clk=0;rst=L;rst=H;comm_ds(ord);for(i=0;i7) rami=dd;ds_clk=1;ds_clk=0; / 换成rst=L; ds_clk=1;unsigned char zh_BCD(unsigned char Temp)unsigned char dd;dd= (Temp/16)*10+Temp%16;return dd;第六章 总 结2009 年 10 月,我开始了我的毕业论文工作,时至今日,论文基本完成。从最初的茫然,到慢慢的进入
18、状态,再到对思路逐渐的清晰,整个写作过程难以用语言来表达。历经了几个月的奋战,紧张而又充实的毕业设计终于落下了帷幕。回想这段日子的经历和感受,我感慨万千,在这次毕业设计的过程中,我拥有了无数难忘的回忆和收获。我不会忘记这难忘的几个月的时间。毕业论文的制作给了我难忘的回忆。在我徜徉书海查找资料的日子里,面对无数书本的罗列,最难忘的是每次找到资料时的激动和兴奋;亲手设计电路图的时间里,记忆最深的是每一步小小思路实现时那幸福的心情;为了论文我曾赶稿到深夜,但看着亲手打出的一字一句,心里满满的只有喜悦毫无疲惫。这段旅程看似荆棘密布,实则蕴藏着无尽的宝藏。我从资料的收集中,掌握了很多单片机的知识,让我对
19、我所学过的知识有所巩固和提高,并且让我对当今单片机的最新发展技术有所了解。在整个过程中,我学到了新知识,增长了见识。在今后的日子里,我仍然要不断地充实自己,争取在所学领域有所作为。脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计中最大的收益。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。通过这次实训,我发现在现实设计中还需要注意很多的细节,包括程序设计和硬件设计都要我们小心仔细,一个地方出错就可能会整个系统失效。在软件设计时,还遇到了许多问题,毕竟想像和现实还是有很大的区别的,然而到了最后这些问题都一一被解决了,
20、我也在这次实践中学会了很多东西,总结出自已的一套解决问题的方法,这让我觉得自已有了很大的收获。致 谢感谢我的导师刁志刚老师,他严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;他循循善诱的教导和不拘一格的思路给予我无尽的启迪。感谢我的论文指导老师,在课题的讲解上十分的详细到位,在我完成论文的过程中,刁教师都不断给予我细心的指导和不懈的支撑。在此,我还要感激在一同兴奋的度过研讨生生活的同学们,正是由于你们的辅佐和支撑,我才能抑止一个一个的艰难和迷惑,直至本文的成功完成。在论文即将完成之际,我的心境无法宁静,从开端进入课题到论文的成功完成,有几位可敬的师长、同窗、朋友给了我无言的帮助,在这里请接
21、受我诚挚的谢意!最后我还要感激培育我长大含辛茹苦的父母,谢谢你们!参考文献1.单片机实用教程 ,徐江海,机械工业出版社,2006.12附录 1 AT89S52 芯片介绍主要性能与MCS-51单片机产品兼容8K字节在系统可编程Flash存储器1000次擦写周期全静态操作:0Hz 33Hz三级加密程序存储器32个可编程I/O口线三个16位定时器/计数器八个中断源全双工UART串行通道低功耗空闲和掉电模式掉电后中断可唤醒看门狗定时器双数据指针掉电标识符功能特性描述AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器
22、技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断
23、继续工作。掉电保护方式下,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 端
24、口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL) 。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX) ,具体如下表所示。在 flash 编程和校验时,P1 口接收低 8 位地址字节。引脚号 第二功能P1.0 T2(定时器/计数器T2的外部计数输入) ,时钟输出P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.5 MOSI(在系统编程用)P1.6 MISO(在系统编程用)P1.7 SCK(在系统编程用)P2
25、口: 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 口是一个具有内部上
26、拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL) 。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在 flash 编程和校验时,P3 口也接收一些控制信号。引脚号 第二功能P3.0 RXD(串行输入)P3.1 TXD(串行输出)P3.2 INT0(外部中断0)P3.3 INT0(外部中断0)P3.4 T0(定时器0外部输入)P3.5 T1(定时器1外部输入)P3.6 WR(外部数据存储器写选通)P3.7 R
27、D(外部数据存储器写选通)RST: 复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为
28、8EH的SFR的第0位置“1” ,ALE操作将无效。这一位置“1” ,ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当 AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在
29、flash编程期间,EA也接收12伏VPP电压。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。特殊功能寄存器并不是所有的地址都被定义了。片上没有定义的地址是不能用的。读这些地址,一般将得到一个随机数据;写入的数据将会无效。用户不应该给这些未定义的地址写入数据“1” 。由于这些寄存器在将来可能被赋予新的功能,复位后,这些位都为“0” 。定时器 2 寄存器:寄存器T2CON 和T2MOD 包含定时器2 的控制位和状态位寄存器对RCAP2H和RCAP2L是定时器2的捕捉/自动重载寄存器。中断寄存器:各中断允许位在 IE 寄存器中,六个中断源的两个优先级
30、也可在 IE 中设置。双数据指针寄存器:为了更有利于访问内部和外部数据存储器,系统提供了两路16位数据指针寄存器:位于SFR中82H83H的DP0和位于84H85。特殊寄存器AUXR1中 DPS0 选择 DP0;DPS=1 选择 DP1。用户应该在访问数据指针寄存器前先初始化 DPS 至合理的值。掉电标志位:掉电标志位(POF)位于特殊寄存器PCON的第四位(PCON.4) 。上电期间POF置“1” 。POF可以软件控制使用与否,但不受复位影响。存储器结构MCS-51器件有单独的程序存储器和数据存储器。外部程序存储器和数据存储器都可以64K寻址。程序存储器:如果EA引脚接地,程序读取只从外部存
31、储器开始。对于 89S52,如果EA 接VCC,程序读写先从内部存储器(地址为0000H1FFFH)开始,接着从外部寻址,寻址地址为:2000HFFFFH。数据存储器:AT89S52 有256 字节片内数据存储器。高128 字节与特殊功能寄存器重叠。也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分开的。当一条指令访问高于7FH 的地址时,寻址方式决定CPU 访问高128 字节RAM 还是特殊功能寄存器空间。直接寻址方式访问特殊功能寄存器(SFR) 。例如,下面的直接寻址指令访问0A0H(P2口)存储单元MOV 0A0H , #data使用间接寻址方式访问高128 字节RAM。例如
32、,下面的间接寻址方式中,R0 内容为0A0H,访问的是地址0A0H的寄存器,而不是P2口(它的地址也是0A0H) 。MOV R0 , #data堆栈操作也是简介寻址方式。因此,高128字节数据RAM也可用于堆栈空间。看门狗定时器WDT是一种需要软件控制的复位方式。WDT 由13位计数器和特殊功能寄存器中的看门狗定时器复位存储器(WDTRST)构成。WDT 在默认情况下无法工作;为了激活WDT,户用必须往WDTRST 寄存器(地址:0A6H)中依次写入01EH 和0E1H。当WDT激活后,晶振工作,WDT在每个机器周期都会增加。WDT计时周期依赖于外部时钟频率。除了复位(硬件复位或WDT溢出复位
33、) ,没有办法停止WDT工作。当WDT溢出,它将驱动RSR引脚一个高个电平输出。WDT的使用为了激活WDT,用户必须向WDTRST寄存器(地址为0A6H的SFR)依次写入0E1H和0E1H。当WDT激活后,用户必须向WDTRST写入01EH和0E1H喂狗来避免WDT溢出。当计数达到8191(1FFFH)时,13 位计数器将会溢出,这将会复位器件。晶振正常工作、WDT激活后,每一个机器周期WDT 都会增加。为了复位WDT,用户必须向WDTRST 写入01EH 和0E1H(WDTRST 是只读寄存器) 。WDT 计数器不能读或写。当WDT 计数器溢出时,将给RST 引脚产生一个复位脉冲输出,这个复
34、位脉冲持续96个晶振周期(TOSC) ,其中TOSC=1/FOSC。为了很好地使用WDT,应该在一定时间内周期性写入那部分代码,以避免WDT复位。掉电和空闲方式下的 WDT在掉电模式下,晶振停止工作,这意味这WDT也停止了工作。在这种方式下,用户不必喂狗。有两种方式可以离开掉电模式:硬件复位或通过一个激活的外部中断。通过硬件复位退出掉电模式后,用户就应该给WDT 喂狗,就如同通常AT89S52 复位一样。通过中断退出掉电模式的情形有很大的不同。中断应持续拉低很长一段时间,使得晶振稳定。当中断拉高后,执行中断服务程序。为了防止WDT在中断保持低电平的时候复位器件,WDT 直到中断拉低后才开始工作
35、。这就意味着WDT 应该在中断服务程序中复位。为了确保在离开掉电模式最初的几个状态WDT不被溢出,最好在进入掉电模式前就复位WDT。在进入待机模式前,特殊寄存器AUXR的WDIDLE位用来决定WDT是否继续计数。默认状态下,在待机模式下,WDIDLE0,WDT继续计数。为了防止WDT在待机模式下复位AT89S52,用户应该建立一个定时器,定时离开待机模式,喂狗,再重新进入待机模式。UART在AT89S52 中,UART 的操作与AT89C51 和AT89C52 一样。定时器 0 和定时器1在AT89S52 中,定时器0 和定时器1 的操作与AT89C51 和AT89C52 一样。定时器 2定时
36、器2是一个16位定时/计数器,它既可以做定时器,又可以做事件计数器。其工作方式由特殊寄存器T2CON中的C/T2位选择(如表2所示) 。定时器2有三种工作模式:捕捉方式、自动重载(向下或向上计数)和波特率发生器。如表3 所示,工作模式由T2CON中的相关位选择。定时器2 有2 个8位寄存器:TH2和TL2。在定时工作方式中,每个机器周期,TL2 寄存器都会加1。由于一个机器周期由12 个晶振周期构成,因此,计数频率就是晶振频率的1/12。种方式下,每个机器周期的S5P2期间采样外部输入。一个机器周期采样到高电平,而下一个周期采样到低电平,计数器将加1。在检测到跳变的这个周期的S3P1 期间,新
37、的计数值出现在寄存器中。因为识别10的跳变需要2个机器周期(24个晶振周期) ,所以,最大的计数频率不高于晶振频率的1/24。为了确保给定的电平在改变前采样到一次,电平应该至少在一个完整的机器周期内保持不变。附录2 DS1302 简介DS1302是美国 DALLAS 公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态 RAM,采用 SPI 三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和 RAM 数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电
38、源) ,可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图1所示及内部结构如图2所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。图1 DS1302的外部引脚分配图2 DS1302的内部结构各引脚的功能为:Vcc1:主电源;Vcc2:备份电源。当 Vcc2Vcc1+0.2V 时,由 Vcc2向DS1302供电,当 Vcc20; i- ) /循环8次移位 SCLK = 0;temp = addr;DIO = (bit)(temp /每次传输低字节addr = 1;
39、/右移一位SCLK = 1;/发送数据for ( i=8; i0; i- ) SCLK = 0;temp = dat;DIO = (bit)(temp dat = 1; SCLK = 1;CE = 0; /数据读取子程序unsigned char Read1302 ( unsigned char addr )unsigned char i,temp,dat1,dat2;CE=0; SCLK=0; CE = 1; /发送地址for ( i=8; i0; i- ) /循环8次移位 SCLK = 0;temp = addr;DIO = (bit)(temp /每次传输低字节addr = 1; /右移
40、一位SCLK = 1;/读取数据for ( i=8; i0; i- )ACC_7=DIO;SCLK = 1;ACC=1;SCLK = 0; CE=0;dat1=ACC;dat2=dat1/16; /数据进制转换dat1=dat1%16; /十六进制转十进制dat1=dat1+dat2*10;return (dat1);/初始化 DS1302void Initial(void) Write1302 (WRITE_PROTECT,0X00); /禁止写保护Write1302 (WRITE_SECOND,0x56); /秒位初始化Write1302 (WRITE_MINUTE,0x34); /分钟初始化Write1302 (WRITE_HOUR,0x12); /小时初始化Write1302 (WRITE_PROTECT,0x80); /允许写保护