基于單片機(jī)的日歷時(shí)鐘模塊設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在實(shí)時(shí)監(jiān)控系統(tǒng)的設(shè)計(jì)中,要實(shí)時(shí)監(jiān)測(cè)各個(gè)控制信號(hào),更重要的是在發(fā)生故障時(shí)能準(zhǔn)確記錄故障數(shù)據(jù),以便準(zhǔn)確分析排除錯(cuò)誤。監(jiān)控系統(tǒng)中一般都要定時(shí)采集現(xiàn)場(chǎng)數(shù)據(jù),對(duì)某些重要的信息不僅要記錄其內(nèi)容,還要記錄下該信息發(fā)生的準(zhǔn)確時(shí)間,所記錄的實(shí)時(shí)時(shí)間信息應(yīng)長(zhǎng)期保存,因此需要實(shí)時(shí)時(shí)鐘來(lái)實(shí)現(xiàn)。常用的單片機(jī)沒(méi)有實(shí)時(shí)時(shí)鐘,若需采用定時(shí)器實(shí)現(xiàn),一旦系統(tǒng)掉電,時(shí)鐘就不能運(yùn)行,這是實(shí)時(shí)監(jiān)控系統(tǒng)
不允許的,而采用獨(dú)立運(yùn)行的實(shí)時(shí)時(shí)鐘便可實(shí)現(xiàn)。但一般的時(shí)鐘芯片在系統(tǒng)掉電時(shí),其數(shù)據(jù)也會(huì)丟失,需提供備用電池。而時(shí)鐘芯片DS12887在系統(tǒng)掉電時(shí)數(shù)據(jù)不丟失,廣泛應(yīng)用于測(cè)量和控制系統(tǒng)。因此,這里給出了實(shí)時(shí)時(shí)鐘DS12887在單片機(jī)應(yīng)用系統(tǒng)中的應(yīng)用。
1 主要器件造型
1.1 DS12887的功能介紹
DS12887是DALLAS公司推出的8位并行并自帶RAM的實(shí)時(shí)日歷時(shí)鐘芯片,內(nèi)部有14個(gè)時(shí)鐘控制寄存器,包括10個(gè)時(shí)標(biāo)寄存器,4個(gè)狀態(tài)寄存器和114 bit作掉電保護(hù)用的低功耗RAM。CPU通過(guò)讀DS12887的內(nèi)部時(shí)標(biāo)寄存器得到當(dāng)前的時(shí)間和日歷,也可通過(guò)選擇二進(jìn)制或BCD碼初始化芯
片的10個(gè)時(shí)標(biāo)寄存器,其4個(gè)狀態(tài)寄存器用來(lái)控制和指出DS12887的當(dāng)前工作狀態(tài),114 bit非易失性靜態(tài)RAM可在掉電時(shí)保存一些重要數(shù)據(jù)。 DS12887功能強(qiáng)大,應(yīng)用廣泛。其引腳功能如下:
GND,VCC:直流電源+5 V電壓。當(dāng)5 V電壓在正常范圍內(nèi)時(shí),數(shù)據(jù)可讀寫(xiě);當(dāng)VCC低于4.25 V,讀寫(xiě)禁止,計(jì)時(shí)功能仍繼續(xù);當(dāng)VCC下降到3 V以下時(shí),RAM和計(jì)時(shí)器被切換到內(nèi)部鋰電池。
MOT(模式選擇):MOT引腳接到VCC時(shí),選擇MOTOROLA時(shí)序,當(dāng)接到GFND時(shí),選擇INTEL時(shí)序。
SQW(方波信號(hào)):SQW引腳能從實(shí)時(shí)時(shí)鐘內(nèi)部15級(jí)分頻器的13個(gè)抽頭中選擇一個(gè)作為輸出信號(hào),其輸出頻率可通過(guò)對(duì)寄存器A編程改變。
AD0~AD7(雙向地址/數(shù)據(jù)復(fù)用線(xiàn)):總線(xiàn)接口,可與MOTOROLA微機(jī)系列和INTEL微機(jī)系列接口。
AS(地址選通輸入):用于實(shí)現(xiàn)信號(hào)分離,在AD/ALE的下降沿把地址鎖入DS12887。
DS(數(shù)據(jù)選通或讀輸入):DS/RD有2種操作模式,取決于MOT引腳的電平,當(dāng)使用MOTOROLA時(shí)序時(shí),DS是一正脈沖,出現(xiàn)在總線(xiàn)周期的后段,稱(chēng)為數(shù)據(jù)選通;在讀周期,DS指示DS12887驅(qū)動(dòng)雙向總的時(shí)刻;在寫(xiě)周期,DS的后沿使DS12887鎖存寫(xiě)數(shù)據(jù)。選擇INTEL時(shí)序時(shí),DS稱(chēng)作(RD),RD與典型存儲(chǔ)器的允許信號(hào)(OE)的定義相同。
(讀/寫(xiě)輸入):也有兩種操作模式。選MOTOROLA時(shí) 序時(shí),是一電平信號(hào),指示當(dāng)前周期是讀或?qū)懼芷?,DSO為高電平時(shí),高電平指示讀周期,低電平指示寫(xiě)周期;選INTEL時(shí)序,信號(hào)是一低電平信號(hào),稱(chēng)為WR。在此模式下,R/W與通用RAM的寫(xiě)允許信號(hào)(WE)的含義相同。
(片選輸入):在訪問(wèn)DS12887的總線(xiàn)周期內(nèi),片選信號(hào)必須保持為低。
(中斷申請(qǐng)輸入):低電平有效,可作微處理的中斷輸入。沒(méi)有中斷條件滿(mǎn)足時(shí),IRQ處于高阻態(tài)。IRQ線(xiàn)是漏極開(kāi)路輸入,要求外接上接電阻。
(復(fù)位輸出):當(dāng)保持低電平時(shí)間大于200 ms,保證DS12887有效復(fù)位。
DS12887引腳如圖1所示。
DS12887的內(nèi)部地址分配:地址00H和03H單元取值范圍是00H~3BH(十進(jìn)制為0~59);04H~05H單元按12小時(shí)制取值范圍是上午(AM)01H~0CH(十進(jìn)制為1~12),下午(PM)51H~5CH(十進(jìn)制為81~92),按24小時(shí)制取值范圍是00H~17H(十進(jìn)制為0~23);06H單元的取值范圍是01H~07H(十進(jìn)制為1~7);07H單元取值范圍O1H~1FH(十進(jìn)制為1~31);08H單元取值范圍是01H~0CH(十進(jìn)制為1~12);09H單元取值范圍是00H~63H(十進(jìn)制為0~99)。
1.2 單片機(jī)A789C52簡(jiǎn)介
AT89C52是一個(gè)低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含8 kB的可反復(fù)擦寫(xiě)的Flash只讀程序存儲(chǔ)器和256字節(jié)的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(R-AM)。該器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲(chǔ)單元。A-T89C52有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,內(nèi)含2個(gè)外中斷口,3個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,其將通用的微處理器和Flash存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫(xiě)的Flash存儲(chǔ)器可有效降低開(kāi)發(fā)成本。廣泛應(yīng)用于智能儀器、儀表和低功耗電子產(chǎn)品。
2 系統(tǒng)硬件設(shè)計(jì)
2.1 DS12887的工作原理
DS12887采用8位地址/數(shù)據(jù)復(fù)用的總線(xiàn)方式,具有一個(gè)鎖存引腳,通過(guò)讀、寫(xiě)、鎖存信號(hào)實(shí)現(xiàn)其內(nèi)部數(shù)據(jù)的輸入輸出,控制內(nèi)部的控制寄存器、讀取內(nèi)部的時(shí)間信息寄存器。DS12887的各種寄存器在其內(nèi)部空間都有相應(yīng)的固定地址,因此,單片機(jī)通過(guò)正確的尋址和寄存器操作就可以獲取需要的時(shí)間信息。DS12887有2種工作時(shí)序,即Motorola和Intel時(shí)序,由Mot引腳的電平指定。當(dāng)MOT引腳為高電平時(shí)選擇Motorola時(shí)序;為低電平時(shí)選擇Intel時(shí)序。除此之外DS12887內(nèi)部還有128字節(jié)的RAM的單元,其中前10個(gè)字節(jié)用于存放日歷時(shí)鐘信息,字節(jié)0為秒,字節(jié)2為分,字節(jié)4為時(shí),字節(jié)6為星期,字節(jié)7為日,字節(jié)8為月,字節(jié)9為年,字節(jié)0AH~0DH用作控制和狀態(tài)寄存器,剩下的114字節(jié)為用戶(hù)RA-M,所有的這128字節(jié)都是掉電非易失性的。
2.2 DS12887與單片機(jī)的接口設(shè)計(jì)
單片機(jī)的P0口用作地址/數(shù)據(jù)復(fù)用總線(xiàn)與實(shí)時(shí)時(shí)鐘DS12887的AD0~AD7引腳相連。單片機(jī)的ALE引腳和DS12887的鎖存輸入引腳直接相連,用作地址鎖存,實(shí)現(xiàn)數(shù)據(jù)和地址線(xiàn)的分時(shí)復(fù)用。DS12887的MOT引腳接地,用以選擇Intel總線(xiàn)時(shí)序模式,在Intel總線(xiàn)時(shí)序模式時(shí),和51單片機(jī)的接口完全兼容,可以將其讀輸入DS、寫(xiě)輸入與單片機(jī)的相應(yīng)引腳直接連接。DS12887的RESET引腳對(duì)日歷時(shí)鐘和RAM沒(méi)有影響,但影響DS12887的命令和狀態(tài)寄存器的內(nèi)容。在電路中直接將RESET連至Vcc,這樣可以保證DS12887在進(jìn)入或退出電源失效狀態(tài)時(shí),其工作狀態(tài)不受RESET引腳的影響。DS12887的可編程輸出方波引腳SQW輸出頻率為2~256 Hz的方波,該系統(tǒng)則利用SQW引腳輸出周期為125 ms的方波作為單片機(jī)外部中斷/INT0的中斷源,實(shí)現(xiàn)周期性中斷。當(dāng)中斷發(fā)生時(shí),單片機(jī)讀一次輸入口,檢查電表是否轉(zhuǎn)過(guò)一圈,整點(diǎn)時(shí)還要采一次三相電流和電壓。
DS12887與單片機(jī)的硬件接口電路如圖2所示。
3 系統(tǒng)軟件設(shè)計(jì)
3.1 主程序
主程序主要包括:系統(tǒng)初始化、獲取串口數(shù)據(jù)、設(shè)置日歷時(shí)鐘芯片、獲取時(shí)鐘芯片的時(shí)間信息和時(shí)鐘校正、顯示等子程序。初始化子程序主要包括設(shè)置單片機(jī)的串口和定時(shí)器的初始化,日歷時(shí)鐘芯片初始參數(shù)和驅(qū)動(dòng)芯片的初始化等。主程序流程圖如圖3所示。
3.2 設(shè)置日歷時(shí)鐘子程序
在使用DS12887時(shí),首先要初始化,主要是打開(kāi)晶振、對(duì)控制寄存器A、B寫(xiě)入控制字以及對(duì)日歷、時(shí)鐘各寄存器寫(xiě)入初始值。除校時(shí)外,上電時(shí)不用再次初始化。第一次初始化時(shí),應(yīng)禁止操作DS12887內(nèi)部更新周期,即先將寄存器B的SET位置“1”,然后初始化時(shí)標(biāo)寄存器(00H~09H)和狀態(tài)寄存器A,再通過(guò)讀寄存器C清除中斷標(biāo)志,讀寄存器D將VRT位置“1”,最后將寄存器B的SET位清零,DS12887開(kāi)始計(jì)時(shí)。
設(shè)置日歷時(shí)鐘,必須保證時(shí)鐘芯片DS12887處于設(shè)置狀態(tài),即SET=1,然后向DS12887的專(zhuān)用寄存器寫(xiě)入時(shí)間信息,寫(xiě)入完畢后,DS12887恢復(fù)正常數(shù)據(jù)更新?tīng)顟B(tài),即SET=0。在讀取日歷時(shí)鐘芯片DS12887的時(shí)鐘信息時(shí),必須保證UIP=0,然后讀取存儲(chǔ)其內(nèi)部寄存器的時(shí)鐘信息。
為了能夠方便地顯示時(shí)間和校正時(shí)鐘,可在單片機(jī)中的用戶(hù)寄存器中開(kāi)辟特殊的時(shí)間地址單元作為顯示緩沖區(qū),分別放置“年,月,日,時(shí),分,秒”等值。此時(shí)只要將DS12887中的時(shí)間值讀入到用戶(hù)開(kāi)辟的時(shí)間地址中,用戶(hù)就可以方便控制時(shí)間。
DS12887的日歷時(shí)鐘通過(guò)中斷和查詢(xún)2種方法讀出。但在讀數(shù)據(jù)時(shí),首先要判斷數(shù)據(jù)是否更新結(jié)束,只有在數(shù)據(jù)更新結(jié)束時(shí)數(shù)據(jù)讀出才有效。DS12887的時(shí)間讀取和時(shí)鐘校正子程序流程圖如圖4所示。
4 結(jié)束語(yǔ)
以日歷時(shí)鐘芯片DS12887為例,介紹了一種該器件與單片機(jī)AT89C52的簡(jiǎn)單實(shí)用的硬件接口電路,該電路設(shè)計(jì)簡(jiǎn)單可靠,性能穩(wěn)定,適用于那些對(duì)計(jì)時(shí)精度要求較高的系統(tǒng),例如在列車(chē)制動(dòng)電子控制單元中,應(yīng)用DS12887提供準(zhǔn)確的時(shí)間來(lái)保存數(shù)據(jù),并安裝在制動(dòng)控制裝置內(nèi),對(duì)列車(chē)制動(dòng)和防滑控制。記錄、捕捉故障出現(xiàn)時(shí)間及了解故障發(fā)生時(shí)間前后信號(hào)變化的情況,并通過(guò)列車(chē)總線(xiàn)將故障信息傳送給監(jiān)控裝置,以便列車(chē)司機(jī)及時(shí)地采取相應(yīng)措施,這些對(duì)保障列車(chē)安全可靠運(yùn)行有著重要意義。