|
PCF8563 I2C 實(shí)時(shí)時(shí)鐘/日歷芯片
PCF8563引腳圖:
0.png (28.77 KB, 下載次數(shù): 36)
下載附件
2018-9-1 04:11 上傳
PCF8563管腳功能描述:
0.png (38.17 KB, 下載次數(shù): 35)
下載附件
2018-9-1 04:11 上傳
1.概述
PCF8563 是低功耗的 CMOS 實(shí)時(shí)時(shí)鐘/日歷芯片,它提供一個(gè)可編程時(shí)鐘輸出,一個(gè)中斷輸出和掉電檢測(cè)器,所有的地址和數(shù)據(jù)通過(guò) I2C 總線接口串行傳遞。最大總線速度為400Kbits/s,每次讀寫(xiě)數(shù)據(jù)后,內(nèi)嵌的字地址寄存器會(huì)自動(dòng)產(chǎn)生增量。
PCF8563電路原理圖如下:
0.jpg (33.89 KB, 下載次數(shù): 28)
下載附件
2018-9-1 04:08 上傳
PCF8563模塊 使用說(shuō)明
一、 接線說(shuō)明
1、 VCC為3.3/5V電壓均可,電壓再低一些可以工作,但不建議使用更低的電壓。
2、 GND連接電源的GND(一般VCC、GND從開(kāi)發(fā)板上都可以獲得)。
3、 SDA根據(jù)程序的定義進(jìn)行連接(打開(kāi)程序后,程序上有說(shuō)明)。
4、 SCL接線方式同SDA。
5、 CLKOUT為可編程的時(shí)鐘頻率輸出端,一般用不到。
INT為中斷輸出,一般用不到。
二、 原理圖
三、 程序下載
確定接線無(wú)誤后,把我們附帶的程序(51的程序,用STC89C52已經(jīng)調(diào)試通過(guò))下載到單片機(jī)(注意一定要跟我們程序上的單片機(jī)型號(hào)一樣,否則需要修改程序才能正常工作);下載完成后,打開(kāi)串口調(diào)試工具,當(dāng)出現(xiàn)以下提示時(shí),說(shuō)明時(shí)鐘已經(jīng)正常工作。測(cè)試完畢。
提醒:有什么問(wèn)題隨時(shí)溝通,不要遇到問(wèn)題就隨便給中評(píng)或差評(píng)或者在評(píng)論里亂寫(xiě)一通,這樣既解決不了問(wèn)題,對(duì)雙方都沒(méi)有任何好處,何不一塊商討解決問(wèn)題呢?通過(guò)這幾年發(fā)現(xiàn),出問(wèn)題的客戶基本都是缺乏對(duì)產(chǎn)品的理解,只有善于溝通才能解決問(wèn)題。
再次強(qiáng)調(diào)一下:此模塊原理圖和程序?yàn)楹U耠娮釉瓌?chuàng),如有借用,請(qǐng)標(biāo)明:此原理圖和程序引用 海振電子。
最后:相信我們會(huì)成為您以后工作和學(xué)習(xí)中的朋友,共同努力,朝著自己的目標(biāo)前進(jìn)。
PCF8563 有 16 個(gè)8位寄存器:一個(gè)可自動(dòng)增量的地址寄存器,一個(gè)內(nèi)置 32.768KHz 的振蕩器(帶有一個(gè)內(nèi)部集成的電容),一個(gè)分頻器(用于給實(shí)時(shí)時(shí)鐘 RTC 提供源時(shí)鐘),一個(gè)可編程時(shí)鐘輸出,一個(gè)定時(shí)器,一個(gè)報(bào)警器,一個(gè)掉電檢測(cè)器和一個(gè) 400KHz I2C總線接口。
所有 16 個(gè)寄存器設(shè)計(jì)成可尋址的 8 位并行寄存器,但不是所有位都有用。前兩個(gè)寄存器(內(nèi)存地址 00H,01H)用于控制寄存器和狀態(tài)寄存器,內(nèi)存地址 02H~08H 用于時(shí)鐘計(jì)數(shù)器(秒~年計(jì)數(shù)器),地址 09H~0CH 用于報(bào)警寄存器(定義報(bào)警條件),地址 0DH 控制CLKOUT 管腳的輸出頻率,地址 0EH 和 0FH 分別用于定時(shí)器控制寄存器和定時(shí)器寄存器。秒、分鐘、小時(shí)、日、月、年、分鐘報(bào)警、小時(shí)報(bào)警、日?qǐng)?bào)警寄存器,編碼格式為 BCD,星期和星期報(bào)警寄存器不以 BCD 格式編碼。當(dāng)一個(gè) RTC 寄存器被讀時(shí),所有計(jì)數(shù)器的內(nèi)容被鎖存,因此,在傳送條件下, 可以禁止對(duì)時(shí)鐘/日歷芯片的錯(cuò)讀。
完整的PCF8563中文資料請(qǐng)下載附件
PCF8563的單片機(jī)源程序如下:
- #include <reg52.h>
- #include <absacc.h>
- #include <intrins.h>
- #define uchar unsigned char
- extern uchar TX_buf[10];
- extern void uart_test(unsigned char length);
- sbit SDA=P1^0;
- sbit SCL=P1^1;
- uchar g8563_Store[6]; /*時(shí)間交換區(qū),全局變量聲明*/
- uchar code c8563_Store[6]={0x13,0x09,0x22,0x10,0x40,0x00}; /*寫(xiě)入時(shí)間初值:星期一 07:59:00*/
- /********************************************
- 內(nèi)部函數(shù),延時(shí)1
- ********************************************/
- void Delay()
- {
- _nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();/*根據(jù)晶振頻率制定延時(shí)時(shí)間*/
- }
- /********************************************
- 內(nèi)部函數(shù),I2C開(kāi)始
- ********************************************/
- void Start()
- {
- SDA=1;
- SCL=1;
- Delay();
- SDA=0;
- Delay();
- SCL=0;
- }
- /********************************************
- 內(nèi)部函數(shù),I2C結(jié)束
- ********************************************/
- void Stop()
- {
- SDA=0;
- SCL=0;
- Delay();
- SCL=1;
- Delay();
- SDA=1;
- Delay();
- }
- /********************************************
- 內(nèi)部函數(shù),輸出ACK ,每個(gè)字節(jié)傳輸完成,輸出ack=0,結(jié)束讀書(shū)據(jù),ack=1;
- ********************************************/
- void WriteACK(uchar ack)
- {
- SDA=ack;
- Delay();
- SCL=1;
- Delay();
- SCL=0;
- }
- /********************************************
- 內(nèi)部函數(shù),等待ACK
- ********************************************/
- void WaitACK()
- {
- uchar errtime=20;
- SDA=1;
- Delay(); /*讀ACK*/
- SCL=1;
- Delay();
- while(SDA)
- {
- errtime--;
- if(!errtime)
- Stop();
- }
- SCL=0;
- Delay();
- }
- /********************************************
- 內(nèi)部函數(shù).輸出數(shù)據(jù)字節(jié)
- 入口:B=數(shù)據(jù)
- ********************************************/
- void writebyte(uchar wdata)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- if(wdata&0x80)
- SDA=1;
- else
- SDA=0;
- wdata<<=1;
- SCL=1;
- Delay();
- SCL=0;
- }
- WaitACK(); //I2C器件或通訊出錯(cuò),將會(huì)退出I2C通訊
- }
- /********************************************
- 內(nèi)部函數(shù).輸入數(shù)據(jù)
- 出口:B
- ********************************************/
- uchar Readbyte()
- {
- uchar i,bytedata;
- SDA=1;
- for(i=0;i<8;i++)
- {
- SCL=1;
- bytedata<<=1;
- bytedata|=SDA;
- SCL=0;
- Delay();
- }
- return(bytedata);
- }
- /********************************************
- 輸出數(shù)據(jù)->pcf8563
- ********************************************/
- void writeData(uchar address,uchar mdata)
- {
- Start();
- writebyte(0xa2); /*寫(xiě)命令*/
- writebyte(address); /*寫(xiě)地址*/
- writebyte(mdata); /*寫(xiě)數(shù)據(jù)*/
- Stop();
- }
- /********************************************
- 輸入數(shù)據(jù)<-pcf8563
- ********************************************/
- /*uchar ReadData(uchar address) //單字節(jié)
- {
- uchar rdata;
- Start();
- writebyte(0xa2); //寫(xiě)命令
- writebyte(address); //寫(xiě)地址
- Start();
- writebyte(0xa3); //讀命令
- rdata=Readbyte();
- WriteACK(1);
- Stop();
- return(rdata);
- } */
- void ReadData1(uchar address,uchar count,uchar * buff) /*多字節(jié)*/
- {
- uchar i;
- Start();
- writebyte(0xa2); /*寫(xiě)命令*/
- writebyte(address); /*寫(xiě)地址*/
- Start();
- writebyte(0xa3); /*讀命令*/
- for(i=0;i<count;i++)
- {
- buff[i]=Readbyte();
- if(i<count-1)
- WriteACK(0);
- }
- WriteACK(1);
- Stop();
- }
- /********************************************
- 內(nèi)部函數(shù),讀入時(shí)間到內(nèi)部緩沖區(qū)
- ********************************************/
- void P8563_Read()
- {
- uchar time[7];
- ReadData1(0x02,0x07,time);
- g8563_Store[0]=time[0]&0x7f; /*秒 */
- g8563_Store[1]=time[1]&0x7f; /*分 */
- g8563_Store[2]=time[2]&0x3f; /*小時(shí) */
- g8563_Store[3]=time[3]&0x3f; /*日 */
- g8563_Store[4]=time[5]&0x1f; /*月 */
- g8563_Store[5]=time[6]; /*年 */
- TX_buf[0] = g8563_Store[5];
- TX_buf[1] = g8563_Store[4];
- TX_buf[2] = g8563_Store[3];
- TX_buf[3] = g8563_Store[2];
- TX_buf[4] = g8563_Store[1];
- TX_buf[5] = g8563_Store[0];
- uart_test(6);
- }
- /********************************************
- 讀入時(shí)間到內(nèi)部緩沖區(qū)----外部調(diào)用
- ********************************************/
- void P8563_gettime()
- {
- P8563_Read();
- if(g8563_Store[0]==0)
- P8563_Read(); /*如果為秒=0,為防止時(shí)間變化,再讀一次*/
- }
- /********************************************
- 寫(xiě)時(shí)間修改值
- ********************************************/
- void P8563_settime()
- {
- //uchar i;
- writeData(8,g8563_Store[0]); //年
- writeData(7,g8563_Store[1]); //月
- writeData(5,g8563_Store[2]); //日
- writeData(4,g8563_Store[3]); //時(shí)
- writeData(3,g8563_Store[4]); //分
- writeData(2,g8563_Store[5]); //秒
- }
- /********************************************
- P8563的初始化-----外部調(diào)用
- ********************************************/
- void P8563_init()
- {
- uchar i;
- // P8563_settime();
- for(i=0;i<=5;i++) g8563_Store[i]=c8563_Store[i]; /*初始化時(shí)間*/
- P8563_settime();
- // if((ReadData(0x0a)&0x3f)!=0x08) /*檢查是否第一次啟動(dòng),是則初始化時(shí)間*/
- // {
- // P3_4 = 0;
- // for(i=0;i<=3;i++) g8563_Store[i]=c8563_Store[i]; /*初始化時(shí)間*/
- // P8563_settime();
- // writeData(0x0,0x00);
- // writeData(0xa,0x8); /*8:00報(bào)警*/
- // writeData(0x1,0x12); /*報(bào)警有效*/
- // writeData(0xd,0xf0); //編程輸出32.768K的頻率
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png (46.49 KB, 下載次數(shù): 33)
下載附件
2018-9-1 04:13 上傳
所有資料51hei提供下載:
PCF8563模塊 發(fā)貨資料.rar
(445.6 KB, 下載次數(shù): 102)
2018-9-1 04:16 上傳
點(diǎn)擊文件名下載附件
|
|