一. 描述
DS1302時鐘芯片是由美國DALLAS公司推出的具有涓細電流充電能力的低功耗實時時鐘芯片。 它可以對年、月、日、周、時、分、秒進行計時,且具有閏年補償?shù)榷喾N功能。
DS1302芯片包含一個用于存儲實時時鐘/日歷的 31 字節(jié)的靜態(tài) RAM,可通過簡單的串行接口與微處理器通訊,將當前的時鐘存于RAM。 DS1302芯片對于少于 31 天的月份月末會自動調(diào)整,并會自動對閏年進行校正。 由于有一個 AM/PM 指示器,時鐘可以工作在 12 小時制或者 24小時制。
二. 芯片參數(shù)
1.芯片特點
- 實時時鐘計算年、月、日、時、分、秒、星 期,直到 2100 年,并有閏年調(diào)節(jié)功能
- 31 x 8 位 通用暫存 RAM
- 串行輸入輸出,使管腳數(shù)最少
- 2.0V 至 5.5V 寬電壓范圍操作
- 在 2.0V 時工作電流小于 300nA
- 讀寫時鐘或 RAM 數(shù)據(jù)時有單字節(jié)或多字節(jié)(脈沖串模式)數(shù)據(jù)傳送方式
- 8 管腳 DIP 封裝或可選的 8 管腳表面安裝 SO 封裝
- 簡單的 3 線接口
- 與 TTL 兼容 (VCC = 5V)
- 可選的工業(yè)溫度范圍:-40°C to +85°C
2.引腳說明
DS1302采用的是三線接口的雙向數(shù)據(jù)通信接口,RST是片引腳,低電平有效; SCLK是時鐘芯片,為通信提供時鐘源; I/O為數(shù)據(jù)輸入輸出引腳,用于傳輸及接收數(shù)據(jù);
DS1302還采用了雙電源供電模式,VCC1 連接到備用電源,在VCC2主電源失效時保持時間和日期數(shù)據(jù).
三. 參考電路
DS1302芯片基本電路如上圖,其中Y2為32.768k外部晶振,為芯片提供時鐘源;P2為備用電池,以保證在主電源掉電后,芯片仍可繼續(xù)運行;D1為二極管,保證電壓的單向?qū)ǎ乐怪麟娫措妷哼^高燒壞備用電池;R6為上拉電阻,增強信號傳輸?shù)姆€(wěn)定性。
四. 控制程序
1.時鐘數(shù)據(jù)的讀寫地址
如上圖,為DS1302芯片的時鐘數(shù)據(jù)的讀和寫的地址,也就是說要實現(xiàn)對芯片控制,就是往這些地址上寫入或讀出數(shù)據(jù)。 其中:
讀地址為: 0x81(秒), 0x83(分), 0x85(時), 0x87(日), 0x89(月), 0x8b(星期), 0x8d(年);
寫地址為: 0x80(秒), 0x82(分), 0x84(時), 0x86(日), 0x88(月), 0x8a(星期), 0x8c(年);
2.控制時序
DS1302控制軟件最基本的操作為寫函數(shù)和讀函數(shù),其次就是實現(xiàn)初始化函數(shù)。
(1)讀時序
/*******************************************************************************
* 函數(shù)功能 : 讀取一個地址的數(shù)據(jù)
*******************************************************************************/
uchar Ds1302Read(uchar addr)
{
uchar n,dat,dat1;
RST = 0;
_nop_();
SCLK = 0;//先將SCLK置低電平。
_nop_();
RST = 1;//然后將RST(CE)置高電平。
_nop_();
for(n=0; n<8; n++)//開始傳送八位地址命令
{
DSIO = addr & 0x01;//數(shù)據(jù)從低位開始傳送
addr >>= 1;
SCLK = 1;//數(shù)據(jù)在上升沿時,DS1302讀取數(shù)據(jù)
_nop_();
SCLK = 0;//DS1302下降沿時,放置數(shù)據(jù)
_nop_();
}
_nop_();
for(n=0; n<8; n++)//讀取8位數(shù)據(jù)
{
dat1 = DSIO;//從最低位開始接收
dat = (dat>>1) | (dat1<<7);
SCLK = 1;
_nop_();
SCLK = 0;//DS1302下降沿時,放置數(shù)據(jù)
_nop_();
}
RST = 0;
_nop_(); //以下為DS1302復位的穩(wěn)定時間,必須的。
SCLK = 1;
_nop_();
DSIO = 0;
_nop_();
DSIO = 1;
_nop_();
return dat;
}
(2)寫時序
/*******************************************************************************
* 函數(shù)功能 : 向DS1302命令(地址+數(shù)據(jù))
*******************************************************************************/
void Ds1302Write(uchar addr, uchar dat)
{
uchar n;
RST = 0;
_nop_();
SCLK = 0;//先將SCLK置低電平。
_nop_();
RST = 1; //然后將RST(CE)置高電平。
_nop_();
for (n=0; n<8; n++)//開始傳送八位地址命令
{
DSIO = addr & 0x01;//數(shù)據(jù)從低位開始傳送
addr >>= 1;
SCLK = 1;//數(shù)據(jù)在上升沿時,DS1302讀取數(shù)據(jù)
_nop_();
SCLK = 0;
_nop_();
}
for (n=0; n<8; n++)//寫入8位數(shù)據(jù)
{
DSIO = dat & 0x01;
dat >>= 1;
SCLK = 1;//數(shù)據(jù)在上升沿時,DS1302讀取數(shù)據(jù)
_nop_();
SCLK = 0;
_nop_();
}
RST = 0;//傳送數(shù)據(jù)結(jié)束
_nop_();
}
(3)初始化
/*******************************************************************************
* 函數(shù)功能 : 初始化DS1302.
*******************************************************************************/
void Ds1302Init()
{
uchar n;
Ds1302Write(0x8E,0X00); //禁止寫保護,就是關(guān)閉寫保護功能
for (n=0; n<7; n++)//寫入7個字節(jié)的時鐘信號:分秒時日月周年
{
Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);
}
Ds1302Write(0x8E,0x80); //打開寫保護功能
}
3. 參考示例
實現(xiàn)了DS1302的驅(qū)動程序,接下來就可以實現(xiàn)DS1302的報時功能了。
//---DS1302寫入和讀取時分秒的地址命令---//
//---秒分時日月周年 最低位讀寫位;-------//
uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
//---DS1302時鐘初始化2013年1月1日星期二12點00分00秒。---//
//---存儲順序是秒分時日月周年,存儲格式是用BCD碼---//
uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13};
/*******************************************************************************
* 函數(shù)功能 : 讀取時鐘信息
*******************************************************************************/
void Ds1302ReadTime()
{
uchar n;
for (n=0; n<7; n++)//讀取7個字節(jié)的時鐘信號:分秒時日月周年
{
TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
}
}
void main()
{
LcdInit();
Ds1302Init();
while(1)
{
Ds1302ReadTime(); //讀取此時的時間
LcdDisplay(); //顯示時間
}
}
-
電源
+關(guān)注
關(guān)注
184文章
17704瀏覽量
249963 -
芯片
+關(guān)注
關(guān)注
455文章
50714瀏覽量
423151 -
接口
+關(guān)注
關(guān)注
33文章
8575瀏覽量
151019 -
時鐘芯片
+關(guān)注
關(guān)注
2文章
249瀏覽量
39878 -
DS1302
+關(guān)注
關(guān)注
8文章
449瀏覽量
50677
發(fā)布評論請先 登錄
相關(guān)推薦
評論