




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第十四講時鐘芯片DS1302 DS1302是DALLAS公司推出的涓流充電時鐘芯片,內含有一個實時時鐘/日歷和31字節(jié)靜態(tài)RAM,通過簡單的串行接口與單片機進行通信。實時時鐘/日歷 電路提供秒、分、時、日、周、月、年的信息,每月的天數(shù)和閏年的天數(shù)可自動調整。時鐘操作可通過AM/PM指示決定采用24或12小時格式。DS1302與單片機之間能簡單地采用同步串行的方式進行通信,僅需用到三個口線:(1)RES復 位(2)I/O數(shù)據(jù)線(3)SCLK串行時鐘。時鐘/RAM的讀/寫數(shù)據(jù)以一個字節(jié)或多達31個字節(jié)的字符組方式通信。DS1302工作時功耗很低保持數(shù)據(jù)和時鐘信息時功率小于1mW/ DS130哂DS
2、120效進而來增加了以下的特性:雙電源管腳用于主電源和備份電源供應,Vcc1為可編程涓流充電電源,附加七個字節(jié)存儲器。它廣泛應用于電話、傳真、便攜式儀器以及電池供電的儀器儀表等產品領域下面。將主要的性能指標作一綜合: 實時時鐘具有能計算2100年之前的秒、分、時、日、星期、月、年的能力,還有閏年調整的能力 318位暫存數(shù)據(jù)存儲RAM 串行I/O口方式使得管腳數(shù)量最少 寬范圍工作電壓2.05.5V 工作電流2.0V時,小于300nA 讀/寫時鐘或RAM數(shù)據(jù)時有兩種傳送方式單字節(jié)傳送和多字節(jié)傳送字符組方式 8腳DIP封裝或可選的8腳SOIC寸裝根據(jù)表面裝配 簡單3線接口 與TTL容Vcc=5V 可
3、選工業(yè)級溫度范圍-40-+85 雙電源管用于主電源和備份電源供應 以上是DS1302勺一些全面的預覽,以下為DS1302?腳圖: PINASSIGNMENT 1) VCC2主用電源引腳 2) XI、X2:DS1302卜部晶振引腳 3) GND地 4) RST復位引腳 5) I/O:串行數(shù)據(jù)引腳,數(shù)據(jù)輸出或者輸入都從這個引腳 6) SCLK串行時鐘引腳 7) VCC1備用電源 61302 GND 1) VCC為主電源接5V,CX10為濾波電容 2) 2、外接32.768K的晶振 3) 3、5、6、7腳分別與控制器相聯(lián),注意外部4.7K上拉電阻 vcc Ti 2 I)SL WT2WCI 1276B
4、 T XI XhO CE T-PM 1,EM 5P3S 4) 4、備用電源腳,注意是3.3V,DS1302要求備用電源電壓稍微低于主用 電源 卜面講講DS1302的具體操作 操作DS1302勺大致過程, 就是將各種數(shù)據(jù)寫入DS130加寄存器, 以設置它當前的時間已經格式。然后使DS1302F始運作,DS130的鐘會按照設置情況運轉,再用單片機將其寄存器內的數(shù)據(jù)讀出。再用液晶顯示,就是我們常說的簡易電子鐘。所以總的來說DS130加操彳分2步(顯示部分屬于液晶顯示的內容,不屬于 DS130本身的內容)但是在講述操作時序之前,我們要先看看寄存器: ADDRESS/COMMANDBYTEFigure2
5、 上圖是DS1302勺寄存器樣式,我們看到: 1、第7位永遠都是12、第6位,1表示RAM尋址內部存儲器地址;0表示CK尋址內部寄存器; 第5位到第1位,為RAM或者寄存器的地址;最低位,高電平表示RD即下一步操作將要“讀”;低電平表示W(wǎng)即下一步操作將要“寫”。(與AT24C02?存器 類似,這點要理解好)。下面是DS1302勺內部寄存器和RAM HBGiaTERADDAgSSREGISTERpEFINITION A.CLOCK 上圖左邊為寄存器和RAM:地址,右邊為具體內容。各個寄存器的最高位都是1,最低位都是“RD/W,比如要讀秒寄存器則命令為10000101,反之寫為10000100,要
6、注意其含義。(圖片不是很清楚,看不清楚的朋友用軟件放大)我們一個一個看: 1、SEC秒寄存器,注意具體右邊內容:低四位為SEC,高的次三位為10SEC最高位CH為 2、DS1302的運行標志,當CH=0寸,DS1302內部時鐘運行,反之CH=1時停止; 3、MIN:分寄存器; 4、 HR:時寄存器, 最高位為12/24小時的格式選擇位, 該位為1時表示12小時格式。當設置為12小時顯示格式時,第5位的高電平表示下午(PM;而當設置為24小時格式時,第5位位具體的時間數(shù)據(jù)。 5、 DATE日寄存器; 6、 MONTH月寄存器; 7、 DAY周寄存器,注意一周只有7天,所以該寄存器只有低三位有效;
7、 8、YEAR年寄存器; 9、CONTROL寫保護寄存器,當該寄存器最高位WP為1時,DS1302只讀不寫,所以& &,IQDATE!DATEIQDATE!DATE nml工 FL3DAT*0 要在往DS1302寫數(shù)據(jù)之前確保WP為0; 10、TRICKLECHARGEREGISTER細電流充電設置寄存器,我們知道,當DS1302掉電時,可以馬上調用外部電源保護時間數(shù)據(jù)。該寄存器就是配置備用電源的充電選項的。其中高四位(4個TCS只有在1010的情況下才能使用充電選項;低四位的情況,與DS130也部電路有關,有點意思,下文詳細講述。 11、CLOCKBURST比量讀寫操作設置寄
8、存器,設置該寄存器后,可以對DS130和各個寄存器進行連續(xù)寫入。DS130加另外一種讀寫方式。筆者還沒用過,感興趣的朋友可以嘗試。最后還有一點,前文說過,DS1302 有31個字節(jié)的存儲空間,但是大家要看到的是,這31個存儲空間,最后一個是RAMBURST寄存器,設置該寄存器可以達到對RAM連續(xù)讀寫的作用。所以DS130和可用存儲空間實際上為30個字節(jié)。 現(xiàn)在我們來看看DS1302勺涓細電流充電的設置:以下來自英文原版PDF Thetricklechargeselect(TCS)bits(bits4-7)controltheselectionofthetricklecharger.Inorde
9、rtopreventaccidentalenabling,onlyapatternof1010willenablethetricklecharger.Allotherpatternswilldisablethetricklecharger.TheDS1302powersupwiththetricklechargerdisabled.Thediodeselect(DS)bits(bits2-3)selectwhetheronediodeortwodiodesareconnectedbetweenVCC2andVCC1.IfDSis01,onediodeisselectedorifDSis10,t
10、wodiodesareselected.IfDSis00or11,thetricklechargerisdisabledindependentlyofTCS.TheRSbits(bits0-1)selecttheresistorthatisconnectedbetweenVCC2andVCC1.Theresistorselectedbytheresistorselect(RS)bitsisasfollows: DS1302PROGRAMMABLETRICKLECHARGERFigure5 BIT7BITEETT5WT*BIT3&TW國T1BIT0 好,英文水平不好也沒關系: 看到這句“
11、Thetricklechargeselect(TCS)bits(bits4-7)controltheselectionofthetricklecharger.Inordertopreventaccidentalenabling,onlyapatternof1010willenablethetricklecharger”,這句話是說“,TC效用以控制涓細電流充電功能,為了防止意外產生,只當TCS(四位)為 1010時涓細電流充電功能才會生效”所以剛才提到“其中高四位(4個TCS只有在1010的情況下才能使用充電選項”。 那口跳?IfDSis01,onediodeisselectedorifDSi
12、s10,twodiodesareselected.IfDSis00or11,thetricklechargerisdisabledindependentlyofTCS:既是說,如果兩個Dg為01,則只有1個二極管接入電路,如果DS%10則表示有2個二極管接入,如果DS%00或者11,則充電功能由TC抑獨控制”??吹缴喜侩娐啡齻€二極管處,DS%01時接入1個二極管,對應上面的開關閉合,為10時表示2個二極管接入,對應下面的開關閉合為00或者11時筆者認為兩個開關都不閉合,充電電流不經過二極管。 對應的,RS勺設置也相仿:“TheRSbits(bits0-1)selecttheresistorth
13、atisconnectedbetweenVCC2andVCC1.Theresistorselectedbytheresistorselect(RS)bitsisasfollows: RSBitsRSBits ResResistoristor TypicalValueTypicalValue 00 None None 01 RI 2kQ 10 R2 4kQ 11 R3 8ko 意思是:RS用以選擇在VCC和VCC直接接入什么樣的電阻: 1、當RSJ00時,不接入電阻; 2、當RSJ01時,接入典型值為2K電阻,對應電路圖中的R1; 3、當RSJ10時,接入典型值為4K電阻,對應電路圖中的R2;
14、4、當RSJ11時,接入典型值為8K電阻,對應電路圖中的R3; 好了,至此我們知道了,D的RS勺作用是配置接入電路中的二極管和電阻,有什么用呢? 筆者認為這些二極管和電阻是分壓和限流用的,以調整涓細充電電流的大小。 我們可以看看DS1302勺讀寫時序了: SINGLEBYTEREAD RSTJl_ 運_fi_rLfLfLrLfLrLfiR_rLrLTLR_rLrt一 (中正I*.I I &3.|麗)oooo_oooy與INGLEBYTEWRITE RSTJL sclkflFIflfnflflfnFIFIFIFIFIFIflflfl r(RJW|AQRl由3力4R心|T/(DODI|D2
15、口y口國口5D63 上圖就是DS130加三個時序:復位時序,單字節(jié)寫時序,單字節(jié)讀時序; RST復位時序,即在RSEI腳產生一個正脈沖,在整個讀寫器件,RS帙保持高 電平,一次字節(jié)讀寫完畢之后,要注意把RS咫回低電平準備下次讀寫周期;SINGLEBYTEREAD單字節(jié)讀,注意讀之前還是要先對寄存器寫命令,從最低位開始寫;大家細心看可以看到,寫數(shù)據(jù)是在SCLK勺上升沿實現(xiàn),而讀數(shù)據(jù)在SCLK的下降沿實現(xiàn),所以,在單字節(jié)讀時序中,寫命令的第八個上升沿結束后緊接著的第八個下降沿就將要讀寄存器的第一位數(shù)據(jù)讀到數(shù)據(jù)線上了!這個就是DS1302 操作中最特別的地方。當然讀出來的數(shù)據(jù)也是最低位開始。 SIN
16、GLEBUTEWRITE單字節(jié)寫,兩個字節(jié)的數(shù)據(jù)配合16個上升沿將數(shù)據(jù)寫入即可。 程序注意事項: 要記得在操作DS130之前關閉寫保護; 注意用延時來降低單片機的速度以配合器件時序 DS130豉出來的數(shù)據(jù)是BC由形式,要轉換成我們習慣的10!制,轉換方法在源程序里; 讀取字節(jié)之前,將IO設置為輸入口,讀取完之后,要將其改回輸出口; 在寫程序的時候,建議實現(xiàn)開辟數(shù)組(內存空間)來集中放置DS130酌一系列數(shù)據(jù),方便以后擴展鍵盤輸入; 9.萬年歷實驗(DS13O2)DS1前2顯示時鐘(可以狡饞設者對鐘)打開 ,出 13。2 2014/6/108:41 c_file 4KB F-Idsl302.h
17、2014/6/108:41 H文件 1KB lidsl3O2.LT 2014/6/10S:41 1ST文件 7KB dsl3D2rOBJ 2014/6/108gl OBJ文件 6KB 2014/6/108:41 c_file 4KB 口 kd.h 2014/6/10 H文件 1KB -led1ST 2014/6/10841 LST文件 7KB ,lcd,OBJ 2014/6/108gl OBJ文件 4KB ,main 2014/6/108:41 c_file 5KB ,_mainXST 2014/6/108:41 LSI文件 9KB FImain.OBJ 2014/6/10S:41 OBJ文件
18、 3KB ,pr。 2014/6/108:41 文件 KB |ipro,hex 2014/6/108gl HEX文件 3KB .prc.lnp 2014/6/108:41 LNP 文件 1KB Pipro,M51 2014/6/108gl M51 文件 19KB ,1prdplg 2014/9/1511:55 PLG文件 1KB pKO,UVOpt 2014/6/2515:13 UVOPT文件 5SKB 1ypro 2014/6/108:41 語聞 oii4Project 14KB prouvoptbak 2014/6/1413:28 BAK文件 5SKB pro_uvprqj.bak 201
19、4/6/108:41 BAK文件 0KB ,.STARTJP.A51 2014/6/108啟 1 A51 文件 7KB FiSTARTUP.LST 2014/6/108;41 LST文件 14KB j_dSTARTUP,。BJ 2014/6/108:41 OBJ文件 1KB /* * * 實驗名:萬年歷實驗 * 使用的IO: * 實驗效果:1602顯示時鐘,按K3進入時鐘設置,按K1選擇設置的時分秒 日月,按K2選擇 * 選擇設置加1。 * 注意: * #include #includelcd.h#includeds1302.hsbitK1=P3A1; sbitK2=P3A0; sbitK3=
20、P3A2; * */ sbitK4=P3A3; voidInt0Configuration(); voidLcdDisplay(); unsignedcharSetState,SetPlace; voidDelay10ms(void);/誤差0us /* * 函數(shù)名:main * 函數(shù)功能:主函數(shù) * 輸入:無 *輸出:無 * */ voidmain() ( unsignedchari; Int0Configuration(); LcdInit(); Ds1302Init(); while(1) ( if(SetState=0) ( Ds1302ReadTime(); ) else ( if(
21、K1=0)/檢測按鍵K1是否按下 ( Delay10ms();消除抖動 if(K1=0) ( SetPlace+; if(SetPlace=7) SetPlace=0; ) while(i9)/換成 BCD;。 TIMESetPlace=TIMESetPlace+6; ) if(TIMESetPlace=0 x60)&(SetPlace=0 x24)&(SetPlace=2)/小時 只能到23 ( TIMESetPlace=0; ) if(TIMESetPlace=0 x32)&(SetPlace=3)/日只 能到31 ( TIMESetPlace=0; ) if(TI
22、MESetPlace=0 x13)&(SetPlace=4)/月只 能到12 ( TIMESetPlace=0; ) if(TIMESetPlace=0 x7)&(SetPlace=5)周只 能到7 ( TIMESetPlace=1; ) /if(SetPlace=5)/月只能到12 / /TIMESetPlace=; /) ) while(i0;c-) for(b=38;b0;b-) for(a=130;a0;a-); ) #includeds1302.h” /-DS1302寫入和讀取時分秒的地址命令-/ /-秒分時日月周年最低位讀寫位;/ ucharcodeREAD_RTC
23、_ADDR70 x81,0 x83,0 x85,0 x87,0 x89,0 x8b,0 x8d; ucharcodeWRITE_RTC_ADDR70 x80,0 x82,0 x84,0 x86,0 x88,0 x8a,0 x8c; /-DS1302時鐘初始化2013年1月1日星期二12點00分00秒。-/ /-存儲順序是秒分時日月周年,存儲格式是用BC喇-/ ucharTIME7=0,0,0 x12,0 x01,0 x01,0 x02,0 x13; /* * 函數(shù)名:Ds1302Write * 函數(shù)功能:向DS130價令(地址蝕據(jù)) * 輸入:addr,dat *輸出:無 * */ voidD
24、s1302Write(ucharaddr,uchardat) ( ucharn; RST=0; _nop_(); SCLK=0;/先將SCL圈低電平。 _nop_(); RST=1;/然后將RST(CE置高電平。 _nop_(); for(n=0;n=1; SCLK=1;/數(shù)據(jù)在上升沿時,DS130豉取數(shù)據(jù)_nop_(); SCLK=0; _nop_(); for(n=0;n=1; SCLK=1;/數(shù)據(jù)在上升沿時,DS130豉取數(shù)據(jù) _nop_(); SCLK=0; _nop_(); RST=0;/傳送數(shù)據(jù)結束 _nop_(); /* * *函數(shù)名 :Ds1302Read *函數(shù)功能 :讀取一
25、個地址的數(shù)據(jù) *輸 入 :addr *輸 出 :dat * */ ucharDs1302Read(ucharaddr) ucharn,dat,dat1; RST=0; _nop_(); SCLK=0;/先將SCL圈低電平。 _nop_(); RST=1;/然后將RST(CE周高電平。 _nop_(); for(n=0;n=1; SCLK=1;/數(shù)據(jù)在上升沿時,DS130豉取數(shù)據(jù)_nop_(); SCLK=0;/DS1302下降沿時,放置數(shù)據(jù)_nop_(); _nop_(); for(n=0;n1)|(dat17); SCLK=1; _nop_(); SCLK=0;/DS1302下降沿時,放置數(shù)
26、據(jù)_nop_(); RST=0; _nop_();/以下為DS1302s位的穩(wěn)定時間,必須的 SCLK=1; _nop_(); DSIO=0; _nop_(); DSIO=1; _nop_(); returndat; /* * */voidDs1302Init() ucharn; for(n=0;n7;n+)/寫入7個字節(jié)的時鐘信號:分秒時日月周年 Ds1302Write(WRITE_RTC_ADDRn,TIMEn); /* * *輸出:無 * */ voidDs1302ReadTime() 函數(shù)名 :Ds1302Init 函數(shù)功能 初始化DS1302. Ds1302Write(0 x8E,0
27、X00); /禁止寫保護,就是關閉寫保護功能 Ds1302Write(0 x8E,0 x80); /打開寫保護功能 *函數(shù)名 :Ds1302ReadTime *函數(shù)功能 讀取時鐘信息 ( ucharn; for(n=0;n7;n+)/讀取7個字節(jié)的時鐘信號:分秒時日月周年 ( TIMEn=Ds1302Read(READ_RTC_ADDRn); #ifndef_DS1302_H_ #define_DS1302_H_ /-包含頭文件-/ #include #include /-重定義關鍵詞-/ #ifndefuchar #defineucharunsignedchar #endif #ifndef
28、uint #defineuintunsignedint #endif/-定義ds1302使用的IO口- sbitDSIO=P3A4; sbitRST=P3A5; sbitSCLK=P3A6; /-定義全局函數(shù)-/ voidDs1302Write(ucharaddr,uchardat); ucharDs1302Read(ucharaddr); voidDs1302Init(); voidDs1302ReadTime(); /-加入全局變量-/ externucharTIME7; #endif #includelcd.h /* * * 函數(shù)名:Lcd1602_Delay1ms * 函數(shù)功能:延時函
29、數(shù),延時1ms * 輸入:c * 輸出:無 * 說名:該函數(shù)是在12MHz振下,12分頻單片機的延時 * *,voidLcd1602_Delay1ms(uintc)/加入全局變量 誤差0us uchara,b; for(;c0;c-) for(b=199;b0;b-) for(a=1;a0;a-); /* * :com * */#ifndefLCD16024PINS當沒有定義這個LCD16024PINS voidLcdWriteCom(ucharcom)/寫入命令 LCD1602_DATAPINS=com;/放入命令 Lcd1602_Delay1ms(1); /等待數(shù)據(jù)穩(wěn)定 函數(shù)名 :LcdW
30、riteCom 函數(shù)功能 向LC3入一個字節(jié)的命令 LCD1602_E=0; / 使能 LCD1602_RS=0; / 選擇發(fā)送命令 LCD1602_RW=0; / 選擇寫入 LCD1602_E=1;/寫入時序 Lcd1602_Delay1ms(5);/保持時間 LCD1602_E=0; #else voidLcdWriteCom(ucharcom)/寫入命令 LCD1602_E=0;/使能清零 LCD1602_RS=0;/選擇寫入命令 LCD1602_RW=0;/選擇寫入 LCD1602_DATAPINS=com;/由于4位的接線是接到P0口的高四位, 所以傳送高四位不用改 Lcd1602_
31、Delay1ms(1); LCD1602_E=1;/寫入時序 Lcd1602_Delay1ms(5); LCD1602_E=0; /Lcd1602_Delay1ms(1); LCD1602_DATAPINS=com4;/發(fā)送低四位 Lcd1602_Delay1ms(1); LCD1602_E=1;/寫入時序 Lcd1602_Delay1ms(5); LCD1602_E=0; #endif * * * 函數(shù)名:LcdWhteData * 函數(shù)功能:向LCD1入一個字節(jié)的數(shù)據(jù) * 輸入:dat *輸出:無 * */ #ifndefLCD1602_4PINS voidLcdWriteData(uch
32、ardat)/寫入數(shù)據(jù) LCD1602_E=0;/使能清零 LCD1602_RS=1;/選擇輸入數(shù)據(jù) LCD1602_RW=0;/選擇寫入 LCD1602_DATAPINS=dat;/寫入數(shù)據(jù)Lcd1602_Delay1ms(1); LCD1602_E=1;/寫入時序 Lcd1602_Delay1ms(5);/保持時間 LCD1602_E=0; #else voidLcdWriteData(uchardat)/寫入數(shù)據(jù) LCD1602_E=0;/使能清零 LCD1602_RS=1;/選擇寫入數(shù)據(jù) LCD1602_RW=0;/選擇寫入 LCD1602_DATAPINS=dat;/由于4位的接線是接至UP0口的高四位, 所以傳送高四位不用改 Lcd1602_Delay1ms(1); LCD1602_E=1;/寫入時序 Lcd1602_Delay1ms(5); LCD1602_E=0;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五服務器出租合同
- 籃球館租賃合同書
- 二零二五版質押合同模板
- 勞動合同范例二零二五年-@-3
- 個人培訓課程收款證明-范文
- 軟件開發(fā)項目進度計劃與風險控制措施
- 金融服務項目實施保障措施探討
- 課題申報書:全日制教育碩士研究生實踐能力提升路徑研究
- 2025年七年級第一學期班級管理計劃
- 課題申報書:腦科學與教師教育高質量發(fā)展研究
- 支氣管擴張伴咯血的護理查房幻燈片
- 2024無孩無共同財產離婚協(xié)議書模板
- DZ∕T 0284-2015 地質災害排查規(guī)范(正式版)
- 低氧血癥的護理查房
- 2021修訂《城市規(guī)劃設計計費指導意見》
- 新能源汽車構造(上)
- 光纜割接方案
- 年度民警思想動態(tài)分析報告
- 《微生物制藥》課件
- 醫(yī)療質量管理相關指標體系
- 浙美版美術一上第17課《動物身上的斑點》課件2
評論
0/150
提交評論