1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      串行實時時鐘芯片DS1302程序設(shè)計中的問題與對策

      更新時間: 2006-03-16 14:42:07來源: 粵嵌教育瀏覽量:3395

        美國Dallas公司推出的串行接口實時時鐘芯片DSl302可對時鐘芯片備份電池進行涓流充電。由于該芯片具有體積小、功耗低、接口容易、占用CPUI/O口線少等主要特點,故該芯片可作為實時時鐘廣泛應(yīng)用于智能化儀器儀表中。

        筆者在調(diào)試中發(fā)現(xiàn)在對DSl302編程中有幾個問題易被疏忽而導致錯誤,現(xiàn)提供給讀者參考。

        1讀操作出現(xiàn)的錯誤


        按照參考文獻[2]的讀操作程序框圖和參考文獻[1]、[2]所敘述的可知:單字節(jié)讀操作每次需16個時鐘,地址字節(jié)在前8個時鐘周期的上升沿輸入,而數(shù)據(jù)字節(jié)在后8個時鐘周期的下降沿輸出。據(jù)此結(jié)合圖1的硬件連接圖編制出了如下的單字節(jié)讀程序:

      DS_READSETBP1.2;令=0。

      CLRP1.1;令SCLK=0。

      CLRP1.2;令=1,啟動芯片。

      LCALLDS_WSUB;寫8位地址。

      LCALLDS_RSUB;讀出8位數(shù)據(jù)。

      RET

      DS_WSUBMOVR7,#08H

      WL00PRRCA;A為地址字節(jié)。

      MOVP1.0,C

      SETBP1.1;在時鐘上升沿

      NOP;輸入地址字節(jié)。

      CLRP1.1

      DJNZR7WL00P

      RET

      DS_RSUBSETBP1.0;為讀數(shù)據(jù)作準備。

      MOVR7#08H

      RL00P:SETBP1.1

      NOP

      CLRP1.1;在第9個正脈沖的下

      MOVC,P1.0;降沿開始輸出數(shù)據(jù)。

      RRCA;A中為讀出的數(shù)據(jù)。

      DJNZR7,RL00P

      RET

        若使用如下程序?qū)Sl302的RAM1其內(nèi)容為5AH進行讀操作

      READ:MOVA#11000101B;RAM1單元的讀地址。

      LCAllDS_READ;調(diào)用讀子程序。

        則程序執(zhí)行后A中的數(shù)據(jù)為2DH,顯然讀出的數(shù)據(jù)不正確。若再使用一條RLA指令調(diào)整后,則A中為5AH,結(jié)果才正確。由此說明:使用上述程序讀出的RAM1單元中的第0位數(shù)據(jù)實為第1位數(shù)據(jù),讀出的第7位數(shù)據(jù)實為第0位數(shù)據(jù)。

        經(jīng)筆者仔細研究時序圖和多次試驗得知,問題的原因在于:對于讀操作時序,在SCLK出現(xiàn)第8個正脈沖時,上升沿輸入地址字節(jié)的一位數(shù)據(jù),而在此正脈沖的下降沿就要輸出數(shù)據(jù)字節(jié)的第0位數(shù)據(jù)。然而筆者的程序中是在第9個正脈沖的下降沿才誤認為輸出了數(shù)據(jù)字節(jié)的第0位數(shù)據(jù),此位數(shù)據(jù)事實上是第二個下降沿輸出的,故實為數(shù)據(jù)字節(jié)的第1位數(shù)據(jù)。經(jīng)筆者實驗:只要RST保持為高電平,如果超過8個下降沿,它們將重新從第0位輸出數(shù)據(jù)位,因程序中輸出的一位數(shù)據(jù)位,是9個下降沿輸出的數(shù)據(jù)位,故實為數(shù)據(jù)字節(jié)的第0位數(shù)據(jù)位。

        由此可見,單字節(jié)讀操作的時序圖如改為圖2所示時序圖,則讀者較容易理解可避免發(fā)生上述編程錯誤。


        只要將上述的DS_RSUB子程序改為如下的子程序即可解決上述問題:

      DS_RSUBl:SETBP1.0;為讀數(shù)據(jù)作準備

      MOVR7,#08H

      RL00P:CLRP1.1;SCLK第8個正脈沖的

      MOVC,P1.0;下降沿開始輸出數(shù)據(jù)。

      RAC

      SETBP1.1

      DJNZR7,RL00P

      RET

        2禁止涓流充電出現(xiàn)的錯誤

        涓流充電寄存器(TCR)控制著DSl302的涓流充電特性。據(jù)參考文獻[1]、[2]介紹,寄存器的位(TCS)4~7決定著是否具備充電性能。僅在1010編碼的條件下才具備充電性能,其它編碼組合不允許充電。位2和3(DS)則在和之間選擇是一個還是兩個二極管串入其中。如果編碼是01,選擇一個二極管;如果編碼是10,選擇兩個;其它編碼將禁止充電。該寄存器的0和1位(RS)用于選擇與二極管相串聯(lián)的電阻值,其中編碼01為2kΩ;10為4kΩ;11為8kΩ;而00將不允許充電。筆者編制了如下的允許涓流充電的控制程序(選擇一個二極管,充電限流電阻為4kΩ):

      SETBP1.2;令=0

      CLRP1.2;令SCLK=0

      CLRP1.2;令=1

      MOVA#90H;TCR的寫地址

      LCALLDS_WSUB

      MOVA#10100110B;TCR的命令

      LCALLDS_WSUB

        用萬用表串入與可充電池之間,執(zhí)行程序后,則有電流流過萬用表,表示充電正常。筆者通過將上述程序的第6句改為:MOVA,#10100010B,即置DS為00來禁止涓流充電器工作。執(zhí)行程序后,在與電池之間串入萬用表,則仍有電流流過,表示尚未禁止充電。若將第6語句改為:MOV A,#10101110B,即置DS為11,執(zhí)行上述程序后情況仍如此。若將第6語句改為:

        MOV A,#01010110B即TCS≠1010

        或:MOV A,#10100100B即RS=00則充電被禁止。

        筆者誤認為芯片損壞,換上另一新購置的芯片,結(jié)果仍如此。隨即筆者取下圖1所示電路中的可充電池,換上一標稱為10kΩ的電阻對芯片進行了測試,測試結(jié)果如表1所示=5V。

        由此可見,當涓流充電控制寄存器中的DS位為00和11時并不能禁止充電,而是選擇了一個二極管充電,這說明參考文獻中介紹的有誤。若要想禁止充電器充電,應(yīng)將第6句改為:MOVA,#0101XX00B即TCS≠1010,RS=00,這樣,就能雙保險地禁止充電。


        3受干擾時鐘/日歷信息出現(xiàn)的錯誤

        筆者將DSl302應(yīng)用于某產(chǎn)品中,發(fā)現(xiàn)系統(tǒng)受到干擾時,有時其時鐘停振不能正常工作,此時的時鐘/日歷信息也被修改。

        經(jīng)分析得知:系統(tǒng)受到干擾程序飛跑,在看門狗復位前,CPU正好執(zhí)行寫程序?qū)懕Wo寄存器的位置0為允許寫(實際上,在系統(tǒng)校時程序之后已將其置為1禁止寫),修改了時鐘/日歷信息且使秒寄存器的位置1,致使時鐘停振出現(xiàn)錯誤。

        為避免此類錯誤的產(chǎn)生,筆者采用的方法是:在寫程序中增加了某一檢測條件,此條件為系統(tǒng)中某一口線上的電平,低電平條件滿足。只有在實時校時過程中,才通過手動使此口線為低電平,實時校時過程完成后,又通過手動使此口線為高電平。這樣只有實時校時過程中,才允許修改時鐘/日歷信息,因此起到了時鐘/日歷信息的寫保護作用

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲另类欧美综合久久 | 日本中文字幕乱码精品 | 亚洲人成人成在线放 | 中文有码国产精品欧美激情 | 日本欧美一区二区三区高清 | 日韩呦呦一区二区精品视频 |