|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
懇請(qǐng)高人看一下8051時(shí)鐘芯片ds1302程序錯(cuò)在哪里? |
| 作者:nj21ic 欄目:單片機(jī) |
懇請(qǐng)高人幫忙看一下8051時(shí)鐘芯片DS1302.html">DS1302程序錯(cuò)在哪里讀出的數(shù)據(jù)全是0xff? #include <reg52.h> // Register definition file. #include <intrins.h> #include <math.h> #include <string.h> #include <stdlib.h> typedef unsigned CHAR uCHAR; typedef unsigned int uint; typedef unsigned LONG uLONG; sbit T_CLK = P3^1; /*實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳 */ sbit T_IO = P3^2; /*實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳 */ sbit T_RST = P3^3; /*實(shí)時(shí)時(shí)鐘復(fù)位線引腳 */ sbit ACC0 = ACC^0; sbit ACC7 = ACC^7; void RTInputByte(uCHAR); /* 輸入 1Byte */ uCHAR RTOutputByte(void); /* 輸出?1Byte */ void W1302(uCHAR, uCHAR); uCHAR R1302(uCHAR); void Set1302(uCHAR *); /* 設(shè)置時(shí)間 */ void Bcd2asc(uCHAR,uCHAR *); void Get1302(uCHAR curtime[]); /* 讀取1302當(dāng)前時(shí)間 */ /******************************************************************** 函 數(shù) 名:RTInputByte() 功 能:實(shí)時(shí)時(shí)鐘寫入一字節(jié) ***********************************************************************/ void RTInputByte(uCHAR d) { uCHAR data i2; ACC = d; for(i2=8; i2>0; i2--) { T_IO = ACC0; /*相當(dāng)于匯編中的 RRC */ T_CLK = 1; T_CLK = 0; ACC = ACC >> 1; } } /******************************************************************** 函 數(shù) 名:RTOutputByte() 功 能:實(shí)時(shí)時(shí)鐘讀取一字節(jié) 說(shuō) 明:從DS1302讀取1Byte數(shù)據(jù) (內(nèi)部函數(shù)) ***********************************************************************/ uCHAR RTOutputByte(void) { uCHAR i; for(i=8; i>0; i--) { T_IO=1;//------------------------------------------- ACC = ACC >>1; /*相當(dāng)于匯編中的 RRC */ ACC7 = T_IO; _nop_(); T_CLK = 1; _nop_(); _nop_(); _nop_(); _nop_(); T_CLK = 0; _nop_(); _nop_(); _nop_(); _nop_(); } return(ACC); } /******************************************************************** 函 數(shù) 名:W1302() 功 能:往DS1302寫入數(shù)據(jù) 說(shuō) 明:先寫地址,后寫命令/數(shù)據(jù) (內(nèi)部函數(shù)) ***********************************************************************/ void W1302(uCHAR ucAddr, uCHAR ucDa) { T_RST = 0; T_CLK = 0; T_RST = 1; RTInputByte(ucAddr); /* 地址,命令 */ RTInputByte(ucDa); /* 寫1Byte數(shù)據(jù)*/ T_CLK = 1; T_RST = 0; } /******************************************************************** 函 數(shù) 名:R1302() 功 能:讀取DS1302某地址的數(shù)據(jù) 說(shuō) 明:先寫地址,后讀命令/數(shù)據(jù) (內(nèi)部函數(shù)) ***********************************************************************/ uCHAR R1302(uCHAR ucAddr) { uCHAR ucData; T_RST = 0; T_CLK = 0; T_RST = 1; RTInputByte(ucAddr); /* 地址,命令 */ ucData = RTOutputByte(); /* 讀1Byte數(shù)據(jù) */ T_CLK = 1; T_RST = 0; return(ucData); } /******************************************************************** 函 數(shù) 名:BurstW1302T() 功 能:往DS1302寫入時(shí)鐘數(shù)據(jù)(多字節(jié)方式) 說(shuō) 明:先寫地址,后寫命令/數(shù)據(jù) ***********************************************************************/ void BurstW1302T(uCHAR *pWClock) { uCHAR i; W1302(0x8e,0x00); /* 控制命令,WP=0,寫操作?*/ T_RST = 0; T_CLK = 0; T_RST = 1; RTInputByte(0xbe); /* 0xbe:時(shí)鐘多字節(jié)寫命令 */ for (i = 8; i>0; i--) /*8Byte = 7Byte 時(shí)鐘數(shù)據(jù) + 1Byte 控制*/ { RTInputByte(*pWClock); /* 寫1Byte數(shù)據(jù)*/ pWClock++; } T_CLK = 1; T_RST = 0; } /******************************************************************** 函 數(shù) 名:BurstR1302T() 功 能:讀取DS1302時(shí)鐘數(shù)據(jù) 說(shuō) 明:先寫地址/命令,后讀數(shù)據(jù)(時(shí)鐘多字節(jié)方式) 調(diào) 用:RTInputByte() , RTOutputByte() 入口參數(shù):pRClock: 讀取時(shí)鐘數(shù)據(jù)地址 格式為: 秒 分 時(shí) 日 月 星期 年 ***********************************************************************/ void BurstR1302T(uCHAR *pRClock) { uCHAR i; T_RST = 0; T_CLK = 0; T_RST = 1; RTInputByte(0xbf); /* 0xbf:時(shí)鐘多字節(jié)讀命令 */ for (i=8; i>0; i--) { *pRClock = RTOutputByte(); /* 讀1Byte數(shù)據(jù) */ pRClock++; } T_CLK = 1; T_RST = 0; } /******************************************************** |
| 2樓: | >>參與討論 |
| 作者: hotpower 于 2005/6/1 0:48:00 發(fā)布:
必須打開晶振 //DS1302工作開始 void TimeWorkStart(void) { unsigned CHAR val; val = TimeByteRead(timereadseg);//讀秒數(shù)據(jù) val &= 0x7f;//打開晶振 TimeWrieDisbale();//開放DS1302寫保護(hù) TimeByteWrite(timewriteseg, val);//打開晶振 TimeByteWrite(tricklewrite, 0xa5);//打開充電二極管 TimeWriteEnable();//使能DS1302寫保護(hù) } http://blog.21ic.org/more.asp?NAME=hotpower&id=534 |
|
| 3樓: | >>參與討論 |
| 作者: nj21ic 于 2005/6/1 6:36:00 發(fā)布:
請(qǐng)高人給個(gè)程序了,兩個(gè)星期沒(méi)搞定了!! 請(qǐng)高人給個(gè)程序了,兩個(gè)星期沒(méi)搞定了!! email:gaotekknd@126.com |
|
| 4樓: | >>參與討論 |
| 作者: abc2001 于 2005/6/1 9:08:00 發(fā)布:
資料已發(fā)到你的郵箱了,請(qǐng)查收! |
|
| 5樓: | >>參與討論 |
| 作者: imaway 于 2005/11/13 16:58:00 發(fā)布:
本程序沒(méi)有大毛病編的不錯(cuò) 我試過(guò)了,不知你怎么知到是FF的? |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |