基于AT89C51的多功能万年历毕业设计论文_第1页
基于AT89C51的多功能万年历毕业设计论文_第2页
基于AT89C51的多功能万年历毕业设计论文_第3页
基于AT89C51的多功能万年历毕业设计论文_第4页
基于AT89C51的多功能万年历毕业设计论文_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于at89c51的多功能万年历摘要:本文介绍了基于at89c51单片机的多功能电子万年历的硬件结构和软硬件设计方法。系统以at89c51单片机为控制器,以串行时钟日历芯片ds1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有温度显示等多种功能。万年历采用直观的数字显示,可以在led上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。关键词 at89c51;电子万年历; ds1302;ds18b20目 录第1章 绪论11.1 课题的研究背景11.2课题的研究目的和意义11.

2、3 课题解决的主要内容1第2章 系统的总体设计22.1系统方案的构想与确定22.1 器件的选用2 2.2.1单片机的选择2第3章 系统硬件的设计43.1系统硬件框图43.2 at89c51单片机43.3温度传感器的介绍73.4 ds13028第4章 系统的软件设计114.1 主程序114.2 日历显示子程序114.3 从1302读取日期和时间程序14第5章 proteus使用155.1编程环境proteus155.2 用proteus isis对电子万年历的硬件电路设计155.3用proteus isis进行电子万年历的仿真测试19结语22致谢23参考文献24第1章 绪论1.1 课题的研究背景

3、随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。它可以对年、月、日、时、分、秒进行计时,还具有温度显示等多种功能,而且ds1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用at89c51单片机作为核心,功耗小,能在3v的低压工作,电压可选用35v电压供电。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。1.2课题的研究目的和意义二十一世纪是数字化技术高速发展的时代,而单片机在数字化高速发

4、展的时代扮演着极为重要的角色。电子万年历的开发与研究在信息化时代的今天亦是当务之急,因为它应用在学校、机关、企业、部队等单位礼堂、训练场地、教学室、公共场地等场合,可以说遍及人们生活的每一个角落。所以说电子万年历的开发是国家之所需,社会之所需,人民之所需。由于社会对信息交换不断提高的要求及高新技术的逐步发展,促使电子万年历发展并且投入市场得到广泛应用。1.3 课题解决的主要内容本课题所研究的电子万年历是单片机控制技术的一个具体应用,主要研究内容包括以下几个方面:(1)选用电子万年历芯片时,应重点考虑功能实在、使用方便、单片存储、低功耗、抗断电的器件。(2)根据选用的电子万年历芯片设计外围电路和

5、单片机的接口电路。(3)在硬件设计时,结构要尽量简单实用、易于实现,使系统电路尽量简单。(4)根据设计的硬件电路,编写控制at89c51芯片的单片机程序。(5)通过编程、编译、调试,把程序下载到单片机上运行,并实现本设计的功能。(6)在硬件电路和软件程序设计时,主要考虑提高人机界面的友好性,方便用户操作等因素。(7)软件设计时必须要有完善的思路,要做到程序简单,调试方便。第2章 系统的总体设计单片机电子万年历的制作有多种方法,可供选择的器件和运用的技术也有很多种。所以,系统的总体设计方案应在满足系统功能的前提下,充分考虑系统使用的环境,所选的结构要简单使用、易于实现,器件的选用着眼于合适的参数

6、、稳定的性能、较低的功耗以及低廉的成本。2.1系统方案的构想与确定系统的功能往往决定了系统采用的结构,经过分析用lm016l和ledmpx做显示器比用一般的显示管更直观清楚;在时钟芯片的选择上直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。而用ds1302时钟芯片实现时钟,ds1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的ram做为数据暂存区,工作电压2.5v5.5v范围内,2.5v时耗电小于300na.所以选用ds1302;在

7、温度传感器的选用上使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行a/d转换。此设计方案需用a/d转换电路,增加硬件成本而且热敏电阻的感温特性曲线并不是严格线性的,会产生较大的测量误差。而采用数字式温度传感器ds18b20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以去除a/d模块,降低硬件成本,简化系统电路。另外,数字式温度传感器还具有测量精度高、测量范围广等优点,所以用ds18b20;最后用respack-8连接单片机at89c51,从而实现多功能电子万年历的功能。

8、2.1 器件的选用 单片机at89c51,显示屏lm016l,温度传感器ds18b20,传感器ds1302,排阻respack-82.2.1单片机的选择单片机自70年代问世以来以微处理器(mpu)技术及超大规模集成电路技术的发展为先导,用广泛的应用领域拉动得到蓬勃发展,单片机功能正日渐完善。单片机的应用,使许多领域的技术水平和自动化程度大大提高,可以说当今世界正在经受一场以单片机技术为标志的新技术革命浪潮的冲击。主要单片机类型如下:(1)mcs-51系列单片机mcs-51系列单片机主要是指intel公司生产的以51位内核的单片机芯片,具有8位cpu、4k字节rom、128字节ram、可扩展外部

9、64k字节ram和rom、2个16位的定时器/计数器、4个8位并行i/o口、1个全双工串行i/o口、21字节的专用寄存器、5个中断源、片内自带振荡器、片内单总线等功能部件。(2)at89c51单片机at89c51单片机的主要特性如下:l 与mcs-51产品指令系统完全兼容l 4k字节的在线编程flash存储器,1000次擦写周期l 4.05.5v的工作电压范围l 全静态工作模式:033mhzl 三级程序存储器锁l 1288字节内部ram l 32个可编程i/o口线l 2个16位定时/计数器l 6个中断源l 全双工串行uart通道l 低功耗空闲和掉电模式l 中断可从空闲模式唤醒系统l 看门狗(w

10、dt)及双数据指针l 掉电标识和快速编程特性l 具有掉电状态下的中断恢复功能l 灵活的在系统编程(isp字节或页写模式)由于at89c51单片机片内有4k字节的在线编程flash存储器,可以擦写1000次,具有掉电模式,而且具有掉电状态下的中断恢复功能,对设计开发非常实用。所以选用at89c51单片机作为电子万年历芯片的控制单片机。第3章 系统硬件的设计根据上述所确定的系统方案构想,下面进行系统硬件电路的具体设计,系统的总体结构框图如图所示。3.1系统硬件框图系统硬件框图如图3-1图3-1 系统硬件框图3.2 at89c51单片机 本系统采用的是美国atmel公司生产的at89c51单片机,首

11、先我们来熟悉一下at89c51单片机的外部引脚和内部结构。1.单片机的引脚功能at89c51单片机有40个引脚。l vcc:电源电压+5vl gnd:接地l p0口:p0口是一组8位漏极开路型双向i/o口,也即地址/数据总线复用口。作为输出口用时,每位能驱动8个ttl逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线服用,在访问期间激活内部上拉电阻。在flash编程时,p0口接收指令字节,而在程序校验时,输出指令字节,校验时要求外接上拉电阻。l p1口:p1口是一个带内部上拉电阻的8位双向i/o,p1的输出缓冲级可驱动(

12、吸收或输出电流)4个ttl逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。 flash 编程和程序校验期间,p1接收低8位地址。l p2口:p2口是一个带内部上拉电阻的8位双向i/o,p2的输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器(例如执行movxdptr指令)时,p2口送出高8

13、位地址数据。在访问8位地址的外部数据存储器(movx ri指令)时,p2口线上的内容(也即特殊功能寄存器(sfr)区中p2寄存器的内容),在整个访问期间不改变。flash 编程和程序校验期间,p2亦接收低高位地址和其他控制信号。l p3口:p3口是一组带内部上拉电阻的8位双向i/o,p3的输出缓冲级可驱动(吸收或输出电流)4个ttl逻辑门电路。对p3口写入“1”时,它们被内部的上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的p3口将用上拉电阻输出电流。p3口除了作为一般的i/o口线外,更重要的用途是它的第二功能,见表3-1所示:p3口还接收一些用于flash闪速存储器编程和程序校验的控制

14、信号。表3-1 p3口的第二功能图端口引脚第二功能p3.0rxd(串行输入口)p3.1txd(串行输出口)p3.2int0(外中断0)p3.3int1(外中断1)p3.4t0(定时/计时器0外部输入)p3.5t1(定时/计时器1外部输入)p3.6wr(外部数据存储器写选通)p3.7rd(外部数据存储器读选通)l rst:复位输入。当振荡器工作时,rst引脚出现两个机器周期以上高电平将使单片机复位。wdt溢出将使引脚输出高电平,设置sfr auxr的disrt0(地址8eh)可打开或关闭该功能。disrt0位缺省为reset输出高电平打开状态。l ale/prog:当访问外部程序存储器或数据存储

15、器时,ale(地址锁存器允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ale仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ale脉冲。对flash存储器编程期间,该引脚还用于输入编程脉冲(prog)。如有必要,可通过多特殊功能寄存器(sfr)区中的8eh单元的d0位置,可禁止ale操作。该位置后,只有一条movx和movc指令ale才会被激活。另外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ale无效。l psen:程序存储允许(psen)输出是外部程序存储器的读选通信号,当at89c51由

16、外部程序存储器取指令(或数据)时,每个机器周期两次psen有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的psen信号。l ea/vpp:外部访问允许。欲使cpu仅访问外部程序存储器(地址为0000hffffh),ea端必须保持低电平(接地)。需要注意的是:如果加密位lb1被编程,复位时内部会锁存ea端状态。如ea端为高电平(接vcc端),cpu则执行内部程序存储器中的指令。flash存储器编程时,该引脚加上+12v的变成电压vpp.l xtal1:振荡器反相放大器及内部时钟发生器的输入端。l xtal2:振荡器反相放大器的输出端。at89c51单片机内部结构2.at89c51单片机

17、与mcs-51完全兼容 l 看门狗(wdt):wdt是一种需要软件控制的复位方式。wdt 由13位计数器和特殊功能寄存器中的看门狗定时器复位存储器(wdtrst)构成。wdt 在默认情况下无法工作;为了激活wdt,用户必须往wdtrst 寄存器(地址:0a6h)中依次写入01eh 和0e1h。当wdt激活后,晶振工作,wdt在每个机器周期都会增加。wdt计时周期依赖于外部时钟频率。除了复位(硬件复位或wdt溢出复位),没有办法停止wdt工作。当wdt溢出,它将驱动rsr引脚输出一个高电平。l 可编程串口(uart)在at89c51中,uart 的操作与at89c51 和at89c52 一样。a

18、t89c51系列单片机的串行通信口可以工作于同步和异步通信方式。当工作于异步方式时,它具有全双工的操作功能,也就是说,它可以同时进行数据的发送和接收。串行口内的接收器采用的是双缓冲结构,能够在接收到的第一个字节从接收寄存器读走之前就开始接收第二个字节(当然,如果第二个字节接收完毕,而第一个字节仍然没有被读走,那将会丢掉一个字节)。串行口的发送和接收操作都是通过特殊功能寄存器中的数据缓冲寄存器sbuf进行的,但在sbuf的内部,接收寄存器和发送寄存器在物理结构上是完全独立的。如果将数据写入sbuf,数据会被送入发送寄存器准备发送。如果执行sbuf指令,则读出的数据一定来自接收缓存器。因此,cpu

19、对sbuf的读写,实际上是分别访问2个不同的寄存器。这2个寄存器的功能决不能混淆。l 振荡电路:at89c51系列单片机的内部振荡器,由一个单极反相器组成。xtal1反相器的输入,xtal2为反相器的输出。可以利用它内部的振荡器产生时钟,只要xtal1和xtal2引脚上一个晶体及电容组成的并联谐振电路,便构成一个完整的振荡信号发生器,此方式称为内部方式。另一种方式由外部时钟源提供一个时钟信号到xtal1端输入,而xtal2端浮空。在组成一个单片机应用系统时,多数采用这种方式,这种方式结构紧凑,成本低廉,可靠性高。在电路中,对电容c1和c2的值要求不是很严格,如果使用高质的晶振,则不管频率为多少

20、,c1、c2通常都选择30pf。l 定时/计数器:at89c51单片机内含有2个16位的定时器/计数器。当用于定时器方式时,定时器的输入来自内部时钟发生电路,每过一个机器周期,定时器加1,而一个机器周期包含有12个振荡周期,所以,定时器的技术频率为晶振频率的1/12,而计数频率最高为晶振频率的1/24。为了实现定时和计数功能,定时器中含有3种基本的寄存器:控制寄存器、方式寄存器和定时器/计数器。控制寄存器是一个8位的寄存器,用于控制定时器的工作状态,方式寄存器是一个8位的寄存器,用于确定定时器的工作方式,定时器/计数器是16位的计数器,分为高字节和低字节两部分。l ram:高于7fh内部数据存

21、储器的地址是8位的,也就是说其地址空间只有256字节,但内部ram的寻址方式实际上可提供384字节。的直接地址访问同一个存储空间,高于7fh的间接地址访问另一个存储空间。这样,虽然高128字节区分与专用寄器 ,即特殊功能寄存器区的地址是重合的,但实际上它们是分开的。究竟访问哪一区,存是通过不同的寻址方式加以区分的。l sfr:sfr是具有特殊功能的所有寄存器的集合,共含有22个不同寄存器,它们的地址分配在80hffh中。虽然如此,不是所有的单元都被特殊功能寄存器占用,未被占用的单元,其内容是不确定的。如对这些单元进行读操作,得到的是一些随机数,而写入则无效,所以在编程时不应该将数据写入这些未确

22、定的地址单元中,特殊功能寄存器主要有累加器acc、b寄存器、程序状态字寄存器psw、堆栈指针sp、数据指针dptr、i/o端口、串行口数据缓冲器sbuf、定时器寄存器、捕捉寄存器、控制寄存器。l 中断系统:at89c51单片机有6个中断源,中断系统主要由中断允许寄存器ie、中断优先级寄存器ip、优先级结构和一些逻辑门组成。ie寄存器用于允许或禁止中断;ip寄存器用于确定中断源的优先级别;优先级结构用于执行中断源的优先排序;有关逻辑门用于输入中断请求信号。在整个中断响应过程中cpu所执行的操作步骤如下:(1)完成当前指令的操作(2)将pc内容压入堆栈(3)保存当前的中断状态(4)阻止同级的中断请

23、求(5)将中断程序入口地址送pc寄存器(6)执行中断服务程序(7)返回3.3温度传感器的介绍 at89c51作为温度测试系统设计的核心器件。该器件是intel公司生产的mcs5l列单片机中的基础产品,采用了可靠的cmos工艺制造技术,具有高性能的8位单片机,属于标准的mcs51的cmos产品。不仅结合了hmos的高速和高密度技术及chmos的低功耗特征,而且继承和扩展了mcs48单片机的体系结构和指令系统。单片机小系统的电路图如图2所示。 ds18b20可以程序设定912位的分辨率,精度为0.5c。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在eprom中,掉电

24、后依然保存。温度传感器ds18b20引脚如图3-2所示。 8引脚封装 to92封装图3-2 温度传感器引脚功能说明nc :空引脚,悬空不使用;vdd :可选电源脚,电源电压范围35.5v。当工作于寄生电源时,此引脚必须接地。dq :数据输入/输出脚。漏极开路,常态下高电平。gnd :为电源地ds18b20内部结构主要由四部分组成:64位光刻rom、温度传感器、非挥发的温度报警触发器th和tl、配置寄存器。光刻rom中的64位序列号是出厂前被光刻好的,它可以看作是该ds18b20的地址序列码。64位光刻rom的排列是:开始8位(28h)是产品类型标号,接着的48位是该ds18b20自身的序列号,

25、最后8位是前面56位的循环冗余校验码(crc=x8+x5+x4+1)。光刻rom的作用是使每一个ds18b20都各不相同,这样就可以实现一根总线上挂接多个ds18b20的目的。ds18b20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/lsb形式表达,其中s为符号位。这是12位转化后得到的12位数据,存储在18b20的两个8比特的ram中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温

26、度。 例如+125的数字输出为07d0h,+25.0625的数字输出为0191h,-25.0625的数字输出为ff6fh,-55的数字输出为fc90h。ds18b20温度传感器的内部存储器包括一个高速暂存ram和一个非易失性的可电擦除的e2ram,后者存放高温度和低温度触发器th、tl和结构寄存器。 暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是th、tl的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。

27、该字节各位的意义如下: tm r1 r0 1 1 1 1 1低五位一直都是1 ,tm是测试模式位,用于设置ds18b20在工作模式还是在测试模式。在ds18b20出厂时该位被设置为0,用户不要去改动。r1和r0用来设置分辨率,如表3-2所示:(ds18b20出厂时被设置为12位) 表3-2 ds18b20温度转换时间表r1r0分辨率/位温度最大转向时间00993.750110187.510113751112750根据ds18b20的通讯协议,主机控制ds18b20完成温度转换必须经过三个步骤:每一次读写之前都要对ds18b20进行复位,复位成功后发送一条rom指令,最后发送ram指令,这样才能

28、对ds18b20进行预定的操作。复位要求主cpu将数据线下拉500微秒,然后释放,ds18b20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主cpu收到此信号表示复位成功。3.4 ds1302 现在流行的串行时钟电路很多,如ds1302、 ds1307、pcf8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。本文介绍的实时时钟电路ds1302是dallas公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768khz晶振。 ds1302 是美国dallas公司推出的一

29、种高性能、低功耗、带ram的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5v5.5v。采用三线接口与cpu进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或ram数据。ds1302内部有一个318的用于临时性存放数据的ram寄存器。ds1302是ds1202的升级产品,与ds1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 ds1302的引脚排列,其中vcc1为后备电源,vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。ds1302由vcc1或vcc2两者中的较大者供电。当vcc

30、2大于vcc10.2v时,vcc2给ds1302供电。当vcc2小于vcc1时,ds1302由vcc1供电。x1和x2是振荡源,外接32.768khz晶振。rst是复位/片选线,通过把rst输入驱动置高电平来启动所有的数据传送。rst输入有两种功能:首先,rst接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,rst提供终止单字节或多字节数据的传送手段。当rst为高电平时,所有的数据传送被初始化,允许对ds1302进行操作。如果在传送过程中rst置为低电平,则会终止此次数据传送,i/o引脚变为高阻态。上电运行时,在vcc2.5v之前,rst必须保持低电平。只有在sclk为低电平时,才能将r

31、st置为高电平。i/o为串行数据输入输出端(双向),后面有详细说明。sclk始终是输入端。 ds1302 的控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入ds1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取ram数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。 在控制指令字输入后的下一个sclk时钟的上升沿时,数据被写入ds1902,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个sclk脉冲的下降沿读出ds1302的数据,读出数据时从低位0位到高位7。 ds1

32、302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为bcd码形式,其日历、时间寄存器及其控制字见表1。 此外,ds1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与ram相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 ds1302与ram相关的寄存器分为两类:一类是单个ram单元,共31个,每个单元组态为一个8位的字节,其命令控制字为c0hfdh,其中奇数为读操作,偶数为写操作;另一类为突发方式下的ram寄存器,此方式下可一次性读写所有的ram的31个字节,命令控制字为feh(写)、ffh(读)。 ds1302与cpu的连接需

33、要三条线,即sclk(7)、i/o(6)、rst(5)。ds1902与89c2051的连接图,其中,时钟的显示用led。 ds1302与cpu的连接,实际上,在调试程序时可以不加电容器,只加一个32.768khz 的晶振即可。只是选择晶振时,不同的晶振,误差也较大。另外,还可以在上面的电路中加入ds18b20,同时显示实时温度。只要占用cpu一个口线即可。 led还可以换成lcd,还可以使用北京卫信杰科技发展有限公司生产的10位多功能8段液晶显示模块lcm101,内含看门狗(wdt)/时钟发生器及两种频率的蜂鸣器驱动电路,并有内置显示ram,可显示任意字段笔划,具有34线串行接口,可与任何单片

34、机、ic接口。功耗低,显示状态时电流为2a (典型值),省电模式时小于1a,工作电压为2.4v3.3v,显示清晰。ds1302的引脚图3-3所示 图3-3 ds1302引脚图ds1302的实时时间流程。根据流程框图,不难采集实时时间。下面对ds1302的基本操作进行编程: 根据本人在调试中遇到的问题,特作如下说明: ds1302 与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位msb(d7)必须为逻辑1,如果d7=0,则禁止写ds1302,即写保护;d6=0,指定时钟数据,d6=1,指定ram数据;d5d1指定输入或输出的特定寄存器;最低位lsb(d0)为逻辑0,指定

35、写操作(输入), d0=1,指定读操作(输出)。 在ds1302的时钟日历或ram进行数据传送时,ds1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个sclk周期的上升沿输入数据字节,或在下8个sclk周期的下降沿输出数据字节。 ds1302与ram相关的寄存器分为两类:一类是单个ram单元,共31个,每个单元组态为一个8位的字节,其命令控制字为c0hfdh,其中奇数为读操作,偶数为写操作;再一类为突发方式下的ram寄存器,在此方式下可一次性读、写所有的ram的31个字节。 要特别说明的是备用电源b1,可以用电池或者超级电容器(0.1f以上)。虽然ds1302

36、在主电源掉电后的耗电很小,但是,如果要长时间保证时钟正常,最好选用小型充电电池。可以用老式电脑主板上的3.6v充电电池。如果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容器代替。100 f就可以保证1小时的正常走时。ds1302在第一次加电后,必须进行初始化操作。初始化后就可以按正常方法调整时间。 ds1302 存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。ds1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。传统的数据记录方式是隔时采样

37、或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片ds1302,则能很好地解决这个问题。第4章 系统的软件设计电子万年历的功能是在程序控制下实现的。该系统的软件设计方法与硬件设计相对应,按整体功能分成多个不同的程序模块,分别进行设计、编程和调试,最后通过主程序将各程序模块连接起来。这样有利于程序修改和调试,增强了程序的可移植性。4.1 主程序 主程序如图4-1所示: 图4-1 主程序图4.2 日历显示子

38、程序 =日历显示子程序= display: mov a,#81h ;设定年第1位的显示地址为第1行,第1列 lcall write_com mov a, #32h ;数字2的ascii码 lcall write_data mov a,#82h ;设定年第2位的显示地址为第1行,第2列 lcall write_com mov a, #30h ;数字0的ascii码 lcall write_data mov a,#83h ;设定年第3位的显示地址为第1行,第3列 lcall write_com mov a, time_year_lbuf ;年的底位缓存数据 add a,#30h ;加30h修正取a

39、scii码 lcall write_data mov a,#84h ;设定年第4位的显示地址为第1行,第4列 lcall write_com mov a, time_year_hbuf ;年的高位缓存数据 add a,#30h ;加30h修正取ascii码 lcall write_data mov a,#85h;(规定显示年的位置) acall write_com;(调用命令写入子程序) mov a,#00h acall write_data;(调用数据写入子程序) mov a,#86h ;设定月第1位的显示地址为第1行,第6列 lcall write_com mov a, mont_lbuf

40、 ;月的低位缓存数据 add a,#30h ;加30h修正取ascii码 lcall write_data mov a,#87h ;设定月第2位的显示地址为第1行,第7列 lcall write_com mov a, mont_hbuf ;月的高位缓存数据 add a,#30h ;加30h修正取ascii码 lcall write_data mov a,#88h;(规定显示月的位置) acall write_com;(调用命令写入子程序) mov a,#01h acall write_data;(调用数据写入子程序) mov a,#89h ;设定天第1位的显示地址为第1行,第9列 lcall

41、write_com mov a, time_day_lbuf ;天的低位缓存数据 add a,#30h ;加30h修正取ascii码 lcall write_data mov a,#8ah ;设定天第2位的显示地址为第1行,第10列 lcall write_com mov a, time_day_hbuf ;天的高位缓存数据 add a,#30h ;加30h修正取ascii码 lcall write_data mov a,#8bh;(规定显示日的位置) acall write_com;(调用命令写入子程序) mov a,#02h acall write_data;(调用数据写入子程序);- m

42、ov a,#0cfh lcall write_com mov a, week_data_hbuf add a,#30h ;加30h修正取ascii码 lcall write_data mov a,#0c4h ;设定小时第1位的显示地址为第2行,第0列 lcall write_com mov a, hour_lbuf ;小时的低位缓存数据 add a,#30h ;加30h修正取ascii码 lcall write_data mov a,#0c5h ;设定小时第2位的显示地址为第2行,第1列 lcall write_com mov a, hour_hbuf ;小时的高位缓存数据 add a,#30

43、h ;加30h修正取ascii码 lcall write_data mov a,#0c6h ;设定冒号的显示地址为第2行,第2列 lcall write_com mov a, #3ah ;冒号的ascii码 lcall write_data mov a,#0c7h ;设定分钟第1位的显示地址为第2行,第3列 lcall write_com mov a, mintue_lbuf ;分钟的低位缓存数据 add a,#30h ;加30h修正取ascii码 lcall write_data mov a,#0c8h ;设定分钟第2位的显示地址为第2行,第4列 lcall write_com mov a,

44、 mintue_hbuf ;分钟的高位缓存数据 add a,#30h ;加30h修正取ascii码 lcall write_data mov a,#0c9h ;设定冒号的显示地址为第2行,第5列 lcall write_com mov a, #3ah ;冒号的ascii码 lcall write_data mov a,#0cah ;设定秒钟第1位的显示地址为第2行,第6列 lcall write_com mov a, second_lbuf ;秒钟的低位缓存数据 add a,#30h ;加30h修正取ascii码 lcall write_data mov a,#0cbh ;设定秒钟第2位的显示

45、地址为第2行,第7列 lcall write_com mov a, second_hbuf ;秒钟的高位缓存数据 add a,#30h ;加30h修正取ascii码 lcall write_data ret4.3 从1302读取日期和时间程序 图4-2 从1302读取程序下面是一段读ds1302程序;=读1302子程序=rd_ds1302: mov ds1302_addr,#8dh ;读ds1302中的年 lcall read ;调用读ds1302子程序 mov time_year, ds1302_data ;把读?00000000000000000000000000- mov time_mo

46、nt, ds1302_data ;把读出的月数据存入月寄存器中 mov ds1302_addr,#87h ;读ds1302中的天 lcall read mov time_day, ds1302_data ;把读出的天数据存入天寄存器中 mov ds1302_addr,#85h ;读ds1302中的小时 lcall read mov hour, ds1302_data ;把读出的天数据存入小时寄存器中 mov ds1302_addr,#83h ;读ds1302中的分钟 lcall read mov mintue, ds1302_data ;把读出的天数据存入分钟寄存器中 mov ds1302_a

47、ddr,#81h ;读ds1302中的秒钟 lcall read mov second, ds1302_data ;把读出的天数据存入秒钟寄存器中ret第5章 proteus使用5.1编程环境proteusproteus软件是由英国labcenter electronics 公司开发的eda工具软件,由isis和ares两个软件构成,其中isis是一款便捷的电子系统仿真平台软件,ares是一款高级的布线编辑软件,它集成了高级原理布线图、混合模式spice电路仿真、pcb设计以及自动布线来实现一个完整的电子设计。5.2 用proteus isis对电子万年历的硬件电路设计通过proteus is

48、is软件的vsm(虚拟仿真技术),用户可以对模拟电路、数字电路、模数混合电路,以及基于微控制器的系统连同所有外围接口电子元器件一起仿真。用proteus isis设计硬件电路的过程 选择设计图纸的到小根据设计所使用到元器件的多少,选择合适大小的设计图纸,操作是单击菜单栏上的systemset sheet size ,然后弹出如图5-1所示的对话框,从中选择合适大小的图纸,也可以选择user进行图纸的自定义设置。在设计过程中也可以通过此方法调整图纸的大小。 图 5-1设计图纸的大小 选取仿真所需的元器件 选取元器件的方式是,单击如图5-2所示的按钮“p”。会弹出如图5-3所示的窗口。图 5-2查询仿真器件图 5-3选择需要的仿真器件 从此窗口的左上角的“keywords”中输入电子万年历设计用到的器件,如输入“at89c51”,在中间会列出带有输入关键字的元器件,选择合适的元器件并双击它,则已经选择好了该元器件。然后再在“keywords”

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论