我正在尝试使用SMBU与设备进行通信。我使用PIC18F26K83,并且可以传输数据。 (我猜。)我检查了I2CxCon0.B3,它是主数据请求位,并由程序设置。这意味着:
主状态机暂停,直到读取/写入数据以继续 (SCL输出保持低电平)
我还要检查“发送缓冲区为空”位,然后软件将其清除。
那么我可以确定传输成功吗?
然后,我将读取地址发送到从设备,然后检查接收缓冲区已满状态位。它得到1,所以我知道我收到了数据。但是,我得到的所有数据都是0。我要求充电状态,并且不能为零。因此,我与此相关的问题是:
这是接收代码:(A2是我用于调试的led。没什么特别的)
void SMBus_Data(){
I2C2STAT1.B2 = 1; // CLRBF=1, EMPTIES TRANSMIT BUFFER,i.e. TXBE=1
I2C2ADB1 = 0x16; //Address for smart battery
I2C2TXB = 0x0E; //Relative SOC
while (!I2C2STAT0.B7) {} // BUS FREE BFRE=1
I2C2CNT = 1; //BYTE COUNT REGISTER
I2C2CON0.B6 = 1; //RSEN=1;
//******START**********
I2C2CON0.B5 = 1; //MASTER START BIT
while(!I2C2CON0.B3) {} //Master Data request
while(!I2C2Stat1.B5){} //Transmit Buffer empty status bit.
I2C2ADB1 = (0x16 | 0x01);
I2C2CNT = 1;
I2C2CON0.B5 = 1; //MASTER START BIT
I2C2CON0.B6 = 0; //RSEN=1;
while(!I2C2stat1.B0){} //RXBF Receive Buffer Full Status Bit
Data_10 = I2C2TXB ;
}
答案 0 :(得分:0)
Data_10 = I2C2TXB ;
应该是Data_10 = I2C2RXB;