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