提問者:s55353942013-08-03 00:00
現在主要是想把時鐘芯片的秒讀出來用LED顯示,沒運行之前秒的值是00H,自己弄的程序運行之后,一直是0FFH,不知道是不是時鐘芯片還沒啟動,啟動程序應該怎么寫的? 我剛開始學單片機,好多都不懂,請高手幫幫忙。(最好給個具體的讀芯片的程序。)
說明p1.2是用了非門按制RST腳,所以SETBP1.2;令=0 DS_READ?SETBP1.2;令=0。 CLRP1.1;令SCLK=0。 CLRP1.2;令=1,啟動芯片。 LCALLDS_WSUB;寫8位地址。 LCALLDS_RSUB;讀出8位數據。 RET DS_WSUB?MOVR7,#08H WL00P?RRCA;A為地址字節。 MOVP1.0,C SETBP1.1;在時鐘上升沿 NOP;輸入地址字節。 CLRP1.1 DJNZR7?WL00P RET DS_RSUB?SETBP1.0;為讀數據作準備。 MOVR7?#08H RL00P:SETBP1.1 NOP CLRP1.1;在第9個正脈沖的下 MOVC,P1.0;降沿開始輸出數據。 RRCA;A中為讀出的數據。 DJNZR7,RL00P RET 若使用如下程序對DSl302的RAM1?其內容為5AH?進行讀操作 READ:MOVA?#11000101B;RAM1單元的讀地址。 LCAllDS_READ;調用讀子程序。 則程序執行后A中的數據為2DH,顯然讀出的數據不正確。若再使用一條RLA指令調整后,則A中為5AH,結果才正確。由此說明:使用上述程序讀出的RAM1單元中的第0位數據實為第1位數據,讀出的第7位數據實為第0位數據。 經筆者仔細研究時序圖和多次試驗得知,問題的原因在于:對于讀操作時序,在SCLK出現第8個正脈沖時,上升沿輸入地址字節的最后一位數據,而在此正脈沖的下降沿就要輸出數據字節的第0位數據。然而筆者的程序中是在第9個正脈沖的下降沿才誤認為輸出了數據字節的第0位數據,此位數據事實上是第二個下降沿輸出的,故實為數據字節的第1位數據。經筆者實驗:只要RST保持為高電平,如果超過8個下降沿,它們將重新從第0位輸出數據位,因程序中輸出的最后一位數據位,是9個下降沿輸出的數據位,故實為數據字節的第0位數據位。 由此可見,單字節讀操作的時序圖如改為圖2所示時序圖,則讀者較容易理解可避免發生上述編程錯誤。 只要將上述的DS_RSUB子程序改為如下的子程序即可解決上述問題: DS_RSUBl:SETBP1.0;為讀數據作準備 MOVR7,#08H RL00P:CLRP1.1;SCLK第8個正脈沖的 MOVC,P1.0;下降沿開始輸出數據。 RAC SETBP1.1 DJNZR7,RL00P RET
回答者:nightcici2016-08-03 00:00
僅供參考,不懂再問我,哈哈……
--------------------------------------------------------------
#include 提問者:y2787121422013-04-28
摘 要:介紹美國DALLAS公司推出的具有涓細電流充電能力的低功耗實時時鐘電路DS1302的結構、工作原理及其在實時顯示時間中的應用。它可以對年、月、日、周日、時、分、秒進行計時,且具有閏年補償等多種功能。給出DS130
提問者:pengjiamnq2016-03-24
#include
提問者:baobao4221252013-09-04
/******************************************************************************* 文件:DS1302.C 環境:編譯為ICC A
提問者:zncwtb2013-10-13
/*************** writer:shopping.w ******************/
#include 提問者:guiymbo54282014-10-10
1、存儲和讀取的時間的內容應為BCD碼。write_1302(0x8c,0x11);maioh=(miao&0x7f)>>4;…… 2、建議上電后,ce=0;clk=0;延時一會兒再操作1302。或者多寫兩次撤銷寫保護
提問者:hikqbwgjp2013-09-06