时钟芯片PCF8583应用

来源:百度文库 编辑:神马文学网 时间:2024/04/28 22:23:44

时钟芯片PCF8583应用

实用技术杂谈 2010-05-08 08:25:50 阅读993 评论0   字号: 订阅

0  引言
电压监测统计仪是一种在线监测电网电压质量、统计每分钟瞬时电压、每分钟最大电压、每分钟最小电压以及平均电压、电压合格率、电压超上限率、电压超下限率等功能的仪表。从以上功能可得出,电压监测统计仪除了测量电压精度这一因素外,还有一重要因素就是时间的准确性。利用PCF8583串行时钟芯片成功的应用在电压监测仪校验装置中,既实现了电压的可程控信号输出,从而可测量电压监测统计仪的电压精度指标,又实现了一个标准时钟,从而可对电压监测统计仪的时间进行比对,实现校准。

1  PCF8583的基本功能特点
PCF8583是飞利浦公司推出的I2C总线接口实时时钟芯片,它可独立于CPU工作,不受CPU主晶振及共电容的影响,且计时准确。具有4年日历时钟,12或24小时格式,时基可用32.768KHz或50Hz,带可编程的闹钟,定时和中断功能的日历时钟芯片。芯片具有体积小、硬件连线少、带有256字节的静态RAM等特点。对于PCF8583在电压监测仪校验装置中的应用,主要是用它的实时时钟计数功能,以及标准脉冲输出功能。

2  PCF8583的寄存器结构
在时钟方式下,PCF8583中的寄存器结构地址分配为:00H~07H为时间寄存器地址编码; 08H~0FH为定时器起闹寄存器地址编码,作起闹时间或通用RAM之用;10H~FFH为通用静态RAM。其中00H为控制状态寄存器,01H为 1/100秒寄存器,02H为秒寄存器,03H为分寄存器,04H为时寄存器,05H为年/日寄存器,06H为星期/月寄存器,07H为定时寄存器。有关控制寄存器、时寄存器、年/日寄存器、星期/月寄存器的内部格式详述如下:        

数据格式为:

⑴ 控制寄存器(00H)
   D7位:计数、停止计数位。D7=0,启动对脉冲计数;D7=1,停止计数。
   D6位:保持最新计数位。D6=0,计数;D6=1,保持和存储最新计数值到捕捉寄存器中。
   D5D4位:功能方式选择位。D5D4=00,选择32.768KHz时钟方式。
                            D5D4=01,选择50Hz时钟方式。
                            D5D4=10,事件计数方式。
                            D5D4=11,测试方式。
   D3位:标志位。D3=0,读05H、06HRAM单元时不屏蔽。
                  D3=1,对05H、06HRAM单元只读出月、日计数值。
   D2位:起闹使能位。D2=0,不能起闹;D2=0,允许起闹寄存器使能。
   D1位:起闹标志位。D1=0,占空比为50%的分标志 。
   D0位:定时器标志位。D0=0,占空比为50%的秒标志 。

⑵ 时寄存器(04H)
   D7位:计时格式。D7=0,24小时制,AM、PM标志不变。
                    D7=1,12小时制,AM、PM标志更新。
   D6位:上午(AM)、下午(PM)标志。D6=0,AM;D6=1,PM。
   D5D4位:钟点十位(二进制0~2)。
   D3D2D1D0位:钟点个位(BCD码)。
⑶ 年/日寄存器(05H)
D7D6位:年份(二进制0~3)。
    D5D4位:日期十位(二进制0~3)。
    D3D2D1D0位:日期个位(BCD码0~9)。
⑷ 星期/月寄存器(06H)
D7D6D5位:星期(二进制0~6)。
    D4位:月份十位( 0~1)。
    D3D2D1D0位:月份个位(BCD码0~9)。

3  硬件接口电路
    PCF8583作为I2C总线接口芯片,采用二线通信传输方式。即主要通过时钟线SCL和数据线SDA进行双向传输。由于I2C总线是同步串行数据传输总线,其内部为双向传输电路,端口输出为开漏结构,故总线上必须有上拉电阻,通常可取5~10KΩ。PCF8583与AT89C52单片机的硬件接口电路如图1所示。采用了内带恒温槽、高稳定度的DS32KHz标准晶体振器,代替了使用32.768KHz普通晶振的方案。虽然这二种方案都能产生 PCF8583时钟芯片所需要的频率,但是利用DS32KHz产生的晶振频率精度为±1分钟/年。而PCF8583时钟芯片时间的准确性完全取决于晶振频率的准确稳定性。因此,经过图1电路改进后的方案确保了电压监测仪校验装置的时间标准,同时还可把32.768KHz频率输出,作为利用比较法校验电压监测统计仪的标准脉冲。由于考虑到PCF8583内部不带锂离子电池,故外带锂离子电池来保证PCF8583的时钟供电。图1中R1和R2为I2C总线所需要的上拉电阻。P1.4口作为发送时钟信号,P1.5口作为发送或接收数据信号。

4  PCF8583接口程序设计格式
4.1 PCF8583I2C总线上的信号说明
由于 PCF8583为I2C总线接口芯片,因此它的数据操作格式是完全按照I2C总线上的信号读、写操作进行的。其中,I2C总线上的信号如图2所示。启动信号(S)出现在时钟脉冲SCL为高电平,且数据线SDA由高电平到低电平的变化时;停止信号(P)出现在时钟脉冲SCL为高电平,且数据线SDA由低电平到高电平的变化时;应答信号(A)出现在I2C总线上的第9个时钟脉冲SCL为高电平,且相应的数据线SDA为低电平时;非应答信号(/A)出现在I2C 总线上的第9个时钟脉冲SCL为高电平,且相应的数据线SDA为高电平时;数据位传送为I2C总线启动后或应答信号启动后的第1~8个时钟脉冲所对应的一个字节的8位数据传送。数据传送按照先高后低位的原则进行读或写。
SDA
SCL 
   (a) 启动信号(S)   (b) 停止信号(P)  (c) 应答信号(A) (d) 非应答信号(/A)

 

4.2 PCF8583读、写操作格式
PCF8583一次数据操作格式包括起始信号(S)、发送读或写寻址字节、 应答信号、发送数据字节、应答信号……直到发送停止信号(P)。在本文应用中,是按以下两种操作格式来编写程序的。⑴ PCF8583 写操作格式PCF8583 写操作格式如下所示,是指从指定单元首地址(word address)开始依次写入几个字节数据。其中slave address1为PCF8583器件写地址,date1~daten为n个字节数据。

⑵ PCF8583 读操作格式
PCF8583 读操作格式如下所示,先写入要读出的n个字节数据存入指定单元首地址(word address)开始的RAM单元中,然后才开始读数据,其中slave address2为PCF8583器件读地址。

5  PCF8583软件编程
根据图1所示的接口电路,PCF8583的写地址为#0A0H,读地址为#0A1H。在对PCF8583进行数据写入时,应先将日历时钟信息存放于单片机内部从10H开始的8 个RAM单元,而从PCF8583读出的数据同样需存放在其中。下面是根据图1电路编制的读写PCF8583时钟的部分软件:
⑴ 变量定义                         ⑶ 读时钟数据
SCL     BIT   P1.4               RD_NUM:       LCALL   ST     
SDA     BIT   P1.5     MOV   A, #0A0H   
year    EQU   10H                              LCALL   WRI
month   EQU   11H                              MOV   A, #06H
date    EQU   12H                              LCALL   WRI
hours   EQU   13H                              LCALL   ST
minutes EQU   14H                              MOV   A, #0A1H
seconds EQU   15H                              LCALL   WRI
weekday EQU   16H                 RD_BYTE:     MOV   R3, #8
⑵ 校准写时钟数据                                  SETB   SDA
WR_NUMBER:  LCALL   ST                RD_BYTE1:    NOP
         MOV   A, #0A0H                         SETB   SCL
         LCALL   WRI                            MOV   C, SDA
         MOV   A , #00H                         RLC   A
         LCALL   WRI                            CLR   SCL
         MOV   A,   #80H                        DJNZ   R3,  RD_BYTE1
         LCALL   WRI                            LCALL   STOP
         MOV A , seconds                        RET
         LCALL WRI                ⑷ 写一个字节数据
         mov a , minutes             WRI:    MOV   R3, #8
            lcall wri                   WRI1:      RLC   A
         MOV A , hours                          MOV   SDA , C
         ANL A , #3FH                           SETB   SCL
         MOV hours , A                          NOP
         lcall wri                              CLR   SCL
         MOV A , YEAR                           DJNZ   R3, WRI1
         SWAP A                                 SETB   SDA
         RL A                                   SETB   SCL
         RL A                                   NOP
         ORL A , DATE                           CLR SCL
         lcall wri                              RET
         MOV A , WEEKDAY
         SWAP A
         RL A
         ORL A , month
         lcall wri
         LCALL   STOP
         RET
⑸ 启动I2C总线                      ⑹ 停止I2C总线
  ST:     SETB   SDA               STOP:     CLR   SDA
            SETB   SCL                                  SETB   SCL
            CLR   SDA                                    SETB   SDA
            CLR   SCL                                    NOP
            RET                                               RET