C51單片機(jī)11(時(shí)鐘)_第1頁
C51單片機(jī)11(時(shí)鐘)_第2頁
C51單片機(jī)11(時(shí)鐘)_第3頁
C51單片機(jī)11(時(shí)鐘)_第4頁
C51單片機(jī)11(時(shí)鐘)_第5頁
已閱讀5頁,還剩69頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、51系列單片機(jī)第第11講講 時(shí)鐘芯片時(shí)鐘芯片時(shí)鐘芯片的分類時(shí)鐘芯片的分類 并行日歷時(shí)鐘芯片并行日歷時(shí)鐘芯片DS12887 串行時(shí)鐘芯片串行時(shí)鐘芯片DS1302表面貼裝樣式(體積小,價(jià)格便宜,直接焊接在印刷電路板上)雙列直插樣式(接插方便,適合在實(shí)驗(yàn)室使用)DS12887主要功能主要功能內(nèi)含鋰電池,斷電后運(yùn)行十年以上不丟失數(shù)據(jù)計(jì)秒、分、時(shí)、天、星期,日、月、年,有閏年補(bǔ)償功能二進(jìn)制數(shù)碼或BCD碼表示時(shí)間,日歷和定鬧12小時(shí)或24小時(shí)制,12小時(shí)模式帶有PM和AM指示,有夏令時(shí)功能Motorola和Intel總線時(shí)序選擇128字節(jié)RAM單元與軟件接口,其中:14字節(jié)作為時(shí)鐘與控制寄存器,114字節(jié)

2、為通用RAM,所有RAM單元數(shù)據(jù)都具有掉電保護(hù)功能可編程方波信號(hào)輸出中斷信號(hào)輸出(IRQ)和總線兼容,定鬧中斷、周期性中斷、時(shí)鐘更新周期結(jié)束中斷可分別由軟件屏蔽,也可分別進(jìn)行測(cè)試DS12887的內(nèi)部結(jié)構(gòu)組成的內(nèi)部結(jié)構(gòu)組成 振蕩電路振蕩電路 分頻電路分頻電路 周期中斷周期中斷/方波選擇電路方波選擇電路 14字節(jié)時(shí)鐘寄存器和控制寄存器字節(jié)時(shí)鐘寄存器和控制寄存器 114字節(jié)用戶非易失字節(jié)用戶非易失RAM 十進(jìn)制十進(jìn)制/二進(jìn)制累加器二進(jìn)制累加器 總線接口電路總線接口電路 電源開關(guān)寫保護(hù)單元電源開關(guān)寫保護(hù)單元 鋰電池(據(jù)稱可用鋰電池(據(jù)稱可用10年)年)DS12887的引腳的引腳 1 2 3 4 5 6

3、 7 8 9 10 11 12 MOT NC NC AD0 AD1 AD2AD3AD4AD5AD6AD7GND24 23 22 21 20 19 18 17 16 15 14 13 VCCSQWNC NCNCIRQRESET DSNCCSAS R/W DS12887的引腳作用的引腳作用 Vcc:+5V Vcc電壓在正常范圍內(nèi)時(shí),數(shù)據(jù)可讀寫,鋰電池充電;電壓在正常范圍內(nèi)時(shí),數(shù)據(jù)可讀寫,鋰電池充電; Vcc4.25V,讀寫被禁止,計(jì)時(shí)功能仍繼續(xù);,讀寫被禁止,計(jì)時(shí)功能仍繼續(xù); Vcc3V,RAM和計(jì)時(shí)器供電被切換到內(nèi)部鋰電池和計(jì)時(shí)器供電被切換到內(nèi)部鋰電池 MOT(模式選擇)(模式選擇) 接接Vcc

4、,選擇,選擇MOTOROLA時(shí)序時(shí)序 接接GND,選擇,選擇Intel時(shí)序(時(shí)序( 本課程選擇本課程選擇Intel時(shí)序時(shí)序) SQW(方波輸出)(方波輸出) 能從實(shí)時(shí)鐘內(nèi)部能從實(shí)時(shí)鐘內(nèi)部15級(jí)分頻器的級(jí)分頻器的13個(gè)抽頭中選擇一個(gè)作個(gè)抽頭中選擇一個(gè)作為輸出信號(hào),輸出頻率可通過對(duì)寄存器為輸出信號(hào),輸出頻率可通過對(duì)寄存器A編程改變編程改變 AD0-AD7(雙向地址(雙向地址/數(shù)據(jù)復(fù)用線):數(shù)據(jù)復(fù)用線): 總線周期前半部分出現(xiàn)地址總線周期前半部分出現(xiàn)地址 總線周期后半部分出現(xiàn)數(shù)據(jù)總線周期后半部分出現(xiàn)數(shù)據(jù)DS12887的引腳作用的引腳作用 AS(地址選通輸入):(地址選通輸入): 下降沿把下降沿把AD

5、0AD7輸入的地址鎖存入輸入的地址鎖存入DS12887 DS(數(shù)據(jù)選通或讀輸入)(數(shù)據(jù)選通或讀輸入) 在在Intel模式下,作為讀允許輸入引腳(模式下,作為讀允許輸入引腳(read enable)DS12887寫時(shí)序?qū)憰r(shí)序(Intel模式模式)DS12887讀時(shí)序讀時(shí)序(Intel模式模式)DS12887內(nèi)部寄存器內(nèi)部寄存器 128個(gè)存儲(chǔ)單元個(gè)存儲(chǔ)單元 時(shí)間、日歷、鬧鐘時(shí)間、日歷、鬧鐘10字節(jié)字節(jié) 控制和狀態(tài)寄存器控制和狀態(tài)寄存器4字節(jié)字節(jié) 帶掉電保護(hù)的用戶帶掉電保護(hù)的用戶RAM114字節(jié)字節(jié)DS12887寄存器寄存器地址地址D7D6D5D4D3D2D1D0功能功能00H00059秒秒01H0

6、0059秒鬧鈴秒鬧鈴02H00059分分03H00059分鬧鈴分鬧鈴04HAM/PM00011 或或 023時(shí)時(shí)05HAM/PM00011 或或 023時(shí)鬧鈴時(shí)鬧鈴06H0000017星期星期07H000131日日08H0000112月月09H0063年年0AHUIPDV2DV1DV0RS3RS2RS1RS0寄存器寄存器A0BHSETPIEAIEUIESQWEDM24/12DSE寄存器寄存器B0CHIRQFPFAFUF0000寄存器寄存器C0DHVRT0000000寄存器寄存器D0E31RAM32世紀(jì)世紀(jì)337FRAM時(shí)間、日歷和鬧鐘寄存器時(shí)間、日歷和鬧鐘寄存器寄存器寄存器A 地址:地址:0

7、x0a UIP(0:至少:至少44us內(nèi)不會(huì)更新,內(nèi)不會(huì)更新,1:更新開始):更新開始) DV2DV0 010:晶振開啟并保持時(shí)鐘運(yùn)行:晶振開啟并保持時(shí)鐘運(yùn)行 X11:晶振開啟,但分頻器保持復(fù)位狀態(tài):晶振開啟,但分頻器保持復(fù)位狀態(tài) RS3RS0(中斷周期和(中斷周期和SQW輸出頻率選擇)輸出頻率選擇)D7D6D5D4D3D2D1D0UIPDV2DV1DV0RS3RS2RS1RS0中斷周期和中斷周期和SQW輸出頻率編碼表輸出頻率編碼表RS3 RS2 RS1 RS0中斷周期(中斷周期(ms)SQW輸出頻率(輸出頻率(Hz)000000013.90625ms25600107.8125ms128001

8、1122.070us81920100244.141us40960101488.281us20480110976.562us102401111.953125ms51210003.90625ms25610017.8125ms128101015.625ms64101131.25ms32110062.5ms161101125ms81110250ms41111500ms2寄存器寄存器B 地址:地址:0 x0b SET(0:芯片更新,:芯片更新,1:更新禁止):更新禁止) PIE(0:禁止周期中斷輸出到:禁止周期中斷輸出到IRQ,1:允許):允許) AIE(0:禁止鬧鐘中斷輸出到:禁止鬧鐘中斷輸出到IRQ

9、,1:允許):允許) UIE(0:禁止更新中斷輸出到:禁止更新中斷輸出到IRQ,1:允許):允許) SQWE(0:SQW腳為低,腳為低,1:輸出方波):輸出方波) 24/12(0:12小時(shí)制,小時(shí)制,1:24小時(shí)制)小時(shí)制) DSE(1:夏令時(shí)允許):夏令時(shí)允許)D7D6D5D4D3D2D1D0SETPIEAIEUIESQWEDM24/12DSE寄存器寄存器C 地址:地址:0 x0c IRQF:中斷請(qǐng)求標(biāo)志(:中斷請(qǐng)求標(biāo)志(IRQ輸出低電平)輸出低電平) PF:周期中斷標(biāo)志:周期中斷標(biāo)志 AF:鬧鐘中斷標(biāo)志:鬧鐘中斷標(biāo)志 UF:更新中斷標(biāo)志:更新中斷標(biāo)志D7D6D5D4D3D2D1D0IRQF

10、PFAFUF0000寄存器寄存器D 地址:地址:0 x0d VRT=0 內(nèi)置電池能量耗盡內(nèi)置電池能量耗盡D7D6D5D4D3D2D1D0VRT0000000DS12887與單片機(jī)的接口與單片機(jī)的接口 +5V VCCP3.3 IRQRESETDSCSALE R/WGNDAD7AD0P1.7P1.0P3.7P3.6P3.5P3.4P2.7P2.01516714215+5V3456DS12887LCD1602單片機(jī)單片機(jī)P3.1P3.2P3.0MOT懸空DS12887的工作過程的工作過程寄存器寄存器B的的SET位置位置1,芯片停止工作,芯片停止工作時(shí)間、日歷和鬧鐘單元置初值時(shí)間、日歷和鬧鐘單元置初值

11、讀寄存器讀寄存器C,以消除已有的中斷標(biāo)志,以消除已有的中斷標(biāo)志讀寄存器讀寄存器D,使片內(nèi)寄存器和,使片內(nèi)寄存器和RAM數(shù)據(jù)有數(shù)據(jù)有效效寄存器寄存器B的的SET位清位清0,芯片啟動(dòng)工作,芯片啟動(dòng)工作DS12887時(shí)鐘在液晶板上顯示時(shí)鐘在液晶板上顯示#include#define uchar unsigned char #define uint unsigned intsbit RS=P30;/LCD1602數(shù)據(jù)數(shù)據(jù)/命令選擇命令選擇sbit RW=P31;/LCD1602讀讀/寫選擇(讀寫選擇(讀1,寫,寫0)sbit EN=P32;/LCD1602Enablesbit dscs=P34;/DS

12、12887片選片選sbit dsas=P35;/DS12887地址鎖存地址鎖存sbit dsrw=P36;/DS12887讀寫控制讀寫控制sbit dsds=P37;/DS12887數(shù)據(jù)選通數(shù)據(jù)選通int p;bit flag1,flag_ri;/定義兩個(gè)位變量定義兩個(gè)位變量uchar count,s1num,flag,t0_num;/其它變量定義其它變量定義char miao,shi,fen,year,month,day,week,amiao,afen,ashi;char miao_s,miao_g,shi_s,shi_g,fen_s,fen_g;uint temp,realtemp;flo

13、at f_temp;uchar code word1 = time:;uchar code word2 = To popsong !;uchar shim=0,0;uchar fenm=0,0;uchar miaom=0,0;uchar temperature4=0,0,0,0;uchar k=0;void delay(uint z)/延時(shí)函數(shù)延時(shí)函數(shù)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void delay_led()/延時(shí)子函數(shù)延時(shí)子函數(shù)uchar i=0,j=0;for(i=0; i=10; i+)for(j=0; j=10; j+);LCD16

14、02寫命令子函數(shù)寫命令子函數(shù)void LCDcomm_write(uchar command)RS = 0;/規(guī)定為指令操作規(guī)定為指令操作RW = 0;/允許寫操作允許寫操作P2 = command;/準(zhǔn)備寫的命令字準(zhǔn)備寫的命令字EN = 0;/Enable低電平低電平delay_led();/等待地址和數(shù)據(jù)在總線上穩(wěn)定等待地址和數(shù)據(jù)在總線上穩(wěn)定EN = 1;/Enable上升沿,寫入命令上升沿,寫入命令delay_led();/高電平維持一段時(shí)間高電平維持一段時(shí)間LCD1602寫數(shù)據(jù)子函數(shù)寫數(shù)據(jù)子函數(shù)void LCDdata_write(uchar content)RS = 1;/規(guī)定為數(shù)據(jù)

15、操作規(guī)定為數(shù)據(jù)操作RW = 0;/允許寫操作允許寫操作P2 = content;/準(zhǔn)備寫的數(shù)據(jù)準(zhǔn)備寫的數(shù)據(jù)EN = 0; /Enable低電平低電平delay_led(); /等待地址和數(shù)據(jù)在總線上穩(wěn)定等待地址和數(shù)據(jù)在總線上穩(wěn)定EN = 1;/Enable上升沿,寫入數(shù)據(jù)上升沿,寫入數(shù)據(jù)delay_led(); /高電平維持一段時(shí)間高電平維持一段時(shí)間 LCD1602初始化初始化void LCD_init()LCDcomm_write(0 x01);/清屏,數(shù)據(jù)指針清清屏,數(shù)據(jù)指針清0LCDcomm_write(0 x38);/設(shè)置設(shè)置2行行*16字符顯示模式字符顯示模式LCDcomm_writ

16、e(0 x0c);/開顯示,不顯示光標(biāo),不閃爍開顯示,不顯示光標(biāo),不閃爍LCDcomm_write(0 x06);/寫一個(gè)字符后地址指針加寫一個(gè)字符后地址指針加1寫寫12C887函數(shù)函數(shù)void DS12887write(uchar addr,uchar date) dsds=1;/在地址寫入期間在地址寫入期間DS應(yīng)始終為高電平應(yīng)始終為高電平dsrw=1;/時(shí)序要求地址信號(hào)出現(xiàn)以前時(shí)序要求地址信號(hào)出現(xiàn)以前RW應(yīng)為高應(yīng)為高電平電平dsas=1;/地址鎖存端輸出高電平地址鎖存端輸出高電平P1=addr;/把地址信號(hào)送上總線把地址信號(hào)送上總線dscs=0;/選中芯片選中芯片dsas=0;/地址鎖存下

17、降沿將地址寫入地址鎖存下降沿將地址寫入DS12887dsrw=0;/RW低電平,準(zhǔn)備寫數(shù)據(jù)低電平,準(zhǔn)備寫數(shù)據(jù)P1=date;/把數(shù)據(jù)信號(hào)送上總線把數(shù)據(jù)信號(hào)送上總線dsrw=1;/寫數(shù)據(jù)完成寫數(shù)據(jù)完成dsas=1;/取消地址鎖存取消地址鎖存dscs=1;/取消芯片選擇取消芯片選擇讀讀12C887函數(shù)函數(shù)uchar DS12887read(uchar addr) / uchar ds_date;dsds=1;dsrw=1;/時(shí)序要求地址信號(hào)出現(xiàn)以前時(shí)序要求地址信號(hào)出現(xiàn)以前RW應(yīng)為高電平應(yīng)為高電平dsas=1;dscs=0;/選中芯片選中芯片P1=addr;/把地址信號(hào)送上總線把地址信號(hào)送上總線ds

18、as=0; /地址鎖存下降沿將地址寫入地址鎖存下降沿將地址寫入DS12887dsds=0;/DS低電平表示低電平表示“讀允許讀允許”P1=0 xff; /P1口先輸出全口先輸出全1,為讀數(shù)據(jù)做準(zhǔn)備,為讀數(shù)據(jù)做準(zhǔn)備ds_date=P1;/從從P1口讀入數(shù)據(jù)口讀入數(shù)據(jù)dsds=1;/讀數(shù)據(jù)完成讀數(shù)據(jù)完成dsas=1; /取消地址鎖存取消地址鎖存dscs=1; /取消芯片選擇取消芯片選擇return ds_date;/返回讀取的數(shù)據(jù)返回讀取的數(shù)據(jù)DS12887時(shí)鐘初始化函數(shù)時(shí)鐘初始化函數(shù)void DS12887init()DS12887write(0 x0A,0 x20);/打開振蕩器打開振蕩器DS

19、12887write(0 x0B,0 x26);/設(shè)置設(shè)置24小時(shí)模式,數(shù)據(jù)小時(shí)模式,數(shù)據(jù)二進(jìn)制格式二進(jìn)制格式set_time();/設(shè)置上電初始時(shí)間設(shè)置上電初始時(shí)間 首次上電初始化時(shí)間函數(shù)首次上電初始化時(shí)間函數(shù)void set_time() DS12887write(4,14);/ 時(shí)時(shí)DS12887write(2,21);/分分DS12887write(0,10);/秒秒DS12887write(6,6); /星期星期DS12887write(7,11);/日日DS12887write(8,6);/月月DS12887write(9,11);/年年void main()LCD_init();

20、/液晶顯示模塊初始化液晶顯示模塊初始化DS12887init();/ds12c887 初始化,第一次使用時(shí)才用初始化,第一次使用時(shí)才用while(1) miao=DS12887read(0);/獲取時(shí)間獲取時(shí)間 fen=DS12887read(2); shi=DS12887read(4); miao_g=miao%10;/將獲取時(shí)間轉(zhuǎn)換為將獲取時(shí)間轉(zhuǎn)換為一位一位 miao_s=miao/10; fen_g=fen%10; fen_s=fen/10; shi_g=shi%10; shi_s=shi/10;LCDcomm_write(0 x80);/指定寫入起始地址(第一行開頭)指定寫入起始地址(

21、第一行開頭)for(k=0;k5;k+) LCDdata_write(word1k);/逐個(gè)字符寫入逐個(gè)字符寫入LCDdelay_led();LCDdata_write(0 x30+shi_s);/分別將時(shí)間寫入分別將時(shí)間寫入LCDLCDdata_write(0 x30+shi_g);LCDdata_write(0 x2f);/間隔符間隔符LCDdata_write(0 x30+fen_s);LCDdata_write(0 x30+fen_g);LCDdata_write(0 x2f);/間隔符間隔符LCDdata_write(0 x30+miao_s);LCDdata_write(0 x30

22、+miao_g);LCDcomm_write(0 xc0);/指定寫入起始地址(第二行開頭)指定寫入起始地址(第二行開頭)for(k=0;k15;k+) LCDdata_write(word2k);/逐個(gè)字符寫入逐個(gè)字符寫入LCDdelay_led();DS1302串行日歷時(shí)鐘芯片串行日歷時(shí)鐘芯片 美國美國Dallas公司的涓流充電時(shí)鐘芯片公司的涓流充電時(shí)鐘芯片 主要應(yīng)用于微型便攜式儀器主要應(yīng)用于微型便攜式儀器Vcc2X1X2GNDVcc1SCLKI/ORST87651234DS1302的主要性能指標(biāo)的主要性能指標(biāo)(1)能計(jì)算)能計(jì)算2100年之前的秒、分、時(shí)、日、日期、年之前的秒、分、時(shí)、日

23、、日期、星期、月、年,有閏年調(diào)整能力星期、月、年,有閏年調(diào)整能力(2)內(nèi)部含有)內(nèi)部含有31字節(jié)靜態(tài)字節(jié)靜態(tài)RAM,可提供用戶訪問,可提供用戶訪問(3)采用串行數(shù)據(jù)傳送方式,)采用串行數(shù)據(jù)傳送方式,3 線接口,引腳少線接口,引腳少(4)工作電壓范圍寬:)工作電壓范圍寬:2.05.5V(5)工作電流:)工作電流:2.0V時(shí),小于時(shí),小于300nA(6)時(shí)鐘或)時(shí)鐘或RAM數(shù)據(jù)的讀數(shù)據(jù)的讀/寫有兩種傳送方式:?jiǎn)螌懹袃煞N傳送方式:?jiǎn)巫止?jié)傳送和多字節(jié)傳送字節(jié)傳送和多字節(jié)傳送(7)采用)采用8腳腳DIP封裝或封裝或SOIC封裝封裝(8)可選工業(yè)級(jí)溫度范圍:)可選工業(yè)級(jí)溫度范圍:-40 C+85 C(9)

24、具有涓流充電能力)具有涓流充電能力(10)雙電源供應(yīng)(主電源和備份電源)雙電源供應(yīng)(主電源和備份電源) , 備份備份電源可由電池或大容量電容實(shí)現(xiàn)電源可由電池或大容量電容實(shí)現(xiàn)DS1302引腳功能引腳功能 X1、X2: 32.768KHz晶振接入晶振接入 GND:地地 RST:復(fù)位,低電平有效復(fù)位,低電平有效 I/O:數(shù)據(jù)輸入數(shù)據(jù)輸入/輸出,三態(tài)輸出,三態(tài) SCLK:串行時(shí)鐘輸入串行時(shí)鐘輸入 Vcc1:工作電源工作電源 Vcc2:備用電源備用電源Vcc2X1X2GNDVcc1SCLKI/ORST87651234Vcc1和和Vcc2中的較大者中的較大者給給DS1302供電供電DS1302的控制寄存器

25、的控制寄存器 用于存放控制命令字用于存放控制命令字 RST引腳回到高電平后,寫入的第一個(gè)字節(jié)就為引腳回到高電平后,寫入的第一個(gè)字節(jié)就為控制命令控制命令 RAM/CK片內(nèi)片內(nèi)RAM或日歷、時(shí)鐘寄存器選擇或日歷、時(shí)鐘寄存器選擇 D5D1地址選擇地址選擇 R/W讀寫選擇(讀寫選擇(1:讀:讀 0:寫):寫)D7D6D5D4D3D2D1D01RAM/CKA4A3A2A1A0R/WDS1302片內(nèi)存儲(chǔ)單元地址選擇片內(nèi)存儲(chǔ)單元地址選擇寄存器名稱寄存器名稱D7D6D5D4D3D2D1D01RAM/CKA4A3A2A1A0R/W秒寄存器秒寄存器10000000或或1分寄存器分寄存器10000010或或1小時(shí)寄

26、存器小時(shí)寄存器10000100或或1日寄存器日寄存器10000110或或1月寄存器月寄存器10001000或或1星期寄存器星期寄存器10001010或或1年寄存器年寄存器10001100或或1寫保護(hù)寄存器寫保護(hù)寄存器10001110或或1慢充電寄存器慢充電寄存器10010000或或1時(shí)鐘突發(fā)模式時(shí)鐘突發(fā)模式10111110或或1RAM011000000或或1110或或1RAM3011111100或或1RAM突發(fā)模式突發(fā)模式11111110或或1DS1302內(nèi)部寄存器內(nèi)部寄存器寄存器名稱寄存器名稱取值范圍取值范圍D7D6D5D4D3D2D1D0秒寄存器秒寄存器0059CH秒的十位秒的十位秒的個(gè)位

27、秒的個(gè)位分寄存器分寄存器00590分的十位分的十位分的個(gè)位分的個(gè)位小時(shí)寄存器小時(shí)寄存器0112或或002312/240A/PHR小時(shí)的個(gè)位小時(shí)的個(gè)位日寄存器日寄存器013100日的十位日的十位日的個(gè)位日的個(gè)位月寄存器月寄存器01120001或或0月的個(gè)位月的個(gè)位星期寄存器星期寄存器01070000星期幾星期幾年寄存器年寄存器0199年的十位年的十位年的個(gè)位年的個(gè)位寫保護(hù)寄存器寫保護(hù)寄存器WP0000000慢充電寄存器慢充電寄存器TCSTCSTCSTCSDSDSRSRS時(shí)鐘突發(fā)寄存器時(shí)鐘突發(fā)寄存器DS1302內(nèi)部寄存器功能說明內(nèi)部寄存器功能說明 數(shù)據(jù)都以數(shù)據(jù)都以BCD碼形式表示碼形式表示 小時(shí)寄

28、存器小時(shí)寄存器 D712/24小時(shí)制選擇位小時(shí)制選擇位 12小時(shí)制(小時(shí)制(D7=1 ) ,D5為為1是上午,是上午,D5為為0是下午,是下午,D4為小時(shí)的十位為小時(shí)的十位 24小時(shí)制(小時(shí)制(D7=0 ) ,D5、D4為小時(shí)的十位為小時(shí)的十位 秒寄存器秒寄存器 CH(D7)為時(shí)鐘暫停位()為時(shí)鐘暫停位(1:時(shí)鐘暫停,:時(shí)鐘暫停,0:時(shí)鐘啟動(dòng))時(shí)鐘啟動(dòng))DS1302內(nèi)部寄存器功能說明內(nèi)部寄存器功能說明 寫保護(hù)寄存器寫保護(hù)寄存器 WP寫保護(hù)位(寫保護(hù)位(1:寫保護(hù),:寫保護(hù),0:未寫保護(hù)):未寫保護(hù)) 對(duì)日歷、時(shí)鐘寄存器或片內(nèi)對(duì)日歷、時(shí)鐘寄存器或片內(nèi)RAM進(jìn)行寫操作時(shí),進(jìn)行寫操作時(shí),WP應(yīng)清零應(yīng)

29、清零 對(duì)日歷、時(shí)鐘寄存器或片內(nèi)對(duì)日歷、時(shí)鐘寄存器或片內(nèi)RAM進(jìn)行讀操作時(shí),進(jìn)行讀操作時(shí),WP一般置一般置1DS1302內(nèi)部寄存器功能說明內(nèi)部寄存器功能說明 慢充電寄存器慢充電寄存器 TCS控制慢充電的選擇,控制慢充電的選擇,TCS=1010時(shí)才時(shí)才能使慢充電工作能使慢充電工作 DS二極管選擇位二極管選擇位 DS=01,選擇一個(gè)二極管,選擇一個(gè)二極管 DS=10,選擇二個(gè)二極管,選擇二個(gè)二極管 DS=11或或00,充電器被禁止,與,充電器被禁止,與TCS無關(guān)無關(guān) RS選擇連接在選擇連接在VCC2與與VCC1之間的電阻,之間的電阻,RS為為00,充電器被禁止,與,充電器被禁止,與TCS無關(guān)無關(guān)說明

30、:(1)數(shù)據(jù)都以BCD碼形式。(2)小時(shí)寄存器的D7位為12小時(shí)制/24小時(shí)制的選擇位,當(dāng)為1時(shí)選12小時(shí)制,當(dāng)為0時(shí)選24小時(shí)制。當(dāng)12小時(shí)制時(shí),D5位為1是上午,D5位為0是下午,D4為小時(shí)的十位。當(dāng)24小時(shí)制時(shí),D5、D4位為小時(shí)的十位。(3)秒寄存器中的CH位為時(shí)鐘暫停位,當(dāng)為1時(shí)鐘暫停,為0時(shí)鐘開始啟動(dòng)。(4)寫保護(hù)寄存器中的WP為寫保護(hù)位,當(dāng)WP=1,寫保護(hù),當(dāng)WP=0未寫保護(hù),當(dāng)對(duì)日歷、時(shí)鐘寄存器或片內(nèi)RAM進(jìn)行寫時(shí)WP應(yīng)清零,當(dāng)對(duì)日歷、時(shí)鐘寄存器或片內(nèi)RAM進(jìn)行讀時(shí)WP一般置1。(5)慢充電寄存器的TCS位為控制慢充電的選擇,當(dāng)它為1010才能使慢充電工作。DS為二極管選擇位。

31、DS為01選擇一個(gè)二極管,DS為10選擇二個(gè)二極管,DS為11或00充電器被禁止,與TCS無關(guān)。RS用于選擇連接在VCC2與VCC1之間的電阻,RS為00,充電器被禁止,與TCS無關(guān),電阻選擇情況見表.RSRS位位電阻器電阻器阻值阻值0000無無無無0101R1R12K2K1010R2R24K4K1111R3R38K8KDS1302片內(nèi)片內(nèi)RAM DS1302片內(nèi)有片內(nèi)有31個(gè)個(gè)RAM單元單元 對(duì)片內(nèi)對(duì)片內(nèi)RAM的操作有兩種方式:的操作有兩種方式: 單字節(jié)方式(命令字為單字節(jié)方式(命令字為C0HFDH),命令字),命令字中的中的D5D1用于選擇對(duì)應(yīng)的用于選擇對(duì)應(yīng)的RAM單元,其中奇單元,其中奇

32、數(shù)為讀操作,偶數(shù)為寫操作數(shù)為讀操作,偶數(shù)為寫操作 多字節(jié)方式(命令字為多字節(jié)方式(命令字為FEH、FFH),可一次),可一次把所有的把所有的RAM單元內(nèi)容進(jìn)行讀寫。單元內(nèi)容進(jìn)行讀寫。FEH為寫操為寫操作,作,F(xiàn)FH為讀操作為讀操作DS1302的輸入輸出過程的輸入輸出過程 RST高電平,啟動(dòng)輸入輸出過程高電平,啟動(dòng)輸入輸出過程 命令字寫入控制寄存器命令字寫入控制寄存器 根據(jù)寫入的命令字,依次讀寫內(nèi)部寄存器或片內(nèi)根據(jù)寫入的命令字,依次讀寫內(nèi)部寄存器或片內(nèi)RAM單單元的數(shù)據(jù)元的數(shù)據(jù) 對(duì)于日歷、時(shí)鐘寄存器,根據(jù)命令字,一次可以讀寫一個(gè)日歷、對(duì)于日歷、時(shí)鐘寄存器,根據(jù)命令字,一次可以讀寫一個(gè)日歷、時(shí)鐘寄

33、存器,也可以一次讀寫時(shí)鐘寄存器,也可以一次讀寫8個(gè)字節(jié)個(gè)字節(jié) 對(duì)所有的日歷、時(shí)鐘寄存器,對(duì)所有的日歷、時(shí)鐘寄存器,“寫寫”命令字為命令字為0BEH,“讀讀”命令命令字為字為0BFH 對(duì)于片內(nèi)對(duì)于片內(nèi)RAM單元,根據(jù)命令字,一次可讀寫一個(gè)字節(jié),一次也單元,根據(jù)命令字,一次可讀寫一個(gè)字節(jié),一次也可讀寫可讀寫31個(gè)字節(jié)個(gè)字節(jié) 數(shù)據(jù)讀寫完后,數(shù)據(jù)讀寫完后,RST變?yōu)榈碗娖剑Y(jié)束輸入輸出過程變?yōu)榈碗娖剑Y(jié)束輸入輸出過程 無論是命令字還是數(shù)據(jù),一個(gè)字節(jié)傳送時(shí)都是低位在前,無論是命令字還是數(shù)據(jù),一個(gè)字節(jié)傳送時(shí)都是低位在前,高位在后,高位在后,每一位的讀寫發(fā)生在時(shí)鐘的上升沿每一位的讀寫發(fā)生在時(shí)鐘的上升沿DS1

34、302在開發(fā)板上的接口在開發(fā)板上的接口 晶振頻率晶振頻率32768Hz練習(xí)練習(xí) 在開發(fā)板的在開發(fā)板的LED數(shù)碼管上顯示預(yù)設(shè)的時(shí)間數(shù)碼管上顯示預(yù)設(shè)的時(shí)間#include#include#define uchar unsigned char#define uint unsigned intuchar code table10 = 0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;sbit ACC0 = ACC0;sbit ACC7 = ACC7;sbit T_CLK = P16; /時(shí)鐘線引腳時(shí)鐘線引腳sbit T_IO = P

35、35; /數(shù)據(jù)線引腳數(shù)據(jù)線引腳sbit T_RST = P17; /復(fù)位線引腳復(fù)位線引腳1ms延時(shí)延時(shí)void delay_ms(uint i)/1ms延時(shí)延時(shí)uchar x,j;for(j=0;ji;j+)for(x=0;x0; i-)/逐個(gè)數(shù)據(jù)位寫入逐個(gè)數(shù)據(jù)位寫入DS1302T_IO = ACC0;/經(jīng)經(jīng)IO口向芯片寫入數(shù)據(jù)最低位口向芯片寫入數(shù)據(jù)最低位T_CLK = 1;/產(chǎn)生一個(gè)時(shí)鐘上升沿,寫入數(shù)據(jù)位產(chǎn)生一個(gè)時(shí)鐘上升沿,寫入數(shù)據(jù)位T_CLK = 0;/時(shí)鐘恢復(fù)低電平時(shí)鐘恢復(fù)低電平ACC = ACC 1;/把下一個(gè)待寫數(shù)據(jù)位移到最低位把下一個(gè)待寫數(shù)據(jù)位移到最低位讀取數(shù)據(jù)字節(jié)讀取數(shù)據(jù)字節(jié)uc

36、har DS1302readbyte(void) uchar i;T_RST = 1;/RST高電平啟動(dòng)數(shù)據(jù)讀寫過程高電平啟動(dòng)數(shù)據(jù)讀寫過程for(i=8; i0; i-)ACC = ACC 1; /右移一位,最高位準(zhǔn)備保存數(shù)據(jù)右移一位,最高位準(zhǔn)備保存數(shù)據(jù)T_IO=1;/向芯片的向芯片的IO端口寫端口寫1ACC7 = T_IO; /讀入讀入IO端口的數(shù)據(jù)位,保存到累加器最高位端口的數(shù)據(jù)位,保存到累加器最高位T_CLK = 1;/產(chǎn)生時(shí)鐘上升沿,讀出芯片中的下一個(gè)數(shù)據(jù)位產(chǎn)生時(shí)鐘上升沿,讀出芯片中的下一個(gè)數(shù)據(jù)位T_CLK = 0;/時(shí)鐘恢復(fù)低電平時(shí)鐘恢復(fù)低電平return(ACC);/返回從芯片讀得

37、的數(shù)據(jù)字節(jié)返回從芯片讀得的數(shù)據(jù)字節(jié)向指定地址寫入數(shù)據(jù)向指定地址寫入數(shù)據(jù)void DS1302writedata(uchar ucAddr, uchar ucDa)T_RST = 0;/復(fù)位復(fù)位T_CLK = 0;/時(shí)鐘恢復(fù)低電平時(shí)鐘恢復(fù)低電平T_RST = 1;/RST高電平,啟動(dòng)讀寫過程高電平,啟動(dòng)讀寫過程DS1302writebyte(ucAddr); /寫地址寫地址 _nop_();/短暫延時(shí)短暫延時(shí)_nop_();DS1302writebyte(ucDa); /寫數(shù)據(jù)字節(jié)寫數(shù)據(jù)字節(jié)T_CLK = 1;T_RST = 0;/RST低電平,結(jié)束讀寫過程低電平,結(jié)束讀寫過程讀取指定地址的數(shù)據(jù)

38、字節(jié)讀取指定地址的數(shù)據(jù)字節(jié)uchar DS1302readdata(uchar ucAddr)uchar ucDa;T_RST = 0;/復(fù)位復(fù)位T_CLK = 0;/時(shí)鐘恢復(fù)低電平時(shí)鐘恢復(fù)低電平T_RST = 1;/RST高電平,啟動(dòng)讀寫過程高電平,啟動(dòng)讀寫過程DS1302writebyte(ucAddr); /寫地址,命令寫地址,命令_nop_();_nop_();ucDa = DS1302readbyte(); /讀讀1Byte數(shù)據(jù)數(shù)據(jù)T_CLK = 1;/需要關(guān)注時(shí)序問題需要關(guān)注時(shí)序問題T_RST = 0;/RST低電平,結(jié)束讀寫過程低電平,結(jié)束讀寫過程return(ucDa);BCD

39、碼轉(zhuǎn)換為碼轉(zhuǎn)換為DEC碼碼uchar bcdtodec(uchar bcd)uchar data1;data1 = bcd & 0 x0f; /取取BCD低低4位位bcd = bcd & 0 x70; /剔除剔除BCD的最高位和低的最高位和低4位。位。data1 += bcd 1;data1 += bcd 3; /用位移代替乘法運(yùn)算用位移代替乘法運(yùn)算return data1;/返回轉(zhuǎn)換結(jié)果返回轉(zhuǎn)換結(jié)果寫入初始化日期時(shí)間寫入初始化日期時(shí)間void DS1302init(void)DS1302writedata(0 x8e,0);/取消寫保護(hù)取消寫保護(hù)DS1302writedata(0 x80,0

40、 x50);/寫入秒寫入秒DS1302writedata(0 x8e,0);DS1302writedata(0 x82,0 x59);/寫入分寫入分DS1302writedata(0 x8e,0);DS1302writedata(0 x84,0 x18);/寫入小時(shí)寫入小時(shí)DS1302writedata(0 x8e,0);DS1302writedata(0 x86,0 x09);/寫入日寫入日DS1302writedata(0 x8e,0);DS1302writedata(0 x88,0 x06);/寫入月寫入月DS1302writedata(0 x8e,0);DS1302writedata(

41、0 x8a,0 x04);/寫入星期寫入星期DS1302writedata(0 x8e,0);DS1302writedata(0 x8c,0 x11);/寫入年寫入年這種方法只能在程序中寫入固定的日期時(shí)間這種方法只能在程序中寫入固定的日期時(shí)間讀出日期時(shí)間,并在讀出日期時(shí)間,并在LED數(shù)碼管上顯示數(shù)碼管上顯示void DS1302run(void)uchar sec, min, hour, day, month, year;while(1)DS1302writedata(0 x8f, 0);/秒寄存器讀秒寄存器讀sec = bcdtodec(DS1302readdata(0 x81);/讀出秒讀

42、出秒DS1302writedata(0 x8f, 0);min = bcdtodec(DS1302readdata(0 x83);/讀出分讀出分DS1302writedata(0 x8f, 0);hour = bcdtodec(DS1302readdata(0 x85); /讀出小時(shí)讀出小時(shí)DS1302writedata(0 x8f, 0);day = bcdtodec(DS1302readdata(0 x87);/讀出日讀出日DS1302writedata(0 x8f, 0);month = bcdtodec(DS1302readdata(0 x89); /讀出月讀出月DS1302write

43、data(0 x8f, 0);year = bcdtodec(DS1302readdata(0 x8d); /讀出年讀出年P(guān)0 = tablehour / 10 % 10;/小時(shí)十位小時(shí)十位P2 = 0;delay_ms(2);P0 = tablehour % 10;/小時(shí)個(gè)位小時(shí)個(gè)位P2 = 1;delay_ms(2);P0 = 0 x80;/小數(shù)點(diǎn)小數(shù)點(diǎn)P2 = 2;delay_ms(2);P0 = tablemin / 10 % 10;/分鐘十位分鐘十位P2 = 3;delay_ms(2);P0 = tablemin % 10;/分鐘個(gè)位分鐘個(gè)位P2 = 4;delay_ms(2);P0

44、 = 0 x80;P2 = 5;delay_ms(2);P0 = tablesec / 10 % 10;/秒十位秒十位P2 = 6;delay_ms(2);P0 = tablesec % 10;/秒個(gè)位秒個(gè)位P2 = 7;delay_ms(2); void Main(void)DS1302init();DS1302run();練習(xí)練習(xí) 利用下載程序的利用下載程序的“串口助手串口助手”,通過串行,通過串行異步通信接口,把指定的日期時(shí)間寫入異步通信接口,把指定的日期時(shí)間寫入DS1302的寄存器中,并在的寄存器中,并在LDE數(shù)碼管上顯數(shù)碼管上顯示實(shí)時(shí)時(shí)鐘示實(shí)時(shí)時(shí)鐘利用串口助手寫入初始日期時(shí)間利用串口

45、助手寫入初始日期時(shí)間在這里寫在這里寫日期時(shí)間日期時(shí)間打開串口打開串口發(fā)送數(shù)據(jù)發(fā)送數(shù)據(jù)#include#include#define uchar unsigned char#define uint unsigned intsbit ACC0 = ACC0;/累加器累加器0位位sbit ACC7 = ACC7;sbit T_CLK = P16; /時(shí)鐘線引腳時(shí)鐘線引腳sbit T_IO = P35; /數(shù)據(jù)線引腳數(shù)據(jù)線引腳sbit T_RST = P17; /復(fù)位線引腳復(fù)位線引腳uchar flag=0,a,i;uchar code table10 = 0 x3f,0 x06,0 x5b,0 x4

46、f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;uchar numbers17;初始化串口初始化串口void delay_ms(uint ms)/1ms延時(shí)延時(shí)uchar x,j;for(j=0;jms;j+)for(x=0;x 1;data1 += bcd 3; /用位移代替乘法運(yùn)算用位移代替乘法運(yùn)算return data1;從串口接收日期時(shí)間字符串從串口接收日期時(shí)間字符串void getdatetime()while(i0; i-)T_IO = ACC0;/經(jīng)經(jīng)IO口向芯片寫入數(shù)據(jù)最低位口向芯片寫入數(shù)據(jù)最低位T_CLK = 1;/產(chǎn)生時(shí)鐘上升沿,寫入數(shù)據(jù)位產(chǎn)生時(shí)

47、鐘上升沿,寫入數(shù)據(jù)位T_CLK = 0;/時(shí)鐘恢復(fù)低電平時(shí)鐘恢復(fù)低電平ACC = ACC 1; /把累加器中下一個(gè)待寫數(shù)據(jù)位移到最低位把累加器中下一個(gè)待寫數(shù)據(jù)位移到最低位向指定地址寫入數(shù)據(jù)向指定地址寫入數(shù)據(jù)void DS1302writedata(uchar ucAddr, uchar ucDa)T_RST = 0;/復(fù)位復(fù)位T_CLK = 0;/時(shí)鐘恢復(fù)低電平時(shí)鐘恢復(fù)低電平T_RST = 1;/RST高電平,啟動(dòng)數(shù)據(jù)讀寫過程高電平,啟動(dòng)數(shù)據(jù)讀寫過程DS1302writebyte(ucAddr); /寫地址寫地址 _nop_();/短暫延時(shí)短暫延時(shí)_nop_();DS1302writebyte

48、(ucDa); /寫數(shù)據(jù)字節(jié)寫數(shù)據(jù)字節(jié)T_CLK = 1;T_RST = 0;/RST低電平,結(jié)束讀寫過程低電平,結(jié)束讀寫過程讀取數(shù)據(jù)字節(jié)讀取數(shù)據(jù)字節(jié)uchar DS1302readbyte(void) uchar i;T_RST = 1;/RST高電平啟動(dòng)數(shù)據(jù)讀寫過程高電平啟動(dòng)數(shù)據(jù)讀寫過程for(i=8; i0; i-)ACC = ACC 1; /累加器右移一位,最高位準(zhǔn)備保存數(shù)據(jù)累加器右移一位,最高位準(zhǔn)備保存數(shù)據(jù)T_IO=1;/向芯片的向芯片的IO端口寫端口寫1ACC7 = T_IO;/讀入芯片讀入芯片IO端口的數(shù)據(jù)位,保存到累加器最高位端口的數(shù)據(jù)位,保存到累加器最高位T_CLK = 1;

49、/產(chǎn)生一個(gè)時(shí)鐘上升沿,讀出芯片中的下一個(gè)數(shù)據(jù)位產(chǎn)生一個(gè)時(shí)鐘上升沿,讀出芯片中的下一個(gè)數(shù)據(jù)位T_CLK = 0;/時(shí)鐘恢復(fù)低電平時(shí)鐘恢復(fù)低電平return(ACC);/返回從芯片讀得的數(shù)據(jù)字節(jié)返回從芯片讀得的數(shù)據(jù)字節(jié)讀取指定地址的數(shù)據(jù)字節(jié)讀取指定地址的數(shù)據(jù)字節(jié)uchar DS1302readdata(uchar ucAddr)uchar ucDa;T_RST = 0;/復(fù)位復(fù)位T_CLK = 0;/時(shí)鐘恢復(fù)低電平時(shí)鐘恢復(fù)低電平T_RST = 1;/RST高電平,啟動(dòng)數(shù)據(jù)讀寫過程高電平,啟動(dòng)數(shù)據(jù)讀寫過程DS1302writebyte(ucAddr); /寫地址,命令寫地址,命令_nop_();_n

50、op_();ucDa = DS1302readbyte(); /讀讀1Byte數(shù)據(jù)數(shù)據(jù)T_CLK = 1;/需要關(guān)注時(shí)序問題需要關(guān)注時(shí)序問題T_RST = 0;/RST低電平,結(jié)束讀寫過程低電平,結(jié)束讀寫過程return(ucDa);寫入初始日期時(shí)間寫入初始日期時(shí)間void DS1302init(void)uchar temp;DS1302writedata(0 x8e,0);/取消寫保護(hù)取消寫保護(hù)temp=numbers15*16+numbers16;DS1302writedata(0 x80,temp);/寫入秒寫入秒DS1302writedata(0 x8e,0);temp=numbers12*16+numb

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論