This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

BQ34Z110: 单片机与BQ34Z110的IIC通信问题

Part Number: BQ34Z110

代码如下,发了命令,一直读不到数据

#include <STC8.H>

#include "intrins.h"

#define I2CCFG (*(unsigned char volatile xdata *)0xfe80)
#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81)
#define I2CMSST (*(unsigned char volatile xdata *)0xfe82)
#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83)
#define I2CSLST (*(unsigned char volatile xdata *)0xfe84)
#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85)
#define I2CTXD (*(unsigned char volatile xdata *)0xfe86)
#define I2CRXD (*(unsigned char volatile xdata *)0xfe87)


sbit SDA = P5^4;
sbit SCL = P5^5;

void Wait()
{
while (!(I2CMSST & 0x40));
I2CMSST &= ~0x40;
}

void Start()
{
I2CMSCR = 0x01; //发送开始信号
Wait();
}

void SendData(char dat)
{
I2CTXD = dat; //写数据到数据缓冲区
I2CMSCR = 0x02; //发送SEND命令
Wait();
}

void RecvACK()
{
I2CMSCR = 0x03; //发送读ACK命令
Wait();
}

char RecvData()
{
I2CMSCR = 0x04; //发送RECV命令
Wait();
return I2CRXD;
}

void SendACK()
{
I2CMSST = 0x00; //发送ACK命令
I2CMSCR = 0x05;
Wait();
}

void SendNAK()
{
I2CMSST = 0x01; //发送NAK命令
I2CMSCR = 0x05;
Wait();
}

void Stop()
{
I2CMSCR = 0x06; //发送STOP命令
Wait();
}

void Delay()
{
int i;

for (i=0; i<3000; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}

void main()
{
unsigned char i,j;
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;

P_SW2 = 0x80;

I2CCFG = 0xe0; //使能I2C主机模式
I2CMSST = 0x00;

Start();
SendData(0xaa); //发从机设备地址+写命令
RecvACK();


SendData(0x04); //发查电池剩余电量命令
RecvACK();

Stop(); //发停止命令

Delay(); //等待写入数据

Start(); //
SendData(0xab); //发从机设备地址+读命令
RecvACK();
i= RecvData(); //读返回结果
SendACK();
j= RecvData();
SendACK();
Stop();

P_SW2 = 0x00;


}