中级会员
 
- 积分
- 466
- 金钱
- 466
- 注册时间
- 2018-4-26
- 在线时间
- 78 小时
|
1金钱
我在用I2C与一个模块通信的时候,写没问题,读出来的时候有问题,我读16位的数据,高位没问题是我写的值,低位就是一致是0XFF,请问一下是什么原因
lpt_WriteOneByte(0x0004,0x581C);
//pt2257_WriteOneByte(0x01,0x77);
spi_data=lpt_ReadOneByte(0x0004);
delay_ms(500);
printf("temp=%x\n",spi_data);
void lpt_WriteOneByte(u16 WriteAddr,u16 DataToWrite)
{
IIC_Start();
IIC_Send_Byte(0X54); //·¢ËíD′Ãüáî
IIC_Wait_Ack();
IIC_Send_Byte((WriteAddr>>8)&0xFF);//·¢Ëí¸ßμØÖ·
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr&0xFF); //·¢ËíμíμØÖ·
IIC_Wait_Ack();
IIC_Send_Byte((DataToWrite>>8)&0xFF); //·¢Ëí×Ö½ú
IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite&0xFF); //·¢Ëí×Ö½ú
IIC_Wait_Ack();
IIC_Stop();//2úéúò»¸öí£Ö1ìõ¼t
delay_ms(10);
}
u16 lpt_ReadOneByte(u16 ReadAddr)
{
u8 temp[2];
u8 i;
u16 REG_data=0;
IIC_Start();
IIC_Send_Byte(0x54); //·¢ËíD′Ãüáî
i=IIC_Wait_Ack();
if(i==1)
printf("ack fail");
IIC_Send_Byte((ReadAddr>>8)&0xFF);//·¢Ëí¸ßμØÖ·
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr&0xFF); //·¢ËíμíμØÖ·
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0x55); //½øèë½óêÕÄ£ê½
IIC_Wait_Ack();
temp[0]=IIC_Read_Byte(0);
//printf("temop[0] is %x\n",temp[0]);
IIC_Wait_Ack();
temp[1]=IIC_Read_Byte(0);
//printf("temop[1] is %x\n",temp[1]);
IIC_Wait_Ack();
IIC_Stop();//2úéúò»¸öí£Ö1ìõ¼t
REG_data=(temp[0]<<8)|temp[1];
return REG_data;
}
写的没问题,读出来的就有问题,
|
|