|
代碼功能:持續(xù)從DS1302讀出“秒”數(shù)據(jù)并在數(shù)碼管上面顯示出來(lái),單片機(jī)是89c52。
現(xiàn)象:數(shù)碼管亂碼,(看起來(lái)能正常讀出,但是數(shù)碼管不該亮的段也亮了)
數(shù)碼管相關(guān)函數(shù)單獨(dú)測(cè)試,顯示沒(méi)問(wèn)題?戳讼聞e人的程序,讀取完后會(huì)特意將數(shù)據(jù)線(xiàn)(ds1302 6腳)拉低,我這么改后,數(shù)碼管顯示就正常讀秒了。數(shù)據(jù)手冊(cè)上并沒(méi)有看到讀完后需要將數(shù)據(jù)線(xiàn)置0的操作。平時(shí)寫(xiě)這種時(shí)序都是照著數(shù)據(jù)手冊(cè)來(lái)的,出了這種問(wèn)題很難查出原因來(lái),這次還好有別人的程序作參考。 另外我嘗試給數(shù)據(jù)線(xiàn)加上拉電阻,電阻的一端接上DS1302 6腳,另一端什么還什么都沒(méi)接時(shí),顯示就正常了,這是什么原理?嘗試拿一根導(dǎo)線(xiàn)一端碰ds1302 6腳,另一端懸空,也正常顯示了 。
問(wèn)題1:造成亂碼的原因,是否是代碼寫(xiě)的有哪不對(duì)?為什么讀取完后將數(shù)據(jù)線(xiàn)(ds1302 6腳連到P3.4口上)拉低能解決亂碼
問(wèn)題2:僅僅是拿導(dǎo)體觸碰一下DS1302 6腳,也能解決亂碼,是啥原理?
問(wèn)題3:別人設(shè)計(jì)的電路ds1302 5,6,7腳會(huì)加上拉電阻,也用的89C52的P3口,P3口內(nèi)部自帶上拉,外加上拉的意義?通訊的數(shù)據(jù)線(xiàn)上加上拉電阻有啥作用?
還請(qǐng)各位不吝賜教。
1.PNG (28.98 KB, 下載次數(shù): 26)
下載附件
ds1302接線(xiàn)
2023-9-8 17:05 上傳
2.PNG (45.43 KB, 下載次數(shù): 30)
下載附件
讀寫(xiě)時(shí)序
2023-9-8 17:05 上傳
- unsigned char Ds1302Read(unsigned char command) /*從總線(xiàn)上讀取數(shù)據(jù),低位在前*/
- {
- unsigned char i;
- unsigned char result=0x00;
- command |= 0x01; /*只宏定義了寫(xiě)的操作字,最低位寫(xiě)為1變?yōu)樽x操作字*/
- CE=1;
- for(i=0;i<8;i++)
- {
- IO = command & (0x01 << i); /*從最低位依次取數(shù)據(jù)并放到數(shù)據(jù)線(xiàn)上*/
- SCLK=0;
- SCLK=1;
- }
-
- for (i = 0; i<8; i++) /*從數(shù)據(jù)線(xiàn)上讀取*/
- {
- result>>=1;
- SCLK=1;
- SCLK=0;
- if(IO)
- {
- result|=0x80;
- }
- }
- CE=0;
- // IO=0; //?? 問(wèn)題所在,不加這一句亂碼
- return result;
- }
復(fù)制代碼
|
-
-
ds1302.rar
2023-9-8 17:14 上傳
點(diǎn)擊文件名下載附件
17.27 KB, 下載次數(shù): 2
keil工程
|