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