今天做毕业设计的时候,在I2C存储器CAT1025应用方面遇到了一个问题 while((IO0PIN&KEY4)==0) { for(i=0;i<50000;i++); if((IO0PIN&KEY4)!=0) { SendTimeRtc(); I2C_WriteNByte(CAT1025, ONE_BYTE_SUBA, 0x64+d1*8,DATA_BUF, 8); DelayNS(10); d1=d1+1; I2C_WriteNByte(CAT1025, ONE_BYTE_SUBA, 0x64+0x30,&d1, 1); DelayNS(10); // 清零数据缓冲区,防止出错 for (i=0; i<8; i++) DATA_BUF = 0; d2=0; // 读回刚才写入的数据 I2C_ReadNByte(CAT1025, ONE_BYTE_SUBA, 0x64+(d1-1)*8, TMP_BUF, 8); I2C_ReadNByte(CAT1025, ONE_BYTE_SUBA, 0x64+0x30, &d2, 1); for(i=0;i<8;i++) { UART0_SendByte(TMP_BUF); } if(d2<10) UART0_SendByte(d2+0x30); else { UART0_SendByte(d2/10+0x30); UART0_SendByte(d2%10+0x30); } }}
这是部分程序
在串口接收窗口EASY.EXE中接收时钟数据时 第1、3、5、7、9..正常 但是在第2、4、6、8、10...时接收数据出错
若将I2C_WriteNByte、I2C_ReadNByte中的偏移参数0X64改为0XC8,则接收数据正常。
不知这是何缘故? 应该这样解决问题? 敬请解答! 谢谢! |