I2C實(shí)時(shí)時(shí)鐘/日歷芯片在8051系統(tǒng)中的應(yīng)用
3 應(yīng)用概述
圖7所示為PCF8563的具體應(yīng)用電路圖,對(duì)圖中石英晶片頻率的調(diào)整,筆者給出3種可行性方法,供參考:
方法1:定值OSCI電容。計(jì)算所需的電容平均值,用此值的定值電容,通電后在CLKOUT管腳上測(cè)出的頻率應(yīng)為32.768kHz,測(cè)出的頻率值偏差取決于石英晶片本身,電容偏差和器件之間的偏差平均為±5×10 -6。平均偏差可達(dá)5分鐘/年。
方法2:OSCI微調(diào)電容??赏ㄟ^調(diào)整OSCI管腳的微調(diào)電容式振蕩器的頻率來獲得更高的精度,此時(shí)可測(cè)出通電時(shí)管腳CLKOUT上的信號(hào)頻率為32.768kHz。
方法3:OSCI輸出。直接測(cè)量管腳OSCI的輸出。
4 程序范例
以下的C語言源程序是用8051單片機(jī)的普通I/O口(如P0.0/P0.4)模擬實(shí)現(xiàn) PCF8563的I2C時(shí)鐘/日歷芯片的操作,有字節(jié)寫/讀兩種狀態(tài)。程序中從地址的讀地址為0A3H,寫地址為0A2H.所發(fā)送的數(shù)據(jù)字節(jié)為9個(gè),發(fā)送的初始數(shù)據(jù)在rom_sed[9]中,rom_sed[9]定義了寄存器中當(dāng)前發(fā)送的值:控制/狀態(tài)寄存器1為0,控制/狀態(tài)寄存器2為0,秒寄存器為 0,分鐘寄存器55,小時(shí)寄存器為23,日寄存器為31,星期寄存器為6,月/世紀(jì)寄存器為0x12,年寄存器為0x99(即1999年12月31日23 點(diǎn)55分0秒),當(dāng)程序運(yùn)行一段時(shí)間(5分鐘)后,從地址寄存器 02H開始讀數(shù)據(jù),數(shù)據(jù)存放在rom_rec7中,發(fā)現(xiàn)變量rom_rec7變?yōu)?000年1月1日0點(diǎn)0分。若外轉(zhuǎn)帳電路有顯示,則時(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總線起始條件子程序
{sda=1;
;
scl=1;
delay();
sda=0;
delay();
scl=0;
;
}
評(píng)論