時鐘芯片DS1302及其應用課件_第1頁
時鐘芯片DS1302及其應用課件_第2頁
時鐘芯片DS1302及其應用課件_第3頁
時鐘芯片DS1302及其應用課件_第4頁
時鐘芯片DS1302及其應用課件_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

時鐘芯片DS1302及其應用時鐘計數(shù)功能,可以對秒、分鐘、小時、月、星期、年的計數(shù)。年計數(shù)可達到2100年。有31*8位的額外數(shù)據(jù)暫存寄存器最少I/O引腳傳輸,通過三引腳SCLK,RST,IO控制工作電壓:2.0-5.5V

工作電流小于320納安(2.0V)讀寫時鐘寄存器或內(nèi)部RAM(31*8位的額外數(shù)據(jù)暫存寄存)可以采用單字節(jié)模式和突發(fā)模式

8-pinDIP封裝或8-pinSOICs

兼容TTL(5.0V)可選的工業(yè)級別,工作溫度-40–85攝氏度兼容DS1202較DS1202增加的功能:

1.可通過Vcc1進行涓流充電

2.雙重電源補給

3.備用電源可采用電池或者超級電容(0.1F以上),可以用老式電腦主板上的3.6V充電電池。功能介紹引腳分布結(jié)構框圖主要工作原理:移位寄存器,控制邏輯,晶振,時鐘和RAM

在進行任何數(shù)據(jù)傳輸時,/RST必須被制高電平(注意雖然將它置為高電平,內(nèi)部時鐘還是在晶振作用下走時的,此時,允許外部讀寫數(shù)據(jù))。在每個SCLK上升沿時,數(shù)據(jù)被輸入,下降沿時數(shù)據(jù)被輸出,一次只能讀寫一位,是讀還是寫需要通過串行輸入控制指令來實現(xiàn)(也是一個字節(jié)),通過8個脈沖便可讀取一個字節(jié)從而實現(xiàn)串行輸入與輸出。

最初通過8個時鐘周期載入控制字節(jié)到移位寄存器。如果控制指令選擇的是單字節(jié)模式,后來的連續(xù)的8個時鐘脈沖可以進行8位數(shù)據(jù)的寫或8位數(shù)據(jù)的讀操作,SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù)。工作過程DS1302的基本操作方式是:先寫地址(最后一位是0),再寫數(shù)據(jù);或者先寫地址(最后一位是1),再讀數(shù)據(jù)。寫:發(fā)送10XXXXX0再發(fā)送寫的字節(jié)讀:發(fā)送10XXXXX1再讀一個字節(jié)復位與時鐘控制所有的數(shù)據(jù)傳輸必須從將置高電平開始;數(shù)據(jù)傳輸時序復位與時鐘控制所有的數(shù)據(jù)傳輸必須從將置高電平開始;一個時鐘周期是由下降沿、上升沿組成的序列;對于數(shù)據(jù)輸入來說,數(shù)據(jù)必須在數(shù)據(jù)必須在時鐘的上升沿到來之前有效,對于數(shù)據(jù)輸入來說,在時鐘的下降沿輸出數(shù)據(jù)位。如果是低電平,所有的數(shù)據(jù)傳輸端和IO引腳都為高阻態(tài)。數(shù)據(jù)輸入(單片機寫)在8個時鐘周期的控制寫字節(jié)的輸入之后,一個字節(jié)的輸入將在下8個時鐘周期的上升沿完成,數(shù)據(jù)傳輸從字節(jié)最低位開始。讀寫時間寄存器與時間有關的寄存器為:SEC,MIN,HR,DATE,MONTH,DAY,YEAR這些寄存器的操作方式是一樣的:寫:發(fā)送10XXXXX0,再發(fā)送寫的字節(jié)讀:發(fā)送10XXXXX1,再讀一個字節(jié)下面以秒為例:秒分時日月周年初始化時要置當前時間:寫地址:發(fā)送10000000(即0x80),再發(fā)送寫的字節(jié)0x55如時間12:23:55初始化完了,讀當前時間:讀地址:發(fā)送10000001(即0x81),再讀一個字節(jié),即為當前的秒讀寫時間寄存器write_DS1302(0x80,0x55]);readtimeR[6]=read_DS1302(0x81);bit7秒控制寄存器秒寄存器秒寫地址:0x80讀地址:0x81分寫地址:0x82讀地址:0x83時寫地址:0x84讀地址:0x85日寫地址:0x86讀地址:0x87月寫地址:0x88讀地址:0x89周寫地址:0x8a讀地址:0x8b年寫地址:0x8c讀地址:0x8d讀寫時間控制寄存器時鐘停止標志位秒寄存器的最高位,定義為時鐘停止位,當該位置1,時鐘振蕩停止,DS1302進入低功耗待機模式;當該位置0,時鐘振蕩啟動;初始上電狀態(tài)是沒有定義。val=read_DS1302(0x81);//讀秒寄存器到valval&=0x7f; //最高位清零,振蕩器工作允許write_DS1302(0x80,val);//寫秒寄存器,內(nèi)容val啟動時鐘示例ucharval;bit7秒控制寄存器秒寄存器AM-PM/12-24MODE小時寄存器的第7位定義為12-24小時模式位。Bit7為1:是12小時制;bit5=1表示下午bit5=0表示上午Bit7為0:是24小時制;bit7bit5小時控制寄存器小時寄存器12-24小時模式位12小時制模式時,0:上午;1:下午寫保護位(WRITEPROTECTBIT)控制字節(jié)的bit7是寫保護位(前面已經(jīng)提到),低7位(bit0~bit6),被置0,在任何寫操作前,bit7都應該置‘0’??刂萍拇嫫鞯刂房刂萍拇嫫髯止?jié)寫保護關閉:write_DS1302(0x8e,0x00);bit70000000寫保護打開:write_DS1302(0x8e,0x80);地址該寄存器決定了DS1302的充電特性,涓流充電選擇位為bit4~7,置1010時使涓流充電,其他選擇將禁止涓流充電。DS1302剛上電時無涓流充電。二極管選擇位diodeselect(DS)bit2~3,將在Vcc1和Vcc2之間選擇1或2個diode,如果DS是01,只有一個二極管被選擇,如果DS四10,將選擇兩個diode,具體電路如下圖,如果是00或11,無涓流充電能力。還有電阻選擇位RS(bit0~1)將會選擇Vcc1和Vcc2之間的電阻,具體如下表:涓電流充電寄存器sbitDS1302_CLK=P1^7;sbitDS1302_IO=P2^3;sbitDS1302_RST=P1^3;大賽DS1302部分電路#definenop_nop_()voidsendbyte(uchara){uchari;for(i=8;i>0;i--) { DS1302_IO=a&0x01; a>>=1; DS1302_CLK=1; _nop_(); DS1302_CLK=0; _nop_();}}函數(shù)功能:單片機向DS1302寫一個字節(jié)子程序IO=字節(jié)a的最低位字節(jié)右移1位CLK=1,延時CLK=0,延時到8次了?結(jié)束將上面的寫字節(jié)和讀字節(jié)放在一起研究voidsendbyte(uchara){uchari;for(i=8;i>0;i--) { DS1302_IO=a&0x01; a>>=1; DS1302_CLK=1; _nop_(); DS1302_CLK=0; _nop_();}}讀一個字節(jié)子程序ucharreadbyte(void){ uchari,dat=0; for(i=8;i>0;i--) { dat>>=1; if(DS1302_IO) dat|=0x80; DS1302_CLK=1; nop; DS1302_CLK=0; } returndat;}寫一個字節(jié)子程序這是一種方案在控制字節(jié)最后一位寫完后的下降沿,第一個讀數(shù)據(jù)位就出現(xiàn)了此句看上去,在沒有先產(chǎn)生下降沿的情況下就讀了數(shù)據(jù),其實在左邊已經(jīng)產(chǎn)生了第一個數(shù)據(jù)位將上面的寫字節(jié)和讀字節(jié)放在一起研究voidsendbyte(uchara){uchari;for(i=8;i>0;i--) { DS1302_CLK=0;nop;DS1302_IO=a&0x01;a>>=1;DS1302_CLK=1;nop; }}讀一個字節(jié)子程序ucharreadbyte(void){uchari,dat=0;for(i=8;i>0;i--){ DS1302_CLK=1; nop; DS1302_CLK=0; dat>>=1; if(DS1302_IO) dat|=0x80; }returndat;}寫一個字節(jié)子程序這是另一種方案這里是先產(chǎn)生數(shù)據(jù),再產(chǎn)生上升沿的方式送數(shù)據(jù),最后沒有產(chǎn)生下降沿。這里要先產(chǎn)生下降沿,再讀數(shù)據(jù)/*****************************************************************************函數(shù)功能:寫DS1302地址子程序向address地址上寫入數(shù)據(jù)dat*****************************************************************************/voidwrite_DS1302(ucharaddress,uchardat){

DS1302_RST=0; nop; DS1302_CLK=0; nop; DS1302_RST=1; nop;

sendbyte(address); nop;

sendbyte(dat); nop; DS1302_RST=0; nop; DS1302_CLK=0;}經(jīng)過8個時鐘周期的控制字節(jié)的輸入,一個字節(jié)的輸入將在下8個時鐘周期的上升沿完成,數(shù)據(jù)傳輸從字節(jié)最低位開始。這3句的目的是將CLK置0,但是不知道會不會產(chǎn)生下降沿而送錯數(shù)據(jù),所以先RST=0,停止所有數(shù)據(jù)傳送,高阻態(tài),等CLK=0之后,再回復RST=1;/*****************************************************************************函數(shù)功能:初始化DS1302子程序入口參數(shù):wr_data[](全局變量)出口參數(shù):*****************************************************************************/voidDS1302_init(){write_DS1302(0x8e,0x00);//關閉保護,bit7=0write_DS1302(0x8c,wr_data[0]); //年write_DS1302(0x88,wr_data[1]); //月write_DS1302(0x86,wr_data[2]); //日 write_DS1302(0x8A,wr_data[3]); //星期write_DS1302(0x84,wr_data[4]); //時write_DS1302(0x82,wr_data[5]); //分write_DS1302(0x80,wr_data[6]); //秒 write_DS1302(0x8e,0x80); //開寫保護,bit7=1}voidclock_start(void){ucharval;val=read_DS1302(0x81);//讀秒寄存器val&=0x7f; //秒寄存器最高位0,時鐘振蕩啟動

write_DS1302(0x8e,0x00);//關寫保護

write_DS1302(0x80,val);//寫回秒寄存器write_DS1302(0x90,0xa5);

//1010使能涓電流充電,DS=01:選擇一個二極管,RS=01:R1=2kwrite_DS1302(0x8e,0x80);//開寫保護

}啟動振蕩器,啟動涓電流充電(競賽可省略)(競賽可省略)可以省略的理由:1.由于秒寄存器是內(nèi)容0x00~0x59,顯然初始化時最高位也同時清零了;2.使用的電池,不充電,可以不對電池充電。/*****************************************************************************函數(shù)功能:讀DS1302時間子程序讀到數(shù)組readtimeR中*****************************************************************************/voidread_time(void){ readtimeR[0]=read_DS1302(0x8d);//年BCD碼 readtimeR[1]=read_DS1302(0x89); //月BCD碼 readtimeR[2]=read_DS1302(0x87); //日BCD碼 readtimeR[3]=read_DS1302(0x8b);//周BCD碼 readtimeR[4]=read_DS1302(0x85); //時BCD碼 readtimeR[5]=read_DS1302(0x83);//分BCD碼 readtimeR[6]=read_DS1302(0x81); //秒BCD碼}送顯示的數(shù)據(jù)處理方式y(tǒng)ear_h=readtimeR[0]>>4; //年十位year_l=readtimeR[0]&0x0f;//年個位month_h=readtimeR[1]>>4; //月十位month_l=readtimeR[1]&0x0f;//月個位date_h=readtimeR[2]>>4; //日十位date_l=readtimeR[2]&0x0f;//日個位hour_h=readtimeR[4]>>4; //時十位hour_l=readtimeR[4]&0x0f;//時個位minute_h=readtimeR[5]>>4;//分十位minute_l=readtimeR[5]&0x0f;//分個位second_h=readtimeR[6]>>4;//秒十位second_l=readtimeR[6]&0x0f;//秒個位disTime[0]=hour_h;disTime[1]=hour_l;disTime[3]=minute_h;disTime[4]=minute_l;disTime[6]=second_h;disTime[7]=second_l;display(disTime);disDate[0]=year_h;disDate[1]=year_l;disDate[3]=month_h;disDate[4]=month_l;disDate[6]=date_h;disDate[7]=date_l;display(disDate)作判斷的數(shù)據(jù)處理方式ucharsec,min,hour,dat,m

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論