跟我学51单片机_十二_实时时钟_日历芯片PCF8563
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
IIC_WaitAck();
(28)
IIC_write_byte(addr);
(29)
IIC_WaitAck();
(30)
IIC_Start();
(31)
IIC_write_byte(0xA3);
(32)
IIC_WaitAck();
(33)
for(i=0;i<count;i++)
(34)
{
buff[i]=IIC_read_byte();
因为PCF8563的读地址为0xA3,即准备开始读取。
(19)调用等待应答信号子函数,等待应答。
(20)将读到的值赋给之前定义的变量。
(21)因为只读一个字节,所以不发送应答信号。 (22)调用I2C总线发送停止信号函数,停止通信。
(23)将读到的值返回。
往PCF8563内寄存器读多字节函数
addr:开始读的寄存器首地址。count:读取几个字节;buff:所读到的
0CH
星期报警
AE
—
—
—
—
0~6
各寄存器的结构可如表2,表3所示。 其中标明“-”的位无效,标明“0”的位应置逻辑。 在这里详细介绍几个常用的寄存器 控制/状态寄存器1(地址00H)位描述 TEST1:TEST1=0,普通模式;TEST1=1,EXT_CLK 测试 模式。 STOP:STOP=0,芯片时钟运行;STOP=1,所有芯片 分频器异步置逻辑0,芯片时钟停止运行。 TESTC:TESTC=0;电源复位功能失效(普通模式时置 逻辑0)。TESTC=1,电源复位功能有效。 其余位置逻辑0。 秒、分钟和小时寄存器 VL:VL=0,保证准确的时钟/日历数据;VL=1,不保
往PCF8563内寄存器写一字节函数
addr:要写的寄存器地址;val:寄存器要写入的值
void PCF8563_Write_Byte(unsigned char addr,unsigned char val)(1)
{
IIC_Start();
(2)
IIC_write_byte(0xA2);
(3)
IIC_WaitAck();
(19)
dat=IIC_read_byte();
(20)
IIC_SendNoAck();
(21)
IIC_Stop();
(22)
return(dat);
(23)
}
(10)函数定义。
(11)定义一个无符号变量,作为返回值。 (12)调用I2C总线发送起始信号函数,开始通信。 (13)调用I2C总线写一字节函数,写入0xA2。这是
PCF8563内的16个寄存器设计成可寻址的8位并行寄存器 ,但不是所有位都有用。现对其地址进行简要说明如下:
前两个寄存器内存地址00H,01H用于控制寄存器和状 态寄存器。
02H~08H内存地址用于时钟计数器秒~年计数器地址。 09H~0CH 用于报警寄存器(需定义报警条件)。 0DH地址控制CLKOUT 管脚的输出频率。 0EH和0FH地址分别用于定时器控制寄存器和定时器寄 存器。 此外,秒、分钟、小时、日、月、年、分钟报警、小 时报警、日报警寄存器编码格式为BCD ,星期和星期报警 寄存器不以BCD格式编码。
字节
void PCF8563_Read_NByte(unsigned char addr,unsigned char count,unsigned
char *buff) (24)
{
unsigned char i;
(25)
IIC_Start();
(26)
IIC_write_byte(0xA2);
(27)
{
unsigned char dat;
(11)
IIC_Start();
(12)
IIC_write_byte(0xA2);
(13)
IIC_WaitAck();
(14)
IIC_write_byte(addr);
(15)
IC_WaitAck();
(16)
IIC_Start();
(17)
IIC_WaitAck();
99,例如:<秒>=1001001,代表49 秒。
电路详解
此讲的电路图如图2所示。 如图2(a)中所示,PCF8563需外接一个32.768kHz 的晶振提供时钟,其中I2C接口器件的数据端(SDA)时 钟端(SCL)为开漏结构所需的上拉电阻与上讲中的电 阻共用。此外学习板上还引出了时钟输出管脚和中断输 出管脚。电容C19用于电源去耦滤波,保证PCF8563稳定 工作。 此外,为了显示方便和结合前几讲液晶显示实例,本 讲电路图中采用了1602液晶进行显示,见图2(b)。
OSCI 1 OSCO 2
INT 3 VSS 4
PCF8563P PCF8563T PCF8563TS
5 VDD 6 CLKOUT 7 SCL 8 SDA
72 2011. 12 www.ele169.com
图1 PCF8563的管脚排列
PCF8563有16个位寄存器,一个可自动增量的地址寄存 器,一个内置32.768kHz的振荡器,带有一个内部集成的电容 ,一个分频器用于给实时时钟RTC 提供源时钟,一个可编程 时钟输出,一个定时器,一个报警器,一个掉电检测器和一 个400kHz I2C 总线接口。
(33)调用等待应答信号子函数,等待应答。 (34)要读取几字节就循环几次。 (35)将读取到的字节存放到buff数组中。 (36)如果不是读到最后一个字节。 (37)调用放送应答信号函数,对每一字节进行应答。 (38)最后一个字节,不发送应答信号。 (39)调用I2C总线发送停止信号函数,停止通信。 为了达到验证PCF8563的读写正确功能,采用1602液 晶上显示PCF8563中日历时间的方法,即开启PCF8563的时 钟功能,让后将其内部时钟寄存器的值读出来显示。如果 所读出来的时间为设定时间并运行正常,则表示操作正确 以及PCF8563工作正常。
表1 PCF8563的管脚功能 符号 OSCI OSCO /INT VSS SDA SCL
CLKOUT VDD
管脚号 1 2 3 4 5 6 7 8
功能描述 振荡器输入 振荡器输出 中断输出(开漏,低电 平有效)
地 串行数据 I/O 串行时钟输入 时钟输出 (开漏)
正电源
制作入门
当PCF8563内部的一个寄存器被读时所有计数器的内容被 锁存,因此在传送条件下可以禁止对时钟日历芯片的错读。
证准确的时钟/日历数据。 其余位表示的是BCD 格式的当前秒数值,值为00~
表2寄存器概况
地址
寄存器名称
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
00H
控制/状态寄存器1
TEST
0
STOP
0
源自文库
TESTC
0
0
0
01H
控制/状态寄存器2
0
0
0
TI/TP
AF
TF
AIE
TIE
0DH
CLKOUT 频率寄存器
因为PCF8563的写地址为0xA2,即选中PCF8563。
(28)调用等待应答信号子函数,等待应答。 (29)调用I2C总线写一字节函数,写入要读的地址。
(30)调用等待应答信号子函数,等待应答。 (31)调用I2C总线发送起始信号函数,重新开始通信。
(32)调用I2C总线写一字节函数,写入0xA3。这是 因为PCF8563的读地址为0xA3,即准备开始读取。
(4)
IIC_write_byte(addr);
(5)
IIC_WaitAck();
(6)
IIC_write_byte(val);
(7)
IIC_WaitAck();
(8)
IIC_Stop();
(9)
}
(1)函数定义。 (2)调用I2C总线发送起始信号函数,开始通信。 (3)调用I2C总线写一字节函数,写入0xA2。这是因 为PCF8563的写地址为0xA2,即选中PCF8563并让其做好被 写入准备。 (4)调用等待应答信号子函数,等待应答。 (5)调用I2C总线写一字节函数,写入要写的寄存器 地址。 (6)调用等待应答信号子函数,等待应答。 (7)调用I2C总线写一字节函数,往寄存器中写入要 赋的值。
www.ele169.com 2011. 12 73
制作入门
C19 VCC
Y2 1 2
32.768k INT3 4
PCF8563
OSC1 VDD OSC2 CLKout
INT
SCL
VSS SDA
104
8
R23 R24
7 CLKout 1k 1k
6 SCL
P16
5 SDA
P17
Vss VDD
VO RS R/W
原理简介
PCF8563 是PHILIPS 公司推出的一款工业级内含I2C 总线接口功能的具有极低功耗的多功能时钟/日历芯片。 其具有多种报警功能、定时器功能、时钟输出功能以及中 断输出功能,能完成各种复杂的定时服务。同时,其内嵌 的字地址寄存器会自动产生增量。因此被广泛用于工控仪 表、便携式仪器等产品领域。其主要特点如下:
E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 BL+ BL-
+5
R12
P05
10 k
P06
P07
P20
P21
P22
P23
P24
P25
P26
P27
+5
(a)PCF8563电路
(b)1602液晶显示电路 图2
程序设计
上期详细介绍了I2C总线通信协议的起始、应答、停 止等多个子程序,本文对此不再作叙述,而是在调用I2C 总线通信子程序的基础上对PCF8563进行读写。
调试要点与实验现象
连接好开发板硬件电路,通过冷启动方式将程序所生 成的.hex文件下载到单片机后,复位单片机,然后就可在 在1602液晶上显示出从PCF8563中读出来的时间,小时、 分钟和秒如图3所示。
调试时,除了要对上讲的I2C总线通信协议注意外,为 了显示的直观和方便,应当将所读到的BCD码格式数转换为 十进制数,在本讲的程序中采用的就是PCF8563_Store[0]/16 得到秒时钟十位,PCF8563_Store[0]%16得到秒时钟个位的方 法。也可以采用移位运算的方法,请读者自行研究学习。
FE
—
—
—
—
—
FD1
FD0
0EH
定时器控制寄存器
TE
—
—
—
—
—
TD1
TD0
0FH
定时器倒计数数值寄存器
定时器倒计数数值
表2 BCD 格式寄存器概况
地址
寄存器名称
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
02H
秒
03H
分钟
04H
小时
05H
日
VL
00~59BCD 码格式数
—
00~59BCD 码格式数
(8)调用等待应答信号子函数,等待应答。 (9)调用I2C总线发送停止信号函数,该次操作完 毕,停止通信。
往PCF8563内寄存器读一字节函数
addr:要读的寄存器地址;dat:所读到的值。
unsigned char PCF8563_Read_Byte(unsigned char addr) (10)
因为PCF8563的写地址为0xA2,即选中PCF8563。
(14)调用等待应答信号子函数,等待应答。 (15)调用I2C总线写一字节函数,写入要读的地址。
(16)调用等待应答信号子函数,等待应答。
74 2011. 12 www.ele169.com
制作入门
(17)调用I2C总线发送起始信号函数,重新开始通信。 (18)调用I2C总线写一字节函数,写入0xA3。这是
①宽电压范围1.0~5.5V,复位电压标准值Vlow=0.9V。 ②超低功耗。 ③可编程时钟输出频率为:32.768kHz、1024Hz、 32Hz、1Hz。 ④四种报警功能和定时器功能。 ⑤内含复位电路振荡器电容和掉电检测电路。 ⑥开漏中断输出。 PCF8563的管脚排列如图1所示,各管脚功能如表1 所示。
—
—
—
00~59BCD 码格式数
—
—
—
01~31BCD 码格式数
06H
星期
—
—
—
—
—
0~6
07H
月/世纪
C
—
—
01~12 BCD 码格式数
08H
年
00~99 BCD 码格式数
09H
分钟报警
AE
00~59 BCD 码格式数
0AH
小时报警
AE
—
00~23 BCD 码格式数
0BH
日报警
AE
—
01~31 BCD 码格式数
制作入门
跟我学51单片机(十二)
——实时时钟/日历芯片PCF8563
●●●
作者 / 赵亮
上期介绍了单片机外接I2C总线的原理,并以E2PROM 芯片AT24LC02为实例进行了应用。本期将介绍另一款 I2C总线接口的实时时钟/日历芯片——PCF8563。通过 本期,读者可以熟练掌握单片机模拟I2C总线通信以及 PCF8563的原理与应用。
(35)
if(i<count-1)
(36)
IIC_SendAck();
(37)
}
IIC_SendNoAck();
(38)
IIC_Stop();
(39)
}
(24)函数定义。
(25)定义一个无符号变量。 (26)调用I2C总线发送起始信号函数,开始通信。 (27)调用I2C总线写一字节函数,写入0xA2。这是