《[理学]日历时钟LCD显示程序设计报告.doc》由会员分享,可在线阅读,更多相关《[理学]日历时钟LCD显示程序设计报告.doc(35页珍藏版)》请在三一办公上搜索。
1、摘要这次课程设计历时两个星期,经过这些天的实践和体验下来,我们学到了不仅是知识更多的学会的是团队协作。现在想来,也许学校安排这次课程设计有很大的现实意义,它不仅综合理论知识来运用到创新和设计,还让我们知道了团队的合作。两个星期前我们还为这次课程设计发愁,我们需要了解很多我们在课本上没学到的知识,通过在网上查找资料,我们能学到很多咋课本是哪个学不到的内容本次设计的主要任务是实现日历实时时钟的显示,用到的硬件有微控制器AT89C51, 时钟芯片DS12C887,液晶显示屏LCD12864.时钟芯片DS12887是并行的时钟芯片,能够实现时分秒年月日的显示。我们经过两周的时间设计出了能够显示时分秒以
2、及年月日的显示,设计步骤简单易懂,首先设定时钟DS12887的各寄存器地址,然后对LCD初始化,在对时钟读写时间,最后在LCD上显示。我们的显示结果在实验台上显示结果,通过连接实验台上的相关器件,运行仿真之后会在液晶显示屏上显示相关内容,其中第一行显示时分秒,第二行显示年月日。一、 系统方案(方案论证)1、实验目的1. 进一步熟悉和掌握单片机的结构及工作原理;2. 通过课程设计,掌握以单片机核心的电路设计的基本方法和技术;3. 了解有关电路参数的计算方法培养综合运用单片机课程课题及有关选修课程的基本知识去解决实际问题的基本训练;4. 掌握单片机的接口技术及相关外围芯片的外特性,控制方,从而加深
3、对该课程知识的理解;5. 熟悉Ptoteus及Keil软件的调试和仿真,通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。2、实验要求1、 实时显示年、月、日等2、 实时显示秒、分、时等3、 能调整时间、日期3、实验论证二、硬件介绍1、微控制器AT89C51AT89C51单片机是一种低功耗,高性能的片内含有4KB可编程/擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的8位COMS微控制器,使用高密度,非易失存储技术制造,并且与AT89C51引脚和指令系统完全兼容。芯片上的FPEROM允许在线编程或采用通
4、用的非易失存储编程器对存储器重复编程。AT89C51单片机带有2K字节闪烁可编程可擦除只读存储器的单片机,其内部的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51单片机是一种高效微控制器,也为嵌入式控制系统提供了一种灵活性高且价廉的方案,这就显示出了AT89C51单片机的优越性。2.2.1 单片机的构成AT89C51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多种功能的I/O线等一台计算机所需要的基本功能部
5、件,AT89C51单片机单片机内包含下列几个部件:(1) 一个8位CPU;(2)一个片内振荡器及时钟电路;(3)4K字节ROM程序存储器;(4)128字节RAM数据存储器;(5)两个16位定时器/计数器;(6)可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路;(7)32条可编程的I/O线(四个8位并行I/O端口);(8)一个可编程全双工串行口;(9)具有五个中断源、两个优先级嵌套中断结构。其内部机构框图如图2.2所示: 图2.2 MCS-51单片机内部机构框图 2.2.2 AT89C51单片机性能及特点(1)与MCS-51微控制器产品系列兼容。(2)片内有4KB可在线重复编程的快
6、闪擦写存储器(Flash Memory)。(3)存储器可循环写入/擦除1000次。(4)存储数据保存时间为10年。(5)工作电压范围:Vcc可为2.7V6V。(6)全静态工作:可从0HZ到16MHZ。(7)程序存储器具有3级加密保护。(8)1288位内部RAM。(9)32条可编程I/O线。(10)两个16位定时器/计数器。(11)中断结构具有5个中断源和2个优先级。(12)可编程全双工串行通道。(13)空闲状态维持低功耗和掉电状态保存存储内容。 2.2.4 AT89C51单片机的引脚说明AT89C51单片机采用40条引脚双列直插式器件,引脚除5V( 40脚)和电源地( 20脚)外,其功能分为时
7、钟电路、控制信号、输入/输出三大部分,逻辑框图及引脚图分别如图2.3(a)(b)所示 (a) (b) 图2.3 AT89C51单片机逻辑图与引脚图 AT89C51单片机的内部硬件结构中除了程序存储器由FPEROM取代了87C51单片机的EPROM外,其余部分完全相同,其管脚说明如下:(1)VCC:供电电压(2)GND:接地(3)时钟电路 XTAL1(19脚)芯片内部振荡电路(单级反相放大器)输入端。 XTAL2(18脚)芯片内部振荡电路(单级反相放大器)输出端。 (4)控制信号RST(9脚)复位信号:时钟电路工作后,在此引脚上将出现两个机器周期的高电平,芯片内部进行初始复位,P0口P3口输出高
8、电平,将初值07H写入堆栈指针。ALE(30脚)地址锁存信号:当访问外部存储器时,P0口输出的低8位地址由ALE输出的控制信号锁存到片外地址锁存器,P0口输出地址低8位后,又能与片外存储器之间传送信息。另外,ALE可驱动4个TTL门。(29脚)片外程序存储器读选通:低电平有效,作为程序存储器的读信号,输出负脉冲,将相应的存储单元的指令读出并送到P0口,可驱动8个TTL门。/Vpp(30脚):当为高电平且PC值小于0FFFH时,CPU执行内部程序存储器程序;当为低电平时,CPU仅执行外部程序存储器程序。(5)I/O接口P0口(P0.0P0.7,3932脚)三态双向口:P0口结构包括一个输出锁存器
9、、两个三态缓冲器、一个输出驱动电路和一个输出控制端。P0口做地址/数据复用总线使用。若从P0口输出地址数据信息,此时控制端为高电平,若从P0口输入数据指令信息时,引脚信号应从输入三态缓冲器进入地址总线,它可驱动8个TTL门。P0P3口上的“读-修改-写”功能,其操作是先将字节的全部8位数读入,再通过指令修改某些位,然后将新的数据写回到口锁存器中。P1口(P1.0P1.7,18脚)准双向口:P1口做通用I/O接口使用,P1口的每一位口线能独立地作用于输入线,P1口可驱动4个TTL门。P2口(P2.0P2.7,2128脚)通用I/O接口:它做通用I/O接口使用时,是一个准双向口,此时转换开关MUX
10、倒向左边,输出极与锁存器相连,引脚可作为用户I/O口线使用,输入/输出操作与P1口完全相同,P2口做地址总线使用。当系统中接有外部存储器时,P2口用于输出高8位地址A8A15,这时在CPU控制下,转换开关MUX倒向右边,接通内部地址总线。P2口的口线状态取决于片内输出的地址信息,这些信息来源于PC、DPTR等。在外接程序存储器中,由于访问外部存储器操作连续不断,P2口不断送出地址高8位。AT89C51单片机的P2口一般只做地址总线使用,不做I/O接口直接连外部设备使用。P3口(P3.0P3.7,1017脚)双功能口:P3口做通用I/O接口使用,输出功能控制线为高电平,与非门的输出取决于锁存器的
11、状态,此时锁存器Q端的状态与其引脚状态是一致的。在这种情况下,P3口的结构和操作与P1口相同。P3口第二功能是可作为系统具有控制功能的控制线,另外P3口可驱动4个LSTTL门电路。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流,这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口使用如:P3.0 RXD(串行输入口);P3.1 TXD(串行输出口);P3.2 /INT0(外部中断0);P3.3 /INT1(外部中断1);P3.4 T0(记时器
12、0外部输入);P3.5 T1(记时器1外部输入);P3.6 /WR(外部数据存储器写选通);P3.7 /RD(外部数据存储器读选通);2.2.5存储器单片机在存储器的设计上,其共同特点是将程序存储器与数据存储器分开,它们有各自的寻址方式。AT89C51单片机片内具有数据存储器,同时还具有强大的外部存储器扩展能力,存储器是单片机系统中的重要组成部分。在一片芯片内除了许多基本的记忆单元构成的存储矩阵外,还包括译码驱动电路,读写电路等。图2.4为半导体存储器芯片的基本结构框图。 图2.4半导体存储器芯片的基本结构框图 (1) 单片机存储器分类MCS-51系列单片机的存储器可分五类:程序存储器、内部数
13、据存储器、特殊功能寄存器、位寻址区、外部数据存储器I/O接口。程序存储器:存放程序的存储器称为程序存储器。程序存储器是以程序计数器PC做地址指针的,MCS-51单片机的程序计数器为16位,因此可寻址的空间为64KB。AT89C51系统中没有片内程序存储器,0000H0FFFH都是外部程序存储器空间。内部数据存储器:MCS-51单片机内部有128B的数据存储器RAM,内部数据存储器的编址为00H7FH。不同的地址区域内,功能不完全相同。单片机结构的特点之一是工作寄存器与数据存储器统一编址。MCS-51内部RAM的00H1FH为工作寄存器区,共分4个区,每区有8个寄存器。当前程序使用的工作寄存器区
14、,是由状态字PSW的第3、4位指示的,PSW的状态和工作寄存器区的关系如表2.1所示: 表2.1 PSW的状态和工作寄存器区的关系PSW.4(RS1)PSW.3(RS0)当前使用的工作寄存器区(R0R7)000区(00H07H)011区(08H0FH)102区(10H17H)113区(18H1FH)(2) 特殊功能寄存器区AT89C51内的I/O锁存器、定时器、串行接口数据缓冲器以及各种控制状态寄存器和状态寄存器都是以特殊功能寄存器的形式出现的,它们零散地分布于80HFFH的地址空间范围内,特殊功能寄存器具有各自的地址空间映像。(3) 位寻址空间MCS-51的位寻址空间为00H7FH,为内部R
15、AM中20H2FH的16个单元的128位,凡是字节地址能被8整除的特殊功能寄存器都具有位地址,它们零散地分布在80HFFH的空间内。(4) 外部数据存储器I/O接口AT89C51提供了扩展64KB的外部数据存储器和输入/输出口的能力,具有十分广泛的应用。2、LCD显示(1)概述 显示电路选用AMPIRE128X64图5 LCD显示屏管脚一共18个。CS1左半屏片选端,CS2右半屏片选端; V0液晶显示驱动电压,通过一个电位器接到VCC;RS数据指令选择信号,H为数据,L为指令,也叫D/I;R/W读写选择信号,H为读,L为写,。E为LCD使能端,R/W为L时,E信号下降沿锁存DB7-DB0;R/
16、W为H时,E为H,DDRAM数据读到DB7-DB0。DB0-DB7数据传输端口。RST复位信号。-VOUT和V0为液晶显示驱动电压。12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及12864全点阵液晶显示器组成。可完成图形显示,也可以显示84个(1616点阵)汉字。表4 12864LCD的引脚说明管脚号管脚名称LEVER管脚功能描述1VSS0电源地2VDD+5.0V电源电压3V0-液晶显示器驱动电压4D/I(RS)H/LD/I=“H”,表示DB7DB0为显示数据D/I=“L”,表示DB7DB0为显示指令数据5R/WH/LR/W=“H”,E=“H”数据被读到DB7DB0R/W=“
17、L”,E=“HL”数据被写到IR或DR6EH/LR/W=“L”,E信号下降沿锁存DB7DB0R/W=“H”,E=“H”DDRAM数据读到DB7DB07DB0H/L数据线8DB1H/L数据线9DB2H/L数据线10DB3H/L数据线11DB4H/L数据线12DB5H/L数据线13DB6H/L数据线14DB7H/L数据线15CS1H/LH:选择芯片(右半屏)信号16CS2H/LH:选择芯片(左半屏)信号17RETH/L复位信号,低电平复位18VOUT-10VLCD驱动负电压19LED+-LED背光板电源20LED-LED背光板电源 (2)在使用12864LCD前先必须了解以下功能器件才能进行编程。
18、12864内部功能器件及相关功能如下:1. 指令寄存器(IR)IR是用于寄存指令码,与数据寄存器数据相对应。当D/I=0时,在E信号下降沿的作用下,指令码写入IR。2数据寄存器(DR)DR是用于寄存数据的,与指令寄存器寄存指令相对应。当D/I=1时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下由DR读到DB7DB0数据总线。DR和DDRAM之间的数据传输是模块内部自动执行的。3忙标志:BFBF标志提供内部工作情况。BF=1表示模块在内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。利用STATUS READ指令,可以将BF读到DB7总
19、线,从检验模块之工作状态。4显示控制触发器DFF此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY OFF),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。DDF的状态是指令DISPLAY ON/OFF和RST信号控制的。5XY地址计数器XY地址计数器是一个9位计数器。高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。X地址计数器是没有记数功能的,只能用指令设置。Y地址计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,
20、Y地址指针从0到63。6显示数据RAM(DDRAM)DDRAM是存储图形显示数据的。数据为1表示显示选择,数据为0表示显示非选择。DDRAM与地址和显示位置的关系见DDRAM地址表。7Z地址计数器Z地址计数器是一个6位计数器,此计数器具备循环记数功能,它是用于显示行扫描同步。当一行扫描完成,此地址计数器自动加1,指向下一行扫描数据,RST复位后Z地址计数器为0。Z地址计数器可以用指令DISPLAY START LINE预置。因此,显示屏幕的起始行就由此指令控制,即DDRAM的数据从哪一行开始显示在屏幕的第一行。此模块的DDRAM共64行,屏幕可以循环滚动显示64行。(3)12864LCD的指令
21、系统及时序该类液晶显示模块(即KS0108B及其兼容控制驱动器)的指令系统比较简单,总共只有七种。其指令表如下表所示: 表5 12864LCD指令表指令名称控制信号控制代码R/WRSDB7DB6DB5DB4DB3DB2DB1DB0显示开关0000111111/0显示起始行设置0011XXXXXX页设置0010111XXX列地址设置0001XXXXXX读状态10BUSY0ON/OFFRST0000写数据01写数据读数据11读数据 各功能指令分别介绍如下。1、显示开/关指令 表6R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB00000111111/0当DB01时,LCD显示RA
22、M中的内容;DB00时,关闭显示。2、显示起始行(ROW)设置指令 表7R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB00011显示起始行(063)该指令设置了对应液晶屏最上一行的显示RAM的行号,有规律地改变显示起始行,可以使LCD实现显示滚屏的效果。3、页(PAGE)设置指令 表8R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB00010111页号(07)显示RAM共64行,分8页,每页8行。4、列地址(Y Address)设置指令 表9R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB00001显示列地址(063)设置了页地址和列地址
23、,就唯一确定了显示RAM中的一个单元,这样MPU就可以用读、写指令读出该单元中的内容或向该单元写进一个字节数据。5、读状态指令 表10R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB010BUSY0ON/OFFREST0000该指令用来查询液晶显示模块内部控制器的状态,各参量含义如下:BUSY:1-内部在工作0-正常状态ON/OFF:1-显示关闭0-显示打开RESET:1-复位状态0-正常状态在BUSY和RESET状态时,除读状态指令外,其它指令均不对液晶显示模块产生作用。在对液晶显示模块操作之前要查询BUSY状态,以确定是否可以对液晶显示模块进行操作。6、写数据指令 表11
24、R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB001写数据读数据指令 表12R/WRSDB7 DB6 DB5 DB4 DB3DB2DB1 DB011读显示数据 读、写数据指令每执行完一次读、写操作,列地址就自动增一。必须注意的是,进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据。3、时钟电路模块DS12887DS12887 芯片是时钟芯片中功能较强的一种,它将晶体振荡电路、充电电路和可充电锂电池等一起封装在芯片的上方,组成一个加厚的集成电路模块。电路通电时其充电电路便自动对可充电电池充电,其内部包含非易失时钟、警报器、百年历、可编程中断、方波发生器
25、和 114 个字的非易失静态 RAM。DS12887具有日历、时钟、低功耗静态RAM、输出方波信号等功能,石英晶振和写保护电路也封装在内,在断电情况下仍能保持时间和内存。DS12887可以方便地与单片机接口,并由单片机系统对其进行操作得到日历、时钟信息,输出方波信号用于秒信号的显示。其封装方式为 24 脚双排直列,如图2.5所示。图2.5 DS12887的封装形式DS12887主要功能介绍(1)内含一个锂电池,断电后运行十年以上不丢失数据。(2)计秒,分,时,天,星期,日,月,年,并有闰年补尝功能。(3)二进制数码或BCD码表示时间,日历和定闹。(4)12小时或24小时制,12小时时钟模式带有
26、PM和AM指示,有夏令时功能。(5)Motorola和Intel总线时序选择,可编程方波信号输出。(6)有128个字节RAM单元与软件接口,其中14个字节作为时钟和控制寄存器,114字节为通用RAM,所有RAM单元数据都具有掉电保护功能。(7)中断信号输出(IRQ)和总线兼容,周期性中断、时钟更新周期结束中断可分别由软件屏蔽,也可分别进行测试。(8)工作电压:+4.55.5V。(9)工作温度范围:070。2.3.1 DS12887引脚说明及使用方法 DS12887内部由振荡电路,分频电路,周期中断/方波选择电路,14字节时钟和控制单元,114字节用户非易失RAM,十进制/二进制累加器,总线接口
27、电路,电源开关写保护单元和内部锂电池等部分组成。DS12887引脚分配如图2.6所示,各管脚说明如下:VCC:直流电源+5V电压。当5V电压在正常范围内时,数据可读写;当Vcc低于4.25V,读写被禁止,计时功能仍继续;当Vcc下降到3V以下时,RAM和计时器供电被切换到内部锂电池。MOT(模式选择):MOT引脚接到Vcc时,选择MOTOROLA时序,当接到GND时,选择Intel时序。SQW(方波信号输出):SQW引脚能从实时钟内部15级分频器的13个抽头中选择一个作为输出信号,其输出频率可通过对寄存器A编程改变。AD0-AD7(双向地址/数据复用线):总线接口,可与Motorola微机系列
28、和Intel微机系列接口。AS(地址选通输入):用于实现信号分离,在AD/ALE的下降沿把地址锁入DS12887。DS(数据选通或读输入):DS/RD引脚有两种操作模式,取决于MOT引脚的电平,当使用Motorola时序时,DS是一正脉冲,出现在总线周期的后段,称为数据选通;在读周期,DS指示DS12887驱动双向总线的时刻;在写周期,DS的后沿使DS12887锁存写数据。选择Intel时序时,DS称作(RD),RD与典型存贮器的允许信号(OE)的定义相同。R/W(读/写输入):R/W引脚也有两种操作模式。选Motorola时序时,R/W是低电平信号时,指示当前周期是读或写周期,DS为高电平时
29、,R/W高电平指示读周期,R/W信号一低电平信号,称为WR。在此模式下,R/W引脚与通用RAM的写允许信号(WE)的含义相同。CS(片选输入):在访问DS12887的总线周期内,片选信号必须保持为低。IRQ(中断申请输入):低电平有效,可作微处理的中断输入。没有中断的条件满足时,IRQ处于高阻态。IRQ线是漏极开路输入,要求外接上接电阻。RESET(复位输出):当该脚保持低电平时间大于200ms,DS12887有效复位。 时间和日历单元时间和日历信息通过读相应的内存字节来获取,时间和日历通过写相应的内存字节设置或初始化,其字节内容可以是二进制或BCD形式。时间可选择12小时制或24小时制,当选
30、择12小时制时,小时字节的高门为逻辑“1”代表PM。时间和日历字节是双缓冲的,总是可访问的。非易失RAM在DS1288中,114字节通用非易失RAM不专用一任何特殊功能,它们可被处理器程序用作非易失内存,在更新周期也可访问。中断RTC实时时钟加RAM向处理器提供三个独立的,自动的中断源。定闹中断的发生率可编程,从每秒一次到每天一次,周期性中断的发生率可从500ms到122s选择。更新结束中断用于向程序指示一个更新周期完成。中断控制和状态位在寄存器B和C中,本文的其它部分将详细描述每个中断发生条件。晶振控制位DS12887出厂时,其内部晶振被关掉,以防止锂电池在芯片装入系统前被消耗,寄存器A的B
31、IT4-BIT6的其它组合都是使用晶振关闭。更新周期DS12887每一秒执行一次更新周期,保证时间、日历的准确。DS12887内部RAM专用寄存器地址功能 DS12887的地址由114字节的用户RAM存放。10字节的存放实时时钟时间,日历和控制和状态的4字节特殊寄存器组成,几乎所有的128个字节直接读写。表2.2为DS12887内部RAM和各专用寄存器地址分布表,其中,地址00H03H单元的取值范围是00H3BH(10进制为059);04H05H单元按12小时制取值范围是上午(AM)01H0CH(112),下午(PM)81H8CH(8192)按24小时制取值范围是00H17H(123);06H
32、单元取值范围是00H07H(07);07H单元取值范围01H1FH(131);08H单元取值范围是01H0CH(112);09H单元的取值范围是00H63H(099)。DS12887的RAM和各专用寄存器的访问如下实现,若片选地址DS=#0DDXXH,则芯片内部RAM 和寄存器和地址为#0DD00H#0DD7FH。应指出的是,尽管DS12887的专用时标年寄存器只有一个,但通过软件编程可利用其内部的不掉电的RAM区的一个字节实现年度的高两位显示,所以,DS12887芯片跨越2000年的计时就不成问题。 表2.2 DS12C887内部RAM和各专用寄存器地址地址单元用途地址单元用途地址00H秒地
33、址01H秒闹地址02H分地址03H分闹地址04H时地址05H时闹地址06H星期地址07H日(两位数)地址08H月(两位数)地址09H年(两位数)地址0AH寄存器A地址0BH寄存器B地址0CH寄存器C地址0CH寄存器D0EH7EH不掉电RAM区,共114字节寄存器A 寄存器A各位不受复位的影响,UIP位为只读位,其它各位均可读写,寄存器的控制字的格式如表2.3所列。 表2.3 DS12887控制寄存器A各布尔位定义BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 UIP DV2 DV1 DV0 RS3 RS2 RS1 RS0 (1)UIP位:更新周期标志位。该位为“
34、1”时,表示芯片正处于或将开始更新周期,此时程序不准读写时标寄存器;该位为“0”时,表示至少在244us后才开始更新周期,此时程序可读芯片内时标寄存器,该位是只读位。 (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、RS
35、0:周期中断可编程方波输出速率选择位。各种不同的组合可以产生不同的输出。程序可以通过设置寄存器B的SQWF和PIE位控制是否允许周期中断方波输出,其寄存器A输出速率选择位如表2.4所示。 表2.4 DS12887控制寄存器A输出速率选择位定义寄存器A输出速率选择位32768Hz时的状态RS3 RS2RS1RS0中断周期SQWF输出频率0 000无无0 0013.96625ms256Hz0 0107.8125ms128Hz0 011122.07us8.192kHz0 100244.141us4.096kHz0 101488.281us2.048kHz0 110976.562us1.024kHz0
36、 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 允许读写,主要用于控制芯片的工作状态。寄存器B 的控制字的格式如表4 所列。表4 DS12887 控制寄存器B各布尔位定义BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0SETPIEAIEUI
37、ESQWEDM24/12DSE4、 SET 位:当该位为“0”时,芯片处于正常工作状态,每秒产生一个更新周期来更新时标寄存器。为“1”时,芯片停止工作,程序在此期间可初始化芯片的各个时标寄存器。(2) PIE、AIE、UIE 位:分别为周期中断、报警中断、更新周期结束中断允许位。各位为“1”时,允许芯片发相应的中断。(3) SQWE 位: 方波输出允许位。SQWE =“1”,按寄存器A 输速率选择位所确定的频率输出方波;SQWE =“0”,脚SQW 保持低电平。(4) DM 位:时标寄存器用十进制BCD 码表示或用二进制表示格式选择位。DM =“0”时,为十进制BCD 码;DM =“1”时,为
38、二进制码。(5) 24/ 12 位: 24/ 12 小时模式设置位。24/ 12位=“1”时,为24 小时工作模式;24/ 12 位=“0”时,为12 小时工作模式。(6) DSE 位:夏令时服务位。DSE =“1”,夏时制设置有效,夏时制结束可自动刷新恢复时间;DSE=“0”,无效。寄存器C寄存器C 的控制字的格式如表5 所列。该寄存器的特点是程序访问读该寄存器后,该寄存器的内容将自动清零,从而使IRQF 标志位变为高电平,否则,芯片将无法向CPU 申请下一次中断。表5 DS12887 控制寄存器C各布尔位定义BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0IRQFPFAFU
39、F00006. IRQF 位:中断申请标志位。该位逻辑表达式为: IRQF = PFPIE + AFAIE + UFUIE。当IRQF 位变“1”时,引脚将变低电平引发中断申请。(2) PF、AF、UF 位:这三位分别为周期中断、报警中断、更新周期结束中断标志位。只要满足各中断的条件,相应的中断标志位将置“1”。(3) BIT3BIT0 :未定义的保留位。读出值始终为0 。寄存器D寄存器D 为只读寄存器。寄存器D 的控制字的格式如表6 所示。表6 DS12887 控制寄存器D 各布尔位定义BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0VRT0000000(1) VRT 位:芯
40、片内部RAM 与寄存器内容有效标志位。该位为“1”时,指芯片内部RAM 和寄存器内容有效。读该寄存器后,该位将自动置“1”。(2) BIT6BIT0 位:保留位。读出的数值始终为0 。(4)DS12887的中断和更新周期 DS12887处于正常工作状态时,每秒钟将产生一个更新周期,芯片处于更新周期的标志是寄存器A中的UIP位为“1”。在更新周期内,芯片内部时标寄存器数据处于更新阶段,故在该周期内,微处理器不能读芯片时标寄存器的内容,否则将得到不确定数据。更新周期的基本功能主要是刷新各个时标寄存器中的内容,同时秒时标寄存器内容加1,并检查其他时标寄存器内容是否有溢出,如果有溢出则相应进位日、月、
41、年。为了采样时标寄存器中的数据,DS12887提供了两种避开更新周期内访问时标寄存器的方案:第一种是利用更新周期结束发出的中断。它可以编程允许在每次更新周期结束后发生中断申请,提醒CPU将有998ms左右的时间去获取有效的数据,在中断之后的998ms时间内,程序可先将时标数据读支芯片内部的不掉电静态RAM中。因为芯片内部的静态RAM和状态寄存器是可随时读写的,在离开中断服务子程序前应清除寄存器C中的IRQF位。另一种是:利用寄存器A中的UIP位来指示芯片是否处于更新周期。在UIP位从低变高244us后,芯片将开始其更新周期,所以检测到UIP位为低电平时,则利用224us的间隔时间去读取时标信息
42、。如检测到UIP位为“1”,则可暂缓读数据,等到UIP变成低电平再去读数据。 (5) DS12887初始化方法 DS12887采取连续工作制,一般无须每次都初始化,即使是系统复位时也如此。但初始化时,首先应禁止芯片内部的更新周期操作,所以先将DS12887状态寄存器B中的SET位置“1”,然后初始化00H09H时标参数寄存器和状态寄存器A,此后再通过读状态寄存器C,清除寄存器C中的周期中断标志位PF,报警中断标志位AF,更新周期结束中断标志位UF。通过读寄存器口D中的VRT位,读状态寄存器口后VRT位将自动置“1”,最后将状态寄存器B中的SET位置“0”,芯片开始计时工作。 三、电路与程序设计
43、 一、系统功能该系统实现了日期时间年月日十分秒的显示功能,二、程序流程图 2、主程序清单;定义 DS12887 的地址;-SECOND EQU 7f00H ; 秒寄存器MINUTE EQU 7f02H ; 分寄存器HOUR EQU 7f04H ; 时寄存器DATE EQU 7f07H ; 日寄存器MONTH EQU 7f08H ; 月寄存器YEAR EQU 7f09H ; 年寄存器REG_A EQU 7f0AH ; 寄存器 AREG_B EQU 7f0BH ; 寄存器 BREG_C EQU 7f0CH ; 寄存器 CREG_D EQU 7f0DH ; 寄存器 D;-SECOND_BUFFER EQU 51H ;秒缓冲区MINUTE_BUFFER EQU 52H ;分缓冲区HOUR_BUFFER EQU 53H ;时缓冲区DATE_BUFFER EQU