汪川,樊澤明
(西北工業大學自動化學院,陜西西安710129)
在實時監控系統的設計中,要實時監測各個控制信號,更重要的是在發生故障時能準確記錄故障數據,以便準確分析排除錯誤。監控系統中一般都要定時采集現場數據,對某些重要的信息不僅要記錄其內容,還要記錄下該信息發生的準確時間,所記錄的實時時間信息應長期保存,因此需要實時時鐘來實現。常用的單片機沒有實時時鐘,若需采用定時器實現,一旦系統掉電,時鐘就不能運行,這是實時監控系統不允許的,而采用獨立運行的實時時鐘便可實現。但一般的時鐘芯片在系統掉電時,其數據也會丟失,需提供備用電池。而時鐘芯片DS12887在系統掉電時數據不丟失,廣泛應用于測量和控制系統。因此,這里給出了實時時鐘DS12887在單片機應用系統中的應用。
DS12887是DALLAS公司推出的8位并行并自帶RAM的實時日歷時鐘芯片,內部有14個時鐘控制寄存器,包括10個時標寄存器,4個狀態寄存器和114 bit作掉電保護用的低功耗RAM。CPU通過讀DS12887的內部時標寄存器得到當前的時間和日歷,也可通過選擇二進制或BCD碼初始化芯片的10個時標寄存器,其4個狀態寄存器用來控制和指出DS12887的當前工作狀態,114 bit非易失性靜態RAM可在掉電時保存一些重要數據。DS12887功能強大,應用廣泛。其引腳功能如下[1-2]:
GND,VCC:直流電源+5 V電壓。當5 V電壓在正常范圍內時,數據可讀寫;當VCC低于4.25 V,讀寫禁止,計時功能仍繼續;當VCC下降到3 V以下時,RAM和計時器被切換到內部鋰電池。
MOT(模式選擇):MOT引腳接到VCC時,選擇MOTOROLA時序,當接到GFND時,選擇INTEL時序。
SQW(方波信號):SQW引腳能從實時時鐘內部15級分頻器的13個抽頭中選擇一個作為輸出信號,其輸出頻率可通過對寄存器A編程改變。
AD0~AD7(雙向地址/數據復用線):總線接口,可與MOTOROLA微機系列和INTEL微機系列接口。
AS(地址選通輸入):用于實現信號分離,在AD/ALE的下降沿把地址鎖入DS12887。
DS(數據選通或讀輸入):DS/RD有2種操作模式,取決于MOT引腳的電平,當使用MOTOROLA時序時,DS是一正脈沖,出現在總線周期的后段,稱為數據選通;在讀周期,DS指示DS12887驅動雙向總的時刻;在寫周期,DS的后沿使DS12887鎖存寫數據。選擇INTEL時序時,DS稱作(RD),RD與典型存儲器的允許信號(OE)的定義相同。
R/Wˉ(讀/寫輸入):也有兩種操作模式。選MOTOROLA時序時,R/ˉW是一電平信號,指示當前周期是讀或寫周期,DSO為高電平時,R/ˉW高電平指示讀周期,R/Wˉ低電平指示寫周期;選INTEL時序,R/Wˉ信號是一低電平信號,稱為WR。在此模式下,R/W與通用RAM的寫允許信號(WE)的含義相同。
CS(片選輸入):在訪問DS12887的總線周期內,片選信號必須保持為低。
IRQ(中斷申請輸入):低電平有效,可作微處理的中斷輸入。沒有中斷條件滿足時,IRQ處于高阻態。IRQ線是漏極開路輸入,要求外接上接電阻。
RESET(復位輸出):當保持低電平時間大于200 ms,保證DS12887有效復位。
DS12887引腳如圖1所示。
DS12887的內部地址分配[3]:地址00H和03H單元取值范圍是00H~3BH(十進制為0~59);04H~05H單元按12小時制取值范圍是上午(AM)0lH~0CH(十進制為l~12),下午(PM)51H~5CH(十進制為81~92),按24小時制取值范圍是00H~17H(十進制為0~23);06H單元的取值范圍是01H~07H(十進制為l~7);07H單元取值范圍01H~1FH(十進制為l~31);08H單元取值范圍是0lH~0CH(十進制為l~12);09H單元取值范圍是00H~63H(十進制為0~99)。

圖1 DS12887引腳圖Fig.1 Pins of DS12887
AT89C52是一個低功耗,高性能CMOS 8位單片機,片內含8 kB的可反復擦寫的Flash只讀程序存儲器和256字節的隨機存取數據存儲器(RAM)。該器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統,片內置通用8位中央處理器和Flash存儲單元。AT89C52有40個引腳,32個外部雙向輸入/輸出(I/O)端口,內含2個外中斷口,3個16位可編程定時計數器,2個全雙工串行通信口,其將通用的微處理器和Flash存儲器結合在一起,特別是可反復擦寫的Flash存儲器可有效降低開發成本。廣泛應用于智能儀器、儀表和低功耗電子產品[4]。
DS12887采用8位地址/數據復用的總線方式,具有一個鎖存引腳,通過讀、寫、鎖存信號實現其內部數據的輸入輸出,控制內部的控制寄存器、讀取內部的時間信息寄存器。DS12887的各種寄存器在其內部空間都有相應的固定地址,因此,單片機通過正確的尋址和寄存器操作就可以獲取需要的時間信息。DS12887有2種工作時序,即Motorola和Intel時序,由Mot引腳的電平指定。當MOT引腳為高電平時選擇Motorola時序;為低電平時選擇Intel時序。除此之外DS12887內部還有128字節的RAM的單元,其中前10個字節用于存放日歷時鐘信息,字節0為秒,字節2為分,字節4為時,字節6為星期,字節7為日,字節8為月,字節9為年,字節0AH~0DH用作控制和狀態寄存器,剩下的114字節為用戶RAM,所有的這128字節都是掉電非易失性的。
單片機的P0口用作地址/數據復用總線與實時時鐘DS12887的AD0~AD7引腳相連。單片機的ALE引腳和DS12887的鎖存輸入引腳直接相連,用作地址鎖存,實現數據和地址線的分時復用。DS12887的MOT引腳接地,用以選擇Intel總線時序模式,在Intel總線時序模式時,和51單片機的接口完全兼容,可以將其讀輸入DS、寫輸入R/Wˉ與單片機的相應引腳直接連接。DS12887的RESET引腳對日歷時鐘和RAM沒有影響,但影響DS12887的命令和狀態寄存器的內容。在電路中直接將RESET連至Vcc,這樣可以保證DS12887在進入或退出電源失效狀態時,其工作狀態不受RESET引腳的影響[5]。DS12887的可編程輸出方波引腳SQW輸出頻率為2~256 Hz的方波,該系統則利用SQW引腳輸出周期為125 ms的方波作為單片機外部中斷/INT0的中斷源,實現周期性中斷。當中斷發生時,單片機讀一次輸入口,檢查電表是否轉過一圈,整點時還要采一次三相電流和電壓。
DS12887與單片機的硬件接口電路如圖2所示。

圖2 DS12887與單片機的硬件接口圖Fig.2 Hardware circuit of DS12887 and MCU
主程序主要包括:系統初始化、獲取串口數據、設置日歷時鐘芯片、獲取時鐘芯片的時間信息和時鐘校正、顯示等子程序。初始化子程序主要包括設置單片機的串口和定時器的初始化,日歷時鐘芯片初始參數和驅動芯片的初始化等。主程序流程圖如圖3所示。

圖3 主程序流程圖Fig.3 Flow chart of main program
在使用DS12887時,首先要初始化,主要是打開晶振、對控制寄存器A、B寫入控制字以及對日歷、時鐘各寄存器寫入初始值。除校時外,上電時不用再次初始化。第一次初始化時,應禁止操作DS12887內部更新周期,即先將寄存器B的SET位置“l”,然后初始化時標寄存器(00H~09H)和狀態寄存器A,再通過讀寄存器C清除中斷標志,讀寄存器D將VRT位置“1”,最后將寄存器B的SET位清零,DS12887開始計時。
設置日歷時鐘,必須保證時鐘芯片DS12887處于設置狀態,即SET=1,然后向DS12887的專用寄存器寫入時間信息,寫入完畢后,DS12887恢復正常數據更新狀態,即SET=0。在讀取日歷時鐘芯片DS12887的時鐘信息時,必須保證UIP=0,然后讀取存儲其內部寄存器的時鐘信息。
為了能夠方便地顯示時間和校正時鐘[6],可在單片機中的用戶寄存器中開辟特殊的時間地址單元作為顯示緩沖區,分別放置“年,月,日,時,分,秒”等值。此時只要將DS12887中的時間值讀入到用戶開辟的時間地址中,用戶就可以方便控制時間。
DS12887的日歷時鐘通過中斷和查詢2種方法讀出。但在讀數據時,首先要判斷數據是否更新結束,只有在數據更新結束時數據讀出才有效。DS12887的時間讀取和時鐘校正子程序流程圖如圖4所示。

圖4 DS12887的時間讀取和校正子程序流程圖Fig.4 Flow chart of time reading and arrection subroutine of DS12887
以日歷時鐘芯片DS12887為例,介紹了一種該器件與單片機AT89C52的簡單實用的硬件接口電路[7-8],該電路設計簡單可靠,性能穩定,適用于那些對計時精度要求較高的系統,例如在列車制動電子控制單元中,應用DS12887提供準確的時間來保存數據,并安裝在制動控制裝置內,對列車制動和防滑控制。記錄、捕捉故障出現時間及了解故障發生時間前后信號變化的情況,并通過列車總線將故障信息傳送給監控裝置,以便列車司機及時地采取相應措施,這些對保障列車安全可靠運行有著重要意義。
[1]彭冬明,韋友春.單片機實驗教程[M].北京:北京理工大學出版社,2007.
[2]雷思孝.單片機原理及實用技術[M].西安:西安電子科技大學出版社,2005.
[3]田富洋,李晉陽,李法德,等.DS12C887在單片機系統中的應用[J].電測與儀表,2005,42(3):61-63.
TIAN Fu-yang,LI Jin-yang,LI Fa-de,et al.The application of DS12C887 in SCM[J].Electrical Measurement and Instrumentation,2005,42(3):61-63.
[4]戴佳,苗龍.51單片機應用系統開發典型實例[M].北京:中國電力出版社,2005.
[5]張康,郭育華,湯堅,等.基于DS12887的功率補償控制器設計[J].電子設計工程,2007(11):58-61.
ZHANG Kang,GUO Yu-hua,TANG Jian,et al.Design of power factor compensation controller based on DS12887[J].Electronic Design Engineering,2007(11):58-61.
[6]李根岱.可校準實時時鐘芯片的研究和設計[D].武漢:華中科技大學,2007.
[7]姜書政,王桂海.基于AT89S52單片機的電機控制系統設計[J].現代電子技術,2010,33(7):138-140.
JIANG Shu-zheng,WANG Gui-hai.Design of electric motor control system based on AT89S52 single chip computer[J].Modern Electronics Technique,2010,33(7):138-140.
[8]余鳳翎,詹彤,蔡智圣.基于AT89C52網絡監控系統的設計與實現[J].現代電子技術,2009,32(1):135-138.
YU Feng-ling,ZHAN Tong,CAI Zhi-sheng.Design and implementation network monitoring system based on AT89C52[J].Modern Electronics Technique,2009,32(1):135-138.