《第30章 實時時鐘芯片應(yīng)用》由會員分享,可在線閱讀,更多相關(guān)《第30章 實時時鐘芯片應(yīng)用(22頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第30章 實時時鐘芯片應(yīng)用 對于一些測控系統(tǒng)或者手持式設(shè)備,經(jīng)常需要顯示以及設(shè)定時間。目前,市場上有多種實時時鐘芯片提供了這類功能。這種可編程的實時時鐘芯片內(nèi)置了可編程的日歷時鐘以及一定的RAM存儲器,用于設(shè)定以及保存時間。另外,實時時鐘芯片一般內(nèi)置閏年補償系統(tǒng),計時很準(zhǔn)確。其采用備份電池供電,在系統(tǒng)斷電時仍可以工作。實時時鐘芯片的這些優(yōu)點,使得其廣泛應(yīng)用于需要時間顯示的場合。本章詳細(xì)介紹了美國DALLAS公司推出實時時鐘芯片DS1302的功能、控制指令以及時間的操作。本章通過一個具體的實例,講解了如何使用51系列單片機來讀寫實時時鐘芯片DS1302。30.1 實時時鐘芯片DS1302概述 D
2、S1302是美國DALLAS公司推出的一款實時時鐘芯片。其采用3線串行接口,芯片內(nèi)部集成了可編程日歷時鐘和31個字節(jié)的靜態(tài)RAM。DS1302的日歷時鐘可自動進行閏年補償。DS1302芯片自身還具有對備份電池進行涓流充電功能,可有效長備份電池的使用壽命。實時時鐘芯片DS1302以其計時準(zhǔn)確、接口簡單、使用方便、工作電壓范圍寬和低功耗等優(yōu)點,得到了廣泛的應(yīng)用。30.1.1 實時時鐘芯片DS1302概述 實時時鐘芯片DS1302引腳排列,如圖所示。其中各個引腳功能如下所述。30.1.2 實時時鐘芯片DS1302命令字節(jié) 實時時鐘芯片DS1302為從器件,由外部微處理器來控制數(shù)據(jù)傳輸。每次傳送時由8
3、051向DS1302寫入一個命令字節(jié)開始,后面是數(shù)據(jù)字節(jié)。30.1.3 實時時鐘芯片DS1302數(shù)據(jù)格式 實時時鐘芯片DS1302數(shù)據(jù)格式分為RAM和時鐘兩種操作,下面分別進行介紹。30.1.4 實時時鐘芯片DS1302數(shù)據(jù)傳輸方式 實時時鐘芯片DS1302與外部微處理器之間通過IO引腳和SCLK引腳傳送同步串行數(shù)據(jù)。其中,SCLK為串行通信時的位同步時鐘,一個SCLK脈沖傳送一位數(shù)據(jù)。DS1302在每次數(shù)據(jù)傳送時以字節(jié)為單位,先發(fā)送低位,再發(fā)送高位,因此傳送一個字節(jié)需要8個SCLK脈沖。DS1302的數(shù)據(jù)傳輸可采用單字節(jié)或多字節(jié)突發(fā)方式進行。下面分別進行介紹。30.2 單片機讀寫實時時鐘芯片
4、實例 實時時鐘芯片DS1302采用串行接口,只需3根引腳便可以完成操作,其使用非常方便。這里采用AT89S52單片機作為外部微處理器,來對DS1302進行控制。當(dāng)然也可以選擇其它兼容的8051單片機。30.2.1 電路圖 這里給出單片機AT89S52讀寫實時時鐘芯片DS1302的電路圖,如圖所示。30.2.2 建立項目 這里采用Keil C51語言編寫AT89S52上的程序,來實現(xiàn)對DS1302的控制。首先在Keil Vison3集成開發(fā)環(huán)境中建立項目,具體操作步驟如下:30.2.3 主程序 本例的程序功能是首先初始化DS1302,然后通過輸入不同的字符來分別執(zhí)行初始化、時鐘操作和RAM操作。
5、分別介紹如下:輸入字符c或者C,進入時鐘操作。此時可以選擇顯示時間(輸入字符d或者D)或者寫時鐘(輸入字符w或者W);輸入字符i或者I,進入初始化操作。此時可以詳細(xì)設(shè)置時間和日期等;輸入字符r或者R,進入RAM操作。此時可以選擇單字節(jié)寫RAM(輸入字符b或者B)、多字節(jié)寫RAM(輸入字符w或者W)或者多字節(jié)讀RAM(輸入字符r或者R)。30.2.4 復(fù)位函數(shù) 復(fù)位函數(shù)ResetDS1302()實現(xiàn)對實時時鐘芯片DS1302的硬件復(fù)位操作。程序中使用RSTB引腳來進行復(fù)位操作,其程序代碼示例如下:void ResetDS1302()SCLK=0;RSTB=0;RSTB=1;30.2.5 字節(jié)讀取
6、函數(shù) 字節(jié)讀取函數(shù)ReadByteDS1302()用于讀取DS1302的內(nèi)部數(shù)據(jù)。該函數(shù)中,在SCLK引腳時鐘下,通過IO引腳逐位讀取8位的字節(jié)數(shù)據(jù),并通過return語句返回。30.2.6 字節(jié)寫入函數(shù)字節(jié)寫入函數(shù)WriteByteDS1302用于向DS1302寫入寄存器地址或者數(shù)據(jù)。該函數(shù)中,在SCLK引腳時鐘下,通過IO引腳逐位寫入8位的字節(jié)數(shù)據(jù)。其程序代碼示例如下:void WriteByteDS1302(uchar W_Byte)uchar i;for(i=0;i=1;/移位 30.2.7 初始化函數(shù) 初始化函數(shù)InitDS1302()用于對DS1302的時鐘寄存器進行初始化操作。該
7、函數(shù)中,分別輸入需要設(shè)置的年、月、星期、日、小時、分鐘和秒的數(shù)值,然后調(diào)用ResetDS1302()函數(shù)復(fù)位DS1302,并允許涓流充電,最后以多字節(jié)突發(fā)方式寫入時鐘數(shù)據(jù)。30.2.8 時鐘字節(jié)寫入函數(shù) 時鐘字節(jié)寫入函數(shù)WriteClkByte()用于對時鐘寄存器執(zhí)行寫操作。該函數(shù)中,首先獲取時鐘寄存器地址以及時鐘數(shù)據(jù),然后分別調(diào)用WriteByteDS1302()函數(shù)來執(zhí)行寫寄存器地址和寫數(shù)據(jù)操作。30.2.9 RAM字節(jié)寫入函數(shù) RAM字節(jié)寫入函數(shù)WriteRamByte()用于對DS1302的片內(nèi)RAM執(zhí)行寫操作。該函數(shù)中,首先獲取RAM地址以及時鐘RAM數(shù)據(jù),然后分別調(diào)用WriteBy
8、teDS1302()函數(shù)來執(zhí)行寫寄存器地址和寫數(shù)據(jù)操作。30.2.10 時鐘寄存器內(nèi)容顯示函數(shù) 時鐘寄存器內(nèi)容顯示函數(shù)Display(uchar loop)用于讀取并顯示DS1302內(nèi)部時鐘寄存器中的數(shù)據(jù)。該函數(shù)中,首先復(fù)位DS1302,然后采用多字節(jié)突發(fā)方式讀取時鐘寄存器中的數(shù)據(jù),然后每秒顯示一次結(jié)果。30.2.11 多字節(jié)突發(fā)方式讀取RAM函數(shù) 多字節(jié)突發(fā)方式讀取RAM函數(shù)BurstReadRAM()用于讀取DS1302內(nèi)部RAM的數(shù)據(jù)。該函數(shù)中,首先以多字節(jié)突發(fā)方式來讀取DS1302的片內(nèi)RAM,并將數(shù)據(jù)保存在數(shù)組中,接著將各個數(shù)據(jù)輸出顯示。30.2.12 多字節(jié)突發(fā)方式寫入RAM函數(shù)
9、多字節(jié)突發(fā)方式寫入RAM函數(shù)BurstWriteRAM()用于對DS1302的片內(nèi)RAM執(zhí)行寫操作。該函數(shù)中,首先獲取RAM數(shù)據(jù),然后采用多字節(jié)突發(fā)方式來寫入RAM數(shù)據(jù)。30.3 小結(jié) 本章詳細(xì)介紹了實時時鐘芯片DS1302的命令字節(jié)和數(shù)據(jù)格式,并介紹了兩種數(shù)據(jù)傳輸方式:單字節(jié)傳輸方式和多字節(jié)突發(fā)傳輸方式。本章通過一個具體的實例,講解了如何使用8051單片機來實現(xiàn)對DS1302的控制,在該實例中分別采用了單字節(jié)傳輸方式和多字節(jié)傳輸方式來對DS1302的時鐘寄存器以及RAM進行操作。實時時鐘常用于需要時間設(shè)定和顯示的場合,在單片機應(yīng)用系統(tǒng)中很常見,熟練掌握本章可以輕松實現(xiàn)單片機的時鐘顯示擴展。謝謝觀看/歡迎下載BY FAITH I MEAN A VISION OF GOOD ONE CHERISHES AND THE ENTHUSIASM THAT PUSHES ONE TO SEEK ITS FULFILLMENT REGARDLESS OF OBSTACLES.BY FAITH I BY FAITH