版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
..PCF8563時鐘芯片驅(qū)動詳解1概述PCF8563是PHILIPS公司推出的一款工業(yè)級含I2C總線接口功能的具有極低功耗的多功能時鐘/日歷芯片。PCF8563的多種報警功能、定時器功能、時鐘輸出功能以及中斷輸出功能能完成各種復雜的定時服務,甚至可為單片機提供看門狗功能。部時鐘電路、部振蕩電路、部低電壓檢測電路(1.0V)以及兩線制I2C總線通訊方式,不但使外圍電路及其簡潔,而且也增加了芯片的可靠性。同時每次讀寫數(shù)據(jù)后,嵌的字地址寄存器會自動產(chǎn)生增量。當然作為時鐘芯片,PCF8563亦解決了2000年問題。因而,PCF8563是一款性價比極高的時鐘芯片,它已被廣泛用于電表、水表、氣表、、傳真機、便攜式儀器以及電池供電的儀器儀表等產(chǎn)品領域。2原理圖38563源代碼//******************************************************//define//*****************************************************#define PCF8563_ADDR 0xa2 //PCF8563設備地址#define PCF8563_ENABLE 0x00 //設置#define PCF8563_SUBADDR 0x02 //時間地址#define PCF8563_NUMB 0x07 //時間個數(shù) #define PCF8563_LOOPTIME 0x02 //循環(huán)次數(shù)#define PCF8563_SECMASK 0x7f //second#define PCF8563_MINMASK 0x7f //minute#define PCF8563_HRMASK 0x3f //hour#define PCF8563_DAYMASK 0x3f //day#define PCF8563_WKMASK 0x07 //week#define PCF8563_MOMASK 0x1f //month#define PCF8563_YRMASK 0xff //year/*voidDELAY_US(Uint16i){ Uint16m,n;for(m=0;m<i;m++){for(n=0;n<5;n++){_nop_();}}}*//**********************************************************函數(shù)名稱:voidDELAY_MS(Uint16i) **功能描述:延時函數(shù) **輸入:延時毫秒數(shù)**輸出:無********************************************************///延時函數(shù)單位msvoidDELAY_MS(Uint16i){ Uint16m,n;for(m=0;m<i;m++){for(n=0;n<1000;n++){_nop_();} } }/**********************************************************函數(shù)名稱:InitCrt() **功能描述:SD2405的初始化 **輸入:無**輸出:無********************************************************/voidInitCrt(){//設備地址I2cDeviceAdd=PCF8563_ADDR;}/**********************************************************函數(shù)名稱:CrtGetDateTime(structSYSTEM_TIME*Time) **功能描述:讀取時間**說明:將從PCF8563中讀取的時間放入Time指向的結(jié)構(gòu)中 **輸入:無**輸出:無********************************************************/voidCrtGetDateTime(structSYSTEM_TIME*Time){Uint8buf[8];//設備地址I2cDeviceAdd=PCF8563_ADDR;SM_Receive(PCF8563_SUBADDR,buf,PCF8563_NUMB);Time->time.ucSecond=buf[0]; //秒Time->time.ucMinute=buf[1]; //分Time->time.ucHour=buf[2]; //時屏蔽最高位Time->date.ucDay=buf[3]; //日Time->Week=buf[4]; //星期Time->date.ucMonth=buf[5]; //月Time->date.ucYear=buf[6]; //年}/**********************************************************函數(shù)名稱:CrtSetDateTime(structSYSTEM_TIME*Time) **功能描述:設置時間**說明:將Time指向的結(jié)構(gòu)中日期時間參數(shù)設置到sd24.5中 **輸入:無**輸出:無********************************************************/voidCrtSetDateTime(structSYSTEM_TIME*Time){Uint8buf[8];//設備地址I2cDeviceAdd=PCF8563_ADDR;//寫入設置(時鐘工作、關閉復位、關閉測試模式)buf[0]=PCF8563_ENABLE;SM_Send(0,buf,0);//寫入日期時間buf[0]=Time->time.ucSecond; //秒buf[1]=Time->time.ucMinute; //分buf[2]=Time->time.ucHour|0x80; //時置為24小時格式buf[3]=Time->date.ucDay; //日buf[4]=Time->Week; //星期buf[5]=Time->date.ucMonth; //月buf[6]=Time->date.ucYear; //年SM_Send(PCF8563_SUBADDR,buf,PCF8563_NUMB);}4新華龍C8051F022的IIC驅(qū)動程序//-----------------------------------------------------------------------------//Includes//-----------------------------------------------------------------------------#include<c8051f020.h>//SFRdeclarations#include<stdio.h>#include<king.h>#include<DYSJ.h>#include<I2C.H>#defineSMB_FREQUENCY10000L//TargetSCLclockrate/********************************************************************************函數(shù)名稱:voidSPI0_Init()**功能描述:I2C初始化程序**說明:1.置下降沿有效2.置工作時鐘2MHz3.**輸入:無**輸出:無*******************************************************************************/voidI2C_Init(){SMB0CN=0x44; //EnableSMBuswithACKsonacknowledgecycleSMB0CR=-80; //257-(SYSCLK/(2*SMB_FREQUENCY));EIE1|=2; //SMBusinterruptenable// EA=1; //GlobalinterruptenableI2cSM_BUSY=0; //FreeSMBusforfirsttransfer.}/********************************************************************************函數(shù)名稱:voidSM_Send(Uint8byte_address,Uint8*SendBuf,Uint8count)**功能描述:I2C寫入程序**說明:1.等待空閑2.寫入數(shù)據(jù)3.等待結(jié)束**輸入:地址byte_address、寫入數(shù)據(jù)緩沖區(qū)*SendBuf、數(shù)量count**輸出:無*******************************************************************************/voidSM_Send(Uint8byte_address,Uint8*SendBuf,Uint8count){ET0=0; //禁止中斷ET2=0; //禁止中斷while(I2cSM_BUSY); //等待空閑I2cSM_BUSY=1; //置忙SMB0CN=0x44; //SMBusenabled,ACKonacknowledgecycleI2cSendCount=count; //置寫入數(shù)量I2cRecCount=0; //讀出數(shù)量清零I2cSendDPTR=SendBuf; //SMBusenabled,ACKonacknowledgecycleI2CWRITE; //Chipselect+WRITEI2cMemAdd=byte_address; STO=0;STA=1; //啟動傳輸FeedWatchdog();while(I2cSM_BUSY); //等待空閑ET0=1; //允許中斷ET2=1; //允許中斷}/********************************************************************************函數(shù)名稱:voidSM_Receive(Uint8byte_address,Uint8*ReadBuf,Uint8count)**功能描述:I2C讀取程序**說明:1.等待空閑2.置地址3.讀取數(shù)據(jù)3.等待結(jié)束**輸入:地址byte_address、讀取數(shù)據(jù)緩沖區(qū)*SendBuf、數(shù)量count**輸出:無*******************************************************************************/voidSM_Receive(Uint8byte_address,Uint8*ReadBuf,Uint8count){ET0=0; //禁止中斷ET2=0; //禁止中斷while(I2cSM_BUSY); //等待空閑I2cSM_BUSY=1; //置忙SMB0CN=0x44; //SMBusenabled,ACKonacknowledgecycleI2cSendCount=0; //置寫入數(shù)量I2CWRITE; //Chipselect+WRITEI2cMemAdd=byte_address; //值地址偏移I2cRecCount=count; //要接收的數(shù)據(jù)個數(shù)I2cRecDPTR=ReadBuf; //指向要接收的數(shù)據(jù)區(qū)STO=0;STA=1; //StarttransferFeedWatchdog();while(I2cSM_BUSY); //等待空閑ET0=1; //允許中斷ET2=1; //允許中斷}/********************************************************************************函數(shù)名稱:voidSMBUS_ISR(void)interrupt7**功能描述:I2C中斷服務程序**說明:1.選擇器件地址2.置讀寫地址3.讀取或?qū)懭霐?shù)據(jù)3.置結(jié)束標志**輸入:無**輸出:無*******************************************************************************/voidSMBUS_ISR(void)interrupt7{switch(SMB0STA)//StatuscodefortheSMBus(SMB0STAregister){//主發(fā)送器/接收器:起始條件已發(fā)送//在該狀態(tài)發(fā)送的COMMAND字的R/W位總是為0(W),//因為對于讀和寫操作來說都必須先寫存儲器地址。caseSMB_START:SMB0DAT=I2cCOMMAND; //寫入含讀寫指令的設備地址STA=0; //清除啟動標志break;//主發(fā)送器/接收器:重復起始條件已發(fā)送。//該狀態(tài)只應在讀操作期間出現(xiàn),在存儲器地址已發(fā)送并得到確認之后caseSMB_RP_START:I2CREAD; //置設備讀SMB0DAT=I2cCOMMAND; //寫入含讀寫指令的設備地址STA=0;break;//主發(fā)送器設備地址+(W/R)已發(fā)出。收到ACK。caseSMB_MTADDACK:SMB0DAT=I2cMemAdd; //發(fā)送要寫入的字節(jié)地址break;//主發(fā)送器從地址+W已發(fā)出。收到NACK。caseSMB_MTADDNACK:/* if(I2cSendCount) //傳輸結(jié)束{SMB0DAT=*I2cSendDPTR; //傳送數(shù)據(jù)I2cSendDPTR++;I2cSendCount--; }else{if(I2cRecCount){STO=0;STA=1;}else{STO=1; I2cSM_BUSY=0; //發(fā)送停止,釋放總線}}*/ STO=1;STA=1;break;//數(shù)據(jù)字節(jié)已經(jīng)發(fā)出,收到ACKcaseSMB_MTDBACK:if(I2cSendCount) //傳輸結(jié)束{SMB0DAT=*I2cSendDPTR; //傳送數(shù)據(jù)I2cSendDPTR++;I2cSendCount--; }else{if(I2cRecCount){STO=0;STA=1;}el
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川省瀘州市瀘縣2025-2026學年八年級上學期1月期末數(shù)學試題(含答案)
- 遼寧省葫蘆島市2026屆九年級上學期期末考試物理試卷(含答案)
- 吉林省吉林市蛟河市2025-2026學年七年級上學期1月期末考試生物試卷(含答案)
- 2025-2026學年山西省晉中市太谷區(qū)七年級(上)期末數(shù)學試卷(含答案)
- 虛擬化技術應用全面指南
- 化工企業(yè)技術管理
- 12月債券市場展望:降準降息預期不高債券仍處弱勢
- 飛機鉚接技術授課
- 國新資本有限公司相關崗位招聘16人備考考試試題及答案解析
- 2026年上半年黑龍江省商務廳事業(yè)單位公開招聘工作人員50人參考考試題庫及答案解析
- 耳鼻咽喉的應用解剖生理教案(2025-2026學年)
- 征兵言語測試真題及答案
- 2025至2030脫氧穿心蓮內(nèi)酯行業(yè)項目調(diào)研及市場前景預測評估報告
- 案例-華為從戰(zhàn)略到執(zhí)行的SDBE領先模型
- 江蘇省無錫市2025屆高三上學期期末教學質(zhì)量調(diào)研測試-數(shù)學試卷(含答案)
- 經(jīng)典名著《紅樓夢》閱讀任務單
- 古田會議學習課件
- 高寒地區(qū)建筑工程冬季施工技術規(guī)范研究
- 電流保護原理課件
- DBJT15-212-2021 智慧排水建設技術規(guī)范
- 民俗學課件萬建中
評論
0/150
提交評論