uint16 read_8563_realtime(void) //ctrl_addres 是控制字段 //addres是地址 <br />{ <br /> uint16 temp;<br /> uint16 *pt;<br /> pt=&temp; <br /> <br /> if(I2C_ReadNByte (0x00, pt, 0x01))<br /> {<br /> if((*pt&0xa8)!=0)<br /> {<br /> *pt=0;<br /> I2C_WriteNByte(0x0C, pt, 0x01); <br /> I2C_WriteNByte(0x0D, pt, 0x01);<br /> <br /> I2C_WriteNByte(0x0F, pt, 0x01);<br /> I2C_WriteNByte(0x00, pt, 0x01);<br /> I2C_WriteNByte(0x01, pt, 0x01);<br /> __asm{<br /> NOP<br /> NOP<br /> NOP<br /> NOP<br /> }<br /> *pt=0x81;<br /> I2C_WriteNByte(0x0E, pt, 0x01); <br /> }<br /> }<br /> <br /> pt=(uint16 *)&rt_time_buf.second;<br /> if(I2C_ReadNByte (0x02, pt, 0x07)==0)<br /> {<br /> if(I2C_ReadNByte (0x02, pt, 0x07)==0)<br /> return 0; <br /> }<br /> temp=rt_time_buf.second;<br /> temp=temp & 0x7f ; //59<br /> if(temp<=0x59)<br /> rt_time.second=temp;<br /> else <br /> return 0; <br /> <br /> temp=rt_time_buf.minute;<br /> temp=temp & 0x7f ; //59<br /> if(temp<=0x59)<br /> rt_time.minute=temp;<br /> else <br /> return 0; <br /><br /> temp=rt_time_buf.hour;//23<br /> temp=temp & 0x3f;<br /> if(temp<=0x23)<br /> rt_time.hour=temp;<br /> else <br /> return 0;<br /><br /> temp=rt_time_buf.day;//31<br /> temp=temp & 0x3f;<br /> if(temp<=0x31)<br /> rt_time.day=temp;<br /> else <br /> return 0;<br /><br /> temp=rt_time_buf.month;//12<br /> temp=temp & 0x1f;<br /> if(temp<=0x12)<br /> rt_time.month=temp& 0x1f;<br /> else <br /> return 0;<br /><br /> temp=rt_time_buf.year; <br /> if(temp<=0x99)<br /> { <br /> rt_time.year=temp;<br /> return 1;<br /> }<br /> else <br /> return 0; <br />} <br /><br />在读操作的时候I2C_ReadNByte (0x00, pt, 0x01),地址0x00读出来的数据一直是0x80,而不是设置的0x00,时间也就一直是设置进去的值,时钟芯片没有计时工作 |
|