?? WRITE IN FRONT ?????
- ?? 介紹:"謓澤"正在路上朝著"攻城獅"方向"前進四" ??
- ?? 榮譽:2021|2022年度博客之星物聯(lián)網(wǎng)與嵌入式開發(fā)TOP5|TOP4、2021|2222年獲評百大博主、華為云享專家、阿里云專家博主、掘金優(yōu)秀創(chuàng)作者、全網(wǎng)粉絲量7w+、全網(wǎng)訪問量100w+??
- ?? 本文章內(nèi)容由 謓澤 原創(chuàng) 如需相關(guān)轉(zhuǎn)載請?zhí)崆案嬷┲??
- ?? 個人主頁:謓澤的博客???
- ?? 專欄系列:【51單片機】系列???
- ????? Gitee:謓澤 (wsxsx) - Gitee.com???
- ?? 點贊??+ 收藏??+ 留言???
?? 我們并非登上我們所選擇的舞臺,演出并非我們所選擇的劇本 ??
?? 本系列嗶哩嗶哩江科大51單片機的視頻為主以及博主自己碼字的總結(jié)梳理 ???
DS1302介紹
DS1302是由美國DALLAS公司推出的具有涓細電流充電能力的低功耗實時時鐘芯片。它可以對年、月、日、周、時、分、秒進行計時,且具有閏年補償?shù)榷喾N功能。
RTC(Real Time Clock):實時時鐘,是一種集成電路。通常稱為時鐘芯片,里面內(nèi)部自帶晶振且集成化。
??拓展→現(xiàn)在流行的串行時鐘電路很多例如『DS1302﹣DS1307﹣PCF8485』等...
這些電路的接口簡單、價格低廉、使用方便,被廣泛地采用。本文介紹的實時時鐘電路DS1302是DALLAS公司的一種具有涓細電流充電能力的電路。
??說明?涓細電流充電是用來彌補電池在充滿電后由于自放電而造成的容量損失。一般采用脈沖電流充電來實現(xiàn)上述目的。為補償自放電,使蓄電池保持在近似完全充電狀態(tài)的連續(xù)小電流充電,又稱維護充電。采用普通32.768kHz晶振。?
有些人可能會不理解 為什么通過定時器就能夠?qū)崿F(xiàn)定時器時鐘的功能。為什么還需要要這個DS1302芯片?
解釋?首先我們的單片機它的定時器時鐘就會有幾個缺點。
⒈定時器時鐘它的精度不高,它沒有時鐘芯片這個精度高,說白點就是時鐘更加準確性。
⒉定時器時鐘會占用我們單片機的CPU時間。因為我們單片機在運行其它東西時候,還需要不斷的給這個單片機計算時間。所以就會消耗我們單片機的一個CPU也就是中央處理器。
⒊單片機定時器時鐘它是不能夠掉電繼續(xù)運行的,而DS1302時鐘芯片卻可以。
?
芯片手冊
芯片手冊在我們學(xué)習(xí)單片機的時候尤為重要,學(xué)習(xí)單片機一定要學(xué)會懂得如何查找芯片手冊??梢哉f在我們以后寫一個項目的時候手冊對于我們的幫助是極大的。所以,我們一定要學(xué)會把手冊利用起來。當(dāng)你買了一個模塊或者是芯片的時候叫廠家把手冊發(fā)過來,就比如這個DS1302商家那里同樣也是有的。
DS1302
??注?在這里我只是會介紹大概意思,具體的可以去叫商家把這個DS1302的手冊發(fā)給你。
⒈直插分裝→它的引腳是立起來的直接插在我們PCB板子上的焊盤上的。
⒉貼片分裝→它的話就不是插入在我們的PCB板子上了。而是貼在電路板子表面上的像我們開發(fā)板的芯片就是我們的貼片分裝,那么這兩個分裝它只是外表不一樣。它的內(nèi)部這個集成芯片的電路都是一模一樣的,包括它的引腳定義都是一模一樣的,只不過就是一種是大分裝直插的,一種是小分裝貼片的。
如上圖所示?在上面的話就是DS1302應(yīng)用電路,當(dāng)我們在拿到手冊的時候那么首先就要把你的硬件打好這樣才能夠更好的編程。然后硬件它是怎么進行連接的,這個在手冊當(dāng)中也是有的。所以說這就是手冊為什么這么重要的原因。?
DS1302 ③個部分
首先這個芯片它有八個引腳大致分為③個部分如下↓
第一部分
如上圖所示?就是我們電源部分的引腳。
其中電源部分的引腳第一個就是(Vcc2)是主電源和我們單片機連接到一起的,然后還有一個電源是(Vcc1)是備用電源。
??注?它的這個引腳命名也是比較奇特的,一般的人都會覺得Vcc1才是主電源。然后(Vcc2)是備用電源。實際上在這個電路當(dāng)中它們兩是相反的。GND(地)就不用多說了和主電源連接在一起的,給芯片供電。
- Vcc2就和我們單片機的電源連接在了一起。
- Vcc1就和我們這個備用電池連接在了一起。
在Vcc1中上面是正極。正極接到了Vcc1,負極接地。
那么有了這個主電源和這個備用電源就可以保證了我們這個時鐘芯片的這個電源是非常的充分了。在上電的時候Vcc2當(dāng)做電源,一旦掉電就切換到備用電池,保證它還能夠正常工作。
開發(fā)板DS1302原理圖
??注?在上述的原理圖當(dāng)中我們可以看到開發(fā)板手冊這里的Vcc1(備用電源)是并沒有接的,那么在我們開發(fā)板上的這個是沒有接這個備用電池的。所以,我們這里掉電繼續(xù)走時的現(xiàn)象是看不到了的。所以說我們這個代碼斷電之后它的這個時鐘也會停止。當(dāng)然這個并不是程序的問題是我們硬件并沒有接上備用電池。
第二部分
![]()
x1和x2固定的接的就是我們的一個晶振(頻率32.768KHZ),那么為什么是這個數(shù)呢?就是因為在我們通用有關(guān)的使用情況之下這個實時時鐘都是這個32.768KHZ的晶振。
因為這個對于這個實時時鐘來說是方便且精度比較高的,就像是我們單片機的串口一樣為什么要使用11.0592KHZ一樣比較合適保證精度。晶振這個東西就是給我們實時時鐘的系統(tǒng)提供了一個穩(wěn)定的實時脈沖系統(tǒng)提供1HZ的標(biāo)準頻率,因為我們需要計時的。那么有了這兩部分的話我們芯片就可以自己進行獨立工作了,把里面的這些時鐘呢就可以運行了。
第三部分
如上圖所示→那么我們單片機需要怎么樣如何去獲取時間內(nèi)就需要這三個引腳。
利用這③個引腳我們就可以把單片機的內(nèi)部時鐘給讀取出來。
包括寫入時間也是用這③個引腳把時間給寫入進去。
這樣就可以讓我們里面的DS1302工作模式給運行出來。
當(dāng)然在我們③個引腳是規(guī)定了一套協(xié)議的,利用這套協(xié)議就可以對我們里面的寄存器進行讀寫。就可以讀取以及寫入這個時間,這③個引腳和74HC595移位寄存器當(dāng)中的很類似。
IO和SER(P34)?串行數(shù)據(jù)是對應(yīng)以及SCLK(P36)?叫做串行時鐘。注→串行數(shù)據(jù)是一位一位比特位來進行發(fā)送的。
CE就是對IO和SCLK這兩個使能的在讀和寫的時候必須保證它為高電平,相當(dāng)于開關(guān)控制。
內(nèi)部的結(jié)構(gòu)框圖
DS1302的內(nèi)部結(jié)構(gòu)框圖如下↓
如下圖→這一部分就是接的是我們的時鐘晶振可以通過內(nèi)部這些電路的一些設(shè)置。經(jīng)過頻率的一些分頻阿等等運算之后,就會輸出這個1HZ的標(biāo)準輸出頻率。
如下圖→這一部分就是我們時鐘的一個內(nèi)部寄存器,就是說我們這個內(nèi)部的時間都是存在這個寄存器當(dāng)中的,31x8的RAM寄存器。就跟我們單片機的寄存器一樣,我們只需要對內(nèi)部寄存器進行讀寫就可以訪問時間了。內(nèi)部寄存器存儲時間。?
如下圖→這一部分就是我們的訪問,怎么讀寫寄存器就是靠這個來的。
??注?在74HC595的移位寄存器當(dāng)中我們是只能進行寫入的操作而不能進行讀出,這個的話是可以進行讀出的操作的。
其中這個CE引腳實際上就是一個使能,并不是說芯片不去使能,時鐘就不工作。那么這個CE就是用來做一個判斷的開關(guān),當(dāng)CE是高電平的時候你的IO和SCLK才能是有用的。如果CE為低電平那么這些就是無效的。
那么IO和74HC595的SRE是極其類似的,我們的數(shù)據(jù)是一個一個出去的也就是輸出,只不過我們這個還可以讀寫進去。
SCLK(串行時鐘)也和SRCLK是非常類似的,就是它時鐘芯片每次來一個上升沿(高電平),我們的這個數(shù)據(jù)就會每次向下進行一次的移位。
寄存器定義?
??注→在上述圖當(dāng)中地址是從低到高來進行排列的。注→IO數(shù)據(jù)輸入/輸出在DS1302也是從低位到高位的。
第一個寄存器存儲的就是秒。
第二個寄存器存儲的就是分。
第三個寄存器存儲的就是小時。
第四個寄存器存儲的就是日(1~31)
第五個寄存器存儲的就是月(1~12)
第六個寄存器存儲的就是年(0~99)?
WP置1(高電平)寫入的話是無效的,但是可以讀出的。寫入的話就要給低電平有效。
TCS就是涓細電流充電能力對電池進行充電。
說明→在上述的寄存器當(dāng)中都是與時鐘有關(guān)的寄存器。
地址命令字
那么在這里我們就需要完成兩個任務(wù)如下↓
⒈在哪(地址-讀秒第一個為什么不是分鐘) 里寫入(我們是寫入還是讀出) 什么 (寫入實際數(shù)據(jù)是什么,就是設(shè)計時間)
⒉在哪里(比如說我想讀秒) 讀出 什么
??重點?在寄存器定義的那幅圖當(dāng)中,秒所對應(yīng)的那一行(也就是第二行) READ所對應(yīng)的那一列(也就是第一列) 方格里邊是 81h (十六進制)轉(zhuǎn)換為二進制為1000 0001對應(yīng)上述圖當(dāng)中。
??注→第六位給高電平操作的是RAM給低電平操作的是CK(非)?在最高位上固定為"1".
如果我們需要寫入 WR 給上低電平0。
注意看寄存器那幅圖當(dāng)中是分別有WRITE和READ。分別有對應(yīng)的關(guān)系的。
時序定義?
關(guān)于地址命令字和數(shù)據(jù)如何一一對應(yīng)起來。
三大步驟(重點!)
⒈CE置"1"相當(dāng)于一個開關(guān)的作用。
⒉在這里規(guī)定了我們要先把最低為給發(fā)送過去,在這里也就是R/W(非)設(shè)置到IO口上。
⒊SCLK時鐘給上一個上升沿(高電平),那么我們的IO口最低為就會被寫入到單片機。然后就是把SCLK置回到"0"此時在到IO(地址)口第一位依次類推。
注→I/O命令字(R/W非 ~?1和數(shù)據(jù)(D0 ~?D7)是一一對應(yīng)的(注:一個是指令還有一個是數(shù)據(jù))高電平讀出。
這一部分是完成命令字的寫入操作。我們先要發(fā)命令字因為我們要告訴到底是寫還是讀。
這一部分就是實際的數(shù)據(jù)也就是IO數(shù)據(jù)輸入/輸出和上面的操作都是一樣的。記住最終再把SCLK給置0以及CE。
??重點說明→在上述我講解的是寫入數(shù)據(jù)的,實際上讀出數(shù)據(jù)前半部分也都是一樣的(只不過需要改變命令字最低位讀"1")緊跟著時鐘的下降沿然后就會開始讀出這個數(shù)據(jù)每次讀出一個數(shù)據(jù)來一個下降沿依次類推到最后一位就把SCLK和CE置0.
??注→在這些數(shù)據(jù)當(dāng)中是完全對應(yīng)在外面的寄存器上的。
拓展說明如下↓
在寫入數(shù)據(jù)是給單片機寫入進去數(shù)據(jù)的我們是看不到現(xiàn)象的,而當(dāng)我們想要看到現(xiàn)象是需要把單片機的數(shù)據(jù)給讀出來才行。
在CE(芯片開關(guān))的操作中,CE始終要保持我們的高電平,寫完之后再把它清0置低電平。然后整個寫入操作它才是有效的。
SCLK(串行時鐘)給一個固定的時鐘,然后IO(數(shù)據(jù)輸出/輸入)就給數(shù)據(jù),在時鐘的上升沿,IO口的數(shù)據(jù)將被輸入。同時還額外的規(guī)定了在時鐘的下降沿,DS1302就會把它給的數(shù)據(jù)進行輸出。
下面就是串行輸入。所有驅(qū)動都是低電平輸入/高電平輸出 交替。
BCD碼?
在DS1302的內(nèi)部寄存器地址/定義,是用BCD碼表示的也就是我們常用到單片機8421碼。
BCD碼(Binary Coded Decimal?),用4位二進制數(shù)分開分別來表示個位和十位。
例:0001 0011表示13,1000 0101表示85,0001(十位) 1010(個位)不合法(十進制的個位只有0~9,A代表的是10)
在十六進制中的體現(xiàn):0x13表示13,0x85表示85,0x1A不合法。
BCD碼轉(zhuǎn)十進制:DEC=BCD/16*10+BCD%16; (2位BCD十位和個位)
BCD/16把高四位提取出來,BCD%16把低四位提取出來。
十進制轉(zhuǎn)BCD碼:BCD=DEC/10*16+DEC%10; (2位BCD十位和個位)
為什么需要進制轉(zhuǎn)換呢?其根本原因就是在寫代碼的過程當(dāng)中進制可能不一樣,我寫的這個代碼讀出的數(shù)據(jù)是BCD碼而你這個庫函數(shù)當(dāng)中存放的Number是十進制的,此時我們應(yīng)該要把BCD碼用公式把它進行一個強轉(zhuǎn)為十進制這樣最終得到的才是一個逢十進一的一個數(shù)。如果當(dāng)你直接BCD碼存放十進制Number當(dāng)中會發(fā)生以下情況如下??
0000 1001 = 9 0001 0000 = 10(解碼以十進制進行解碼) //十進制轉(zhuǎn)換為十六進制 (1x16^1)+(0x16^0) = 16
??說明?此時如果是這樣的話當(dāng)我們的數(shù)字到9的時候再+1的話就會跳到16的數(shù)字。所以,我們需要把BCD碼轉(zhuǎn)十進制。
其實可以直接帶入進去算下BCD碼轉(zhuǎn)十進制 例如下↓拓展:÷(獲得高位) %(獲得低位)
BCD碼(8421碼0~15)十進制碼是(0~9)我們帶入式子來進行計算如下↓
DEC(十進制) = (16/16*10) + (16%16) = 10 這不就相當(dāng)于是從十六進制轉(zhuǎn)到了十進制嗎?同理。當(dāng)然這個只是一個小技巧,有更加嚴謹?shù)霓D(zhuǎn)換方式。文章來源:http://www.zghlxwxcb.cn/news/detail-720602.html
注→BCD碼在單片機中還是以16進制形式存儲。文章來源地址http://www.zghlxwxcb.cn/news/detail-720602.html
到了這里,關(guān)于『51單片機』 DS1302時鐘的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!