<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 串行實(shí)時(shí)時(shí)鐘芯片DSl302程序設計中的問(wèn)題與對策

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

作者: 時(shí)間:2006-05-07 來(lái)源:網(wǎng)絡(luò ) 收藏

  摘 要: 指出了串行實(shí)時(shí)時(shí)鐘芯片DSl302程序設計中幾個(gè)易被疏忽而導致錯誤的問(wèn)題,分析了問(wèn)題的原因,并給出了解決問(wèn)題的方法。

本文引用地址:http://dyxdggzs.com/article/226466.htm

關(guān)鍵詞: 串行時(shí)鐘 程序設計 問(wèn)題 原因 解決方法

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

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

串行實(shí)時(shí)時(shí)鐘芯片DSl302程序設計中的問(wèn)題與對策1 讀操作出現的錯誤

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

DS_READSETB P1.2 ;令=0。

CLR P1.1 ;令SCLK=0。

CLR P1.2 ;令=1,啟動(dòng)芯片。

LCALL DS_WSUB ;寫(xiě)8位地址。

LCALL DS_RSUB ;讀出8位數據。

RET

DS_WSUBMOV R7,#08H

WL00P RRC A ;A為地址字節。

MOV P1.0,C

SETB P1.1 ;在時(shí)鐘上升沿

NOP ;輸入地址字節。

CLR P1.1

DJNZ R7WL00P

RET

DS_RSUBSETB P1.0 ;為讀數據作準備。

MOV R7#08H

RL00P:SETB P1.1

NOP

CLR P1.1 ;在第9個(gè)正脈沖的下

MOV C,P1.0 ;降沿開(kāi)始輸出數據。

RRC A ;A中為讀出的數據。

DJNZ R7,RL00P

RET

若使用如下程序對DSl302的RAM1其內容為5AH進(jìn)行讀操作

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

LCAll DS_READ ;調用讀子程序。

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

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

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

串行實(shí)時(shí)時(shí)鐘芯片DSl302程序設計中的問(wèn)題與對策只要將上述的DS_RSUB子程序改為如下的子程序即可解決上述問(wèn)題:

DS_RSUBl:SETB P1.0 ;為讀數據作準備

MOV R7,#08H

RL00P: CLR P1.1 ;SCLK第8個(gè)正脈沖的

MOV C,P1.0 ;下降沿開(kāi)始輸出數據。

RAC

SETB P1.1

DJNZ R7,RL00P

RET

2 禁止涓流充電出現的錯誤

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

SETB P1.2 ;令=0

CLR P1.2 ;令SCLK=0

CLR P1.2 ;令=1

MOV A#90H ;TCR的寫(xiě)地址

LCALL DS_WSUB

MOV A#10100110B ;TCR的命令

LCALL DS_WSUB

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

MOV A,#01010110B 即TCS≠1010

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

串行實(shí)時(shí)時(shí)鐘芯片DSl302程序設計中的問(wèn)題與對策筆者誤認為芯片損壞,換上另一新購置的芯片,結果仍如此。隨即筆者取下圖1所示電路中的可充電池,換上 一標稱(chēng)為10kΩ的電阻對芯片進(jìn)行了測試,測試結果如表1所示=5V。

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

3 受干擾時(shí)鐘/日歷信息出現的錯誤

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

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

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



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>