<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 測試測量 > 設計應用 > 外國器件PCF8563I2C實(shí)時(shí)時(shí)鐘/日歷芯片在8051系統中的應用

外國器件PCF8563I2C實(shí)時(shí)時(shí)鐘/日歷芯片在8051系統中的應用

作者: 時(shí)間:2006-05-07 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:PCF8563是PLILIPS公司生產(chǎn)的低功耗CMOS實(shí)時(shí)時(shí)鐘/日歷芯片,文中介紹了PCF8563的結構、功能及工作原理。結合其在8051系統中的應用實(shí)例,給出了PCF8563與8051單片機的硬件接口電路和C語(yǔ)言軟件編程程序。

本文引用地址:http://dyxdggzs.com/article/255593.htm

關(guān)鍵詞:I2C總線(xiàn) 串行接口 PCF8563 BCD碼 C語(yǔ)言

1 PCF8563簡(jiǎn)介

PCF8563是PHILIPS公司生產(chǎn)的低功耗CMOS實(shí)時(shí)時(shí)鐘/日歷芯片,芯片最大總線(xiàn)速度為400kbits/s,每次讀寫(xiě)數據后,其內嵌的字地址寄存器器會(huì )自動(dòng)產(chǎn)生增量。PCF8563可廣泛應用于移動(dòng)電話(huà)、便攜儀器、傳真機、電池電源等產(chǎn)品中。

PCF8563的引腳排列如圖1所示,各引腳功能說(shuō)明如表1所列。

PCF8563有16個(gè)8位寄存器,其中包括:可自動(dòng)增量的地址寄存器、內置32.768kHz的振蕩器(帶有一個(gè)內部集成電容)、分頻器(用于給實(shí)時(shí)時(shí)鐘RTC提供源時(shí)鐘)、可編程時(shí)鐘輸出、定時(shí)器、報警器、掉電檢測器和400kHz的I2C總線(xiàn)接口。

所有16個(gè)寄存器設計成可尋址的8位并行寄存器,但不是所有位都有用。當一個(gè)RTC寄存器被讀時(shí),所有計數器的內容將被鎖存,因此,在傳送條件下,可以禁止對時(shí)鐘/日歷芯片的錯讀。

表2、表3所列為各寄存器概況及對應的內存地址和功能,同時(shí)列出了它們的BCD格式編碼。表中“——”表示無(wú)效位,“0”表示此位應置邏輯。表3中的世紀位C=0指定世紀數為20XX,C=1指定世紀數為19XX。當年寄存器中的99變00時(shí),世紀位才會(huì )改變。

表1 PCF8563的管腳描述

符 號 管腳號

描 述

OSCI 1 振蕩器輸入
OSCO 2 振蕩器輸出
INT 3 終端輸出(開(kāi)漏:低電平有效)
Vss 4
SDA 5 串行數據I/O
SCL 6 串行時(shí)鐘輸入
CLKOUT 7 時(shí)鐘輸出(開(kāi)漏)
VDD 8 正電源

2 I2C總線(xiàn)

2.1 I2C總線(xiàn)特性

I2C總線(xiàn)用兩條線(xiàn)(SDA和SCL)在芯片和模塊間傳遞信息。SDA為串行數據線(xiàn),SCL為串行時(shí)鐘線(xiàn),這兩條線(xiàn)必須用一個(gè)上拉電阻與正電源相連,其數據只有在總線(xiàn)不忙時(shí)才可傳送。I2C總線(xiàn)的系統配置參見(jiàn)圖2,產(chǎn)生信號的設備是傳送器,接收信號的設備是接收器,控制信號的設備是主設備,受控制信號的設備是從設備。

表2 寄存器概況

地址 寄存器名稱(chēng) Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
00H 控制/狀態(tài)寄存器1 TEST 0 STOP 0 TESTC 0 0 0
01H 控制/狀態(tài)寄存器2 0 0 0 TI/TP AF TF AIE TIE
0DH CLKOUT頻率寄存器 FE FD1 FD0
0EH 定時(shí)器控制寄存器 TE TD1 TD0
0FH 定時(shí)器倒計數數值寄存器 定時(shí)器倒計數數值

表3 BCD格式寄存器概況

地 址 寄存器名稱(chēng) Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
01H VL 00~59BCD碼格式數
03H 分鐘 - 00~59BCD碼格式數
04H 小時(shí) - - 00~23BCD碼格式數
05H - - 01~31BCD碼格式數
06H 星期 - - - - - 0~6
07H 月/世紀 C - - 01~12BCD碼格式數
08H 00~99BCD碼格式數
09H 分鐘報警 AE 00~59BCD碼格式數
0AH 小時(shí)報警 AE - 00~23BCD碼格式數
0BH 日報警 AE - 01~31BCD碼格式數
0CH 星期報警 AE - - - - 0~6

2.2 啟動(dòng)和停止條件

總線(xiàn)不忙時(shí),數據線(xiàn)和時(shí)鐘線(xiàn)保持在高電平。數據線(xiàn)(SDA)在下降沿而時(shí)鐘線(xiàn)(SCL)為高電平時(shí),為起動(dòng)條件(S);數據線(xiàn)在上升沿而時(shí)鐘線(xiàn)為高電平時(shí)為停止條件(P),參見(jiàn)圖3。

2.3 位傳送

每個(gè)時(shí)鐘脈沖傳送一個(gè)數據位,SDA線(xiàn)上的數據在時(shí)鐘脈沖高電平時(shí)應保持穩定,否則將成為控制信號,參見(jiàn)圖4。

2.4 標志位

在起動(dòng)條件和停止條件之間,傳送器傳送給接收器的數據數量沒(méi)有限制。在每個(gè)8位字節后加一個(gè)標志位,傳送器便產(chǎn)生一個(gè)高電平的標志位,這時(shí)主設備產(chǎn)生一個(gè)附加標志位時(shí)鐘脈沖。

從接受器必須在接收到每個(gè)字節后產(chǎn)生一個(gè)標志位,主接收器也必須在接收從傳送器傳送的每個(gè)字節后產(chǎn)生一個(gè)標志位。在標志位時(shí)鐘脈沖出現時(shí),SDA線(xiàn)應保持低電平(應考慮起動(dòng)和保持時(shí)間)。傳送器應在從設備接收到最后一個(gè)字節時(shí)變?yōu)榈碗娖?,而使接收器產(chǎn)生標志位,這時(shí)主設備即可產(chǎn)生停止條件。參見(jiàn)圖5。

2.5 I2C總線(xiàn)協(xié)議

用I2C總線(xiàn)傳遞數據前,接收的設備應先標明地址,在I2C總線(xiàn)起動(dòng)后,這個(gè)地址與第一個(gè)傳送字節一起被傳送出去。PCF8563可以作為一個(gè)從接收器或從傳送器,此時(shí)的時(shí)鐘信號線(xiàn)SCL只能輸入信號線(xiàn),數據信號線(xiàn)SDA則為一條雙向信號線(xiàn)。PCF8563的從地址參見(jiàn)圖6。

3 應用概述

圖7所示為PCF8563的具體應用電路圖,對圖中石英晶片頻率的調整,筆者給出3種可行性方法,供參考:

方法1:定值OSCI電容。計算所需的電容平均值,用此值的定值電容,通電后在CLKOUT管腳上測出的頻率應為32.768kHz,測出的頻率值偏差取決于石英晶片本身,電容偏差和器件之間的偏差平均為±5×10 -6。平均偏差可達5分鐘/年。

方法2:OSCI微調電容??赏ㄟ^(guò)調整OSCI管腳的微調電容式振蕩器的頻率來(lái)獲得更高的精度,此時(shí)可測出通電時(shí)管腳CLKOUT上的信號頻率為32.768kHz。

方法3:OSCI輸出。直接測量管腳OSCI的輸出。

4 程序范例

以下的C語(yǔ)言源程序是用8051單片機的普通I/O口(如P0.0/P0.4)模擬實(shí)現PCF8563的I2C時(shí)鐘/日歷芯片的操作,有字節寫(xiě)/讀兩種狀態(tài)。程序中從地址的讀地址為0A3H,寫(xiě)地址為0A2H.所發(fā)送的數據字節為9個(gè),發(fā)送的初始數據在rom_sed[9]中,rom_sed[9]定義了寄存器中當前發(fā)送的值:控制/狀態(tài)寄存器1為0,控制/狀態(tài)寄存器2為0,秒寄存器為0,分鐘寄存器55,小時(shí)寄存器為23,日寄存器為31,星期寄存器為6,月/世紀寄存器為0x12,年寄存器為0x99(即1999年12月31日23點(diǎn)55分0秒),當程序運行一段時(shí)間(5分鐘)后,從地址寄存器02H開(kāi)始讀數據,數據存放在rom_rec7中,發(fā)現變量rom_rec7變?yōu)?000年1月1日0點(diǎn)0分。若外轉帳電路有顯示,則時(shí)間可以顯示在面板上。

#included:.h>

#define byte unsigned char

sbit scl=0x81; //定義串行I/O口

sbit sda=0x80;

idata byte rom_sed[9];

idata byte rom_rec[7];

idata byte j,k;

bit flag,flag1;

void delay(void) //延時(shí)子程序

{data byte i;

for(i=0;i6;i++);

}

void I_start(void) //發(fā)送I2C總線(xiàn)起始條件子程序

{sda=1;

;

scl=1;

delay();

sda=0;

delay();

scl=0;

;

}

void I_stop(void) //I2C總線(xiàn)停止條件子程序

{sda=0;

;

scl=1;

delay();

sda=1;

delay();

}

bit I_send(byte I_data) //字節數據傳送子程序

{data byte i;

for(i=0,i8;i++)

{sda-(bit)(I_data0x80);

I_data=I_data1;

;

scl=1;

delay();

scl=0;

}

;;

sda=1; ;; //ready for receiving ACK bit

scl=1; ;; //start receiving ack bit

flag=0;

if(sda= =0)flag=0;

else flag=1; //return(~I_clock());

scl=0;

return(flag);

}

byte I_receive(void) //字節數據接收子程序

{ data byte i;

byte I_data=0;

sda=1;

for(i=0;I8;i++)

{ I_data*=2;

;

scl=0;

delay();

scl=1; ;;

if(sda= =1)I_data++;

;;

}

scl=0; ;;;

sda=0;

if(flag1= =0){;;scl=1;delay();scl=0;} //not last receic_byte ACK

else{sda=1; ;;scl=1;delay();scl=0;flag1=0;} //the last receive_byte ~ACK

return(I_data);

}

main() //主程序

{data byte i;

rom_sed[0]=0x00; rom_sed[1]=0x00;

rom_sed[2]=0x00; rom_sed[3]=0x55;

rom_sed[4]=0x23; rom_sed[5]=0x31;

rom_sed[6]=0x06; rom_sed[7]=0x92;

rom_sed[8]=0x99;

for(i=0;i255;i++)delay();

I_start();

if(~I_send(rom_sed[i]));

else;

}

I_stop();

}

else;

}

else;

start: I_start();

if(~I_send(0xa2)) //pcf_write address

{if(~I_send(0x02)) //pcf_status register address

{I_start();

if(~I_send(0xa3)) //write status register

{for(i=0;i7;i++)

{if(i= =6)flag1=1;

else flag1=0;

rom_rec[i]=I_receive();

switch(i)

{case 1:rom_rec[i]=rom_rec[i]0x7f;break;

ease2:

case3:rom_rec[i]=rom_rec[i]0x3f;break;

case4:rom_rec[i]=rom_rec[i]0x07;break;

case5:rom_rec[i]=rom_rec[i]0x9f;brealk;default:break;

}

}

I_stop()

}

}

}

goto start;

}

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>