| 应该是我水平低,搞不懂他怎么处理: 像这里:复制代码// 发送开始命令 发送器件地址(写) 发送数据地址 发送开始命令 发送器件地址(读)读数据
//头尾2个器件地址(第1个最后一位写0,第2个最后一位写1),数据片内地址只发1次
void IIC_Read_NByte( u8 slave,u8 addr,u8 *p,u8 number )        //iic读取连续的几个字节
{
        I2C_MasterStart();                        //发送一个启动信号"S”,开始一次通信的开始
        
        //IIC_SENDBYTE(slave);        //主机发送命令字。该字由 7 位的外围器件地址和 1 位读写控制位R/W组成(此时RW=1为读)
                                //slave 由 7 位的外围器件地址和 1 位读写控制位R/W组成(此时RW=1为读)
        //IIC_WAITACK();                        //等待从机应答ACK,结果由ask保存,为0就正确,为1就错误
        I2C_MasterSendByte(slave); //主机模式发送1字节数据,函数返回: 0   (接收的应答信号为ACK)
                                                                         //函数返回:  1   (接收的应答信号为NAK) 
        
        
        //IIC_SENDBYTE(addr);        //要写入芯片24C02的读取数据片内地址addr
        //IIC_WAITACK();                //等待从机应答ACK,结果由ask保存,为0就正确,为1就错误
        I2C_MasterStart();                                 //发送一个启动信号"S”,开始一次通信的开始
        I2C_MasterSendByte((u8)(slave+0x01)); //主器件发送器件地址(读/写选择位为"1"),主机模式发送1字节数据
                                                                             //函数返回: 0   (接收的应答信号为ACK)函数返回:  1   (接收的应答信号为NAK) 
        //IIC_START();       
        //IIC_SENDBYTE((u8)(slave+0x01)); //主器件发送器件地址(读/写选择位为"1")        
        //IIC_WAITACK();                        //芯片24C02应答ACK,并随时钟送出数据
        
        
        do
        {
                *p = I2C_MasterReadByte(BOOL ack);        //第1圈P[0] 第2圈 P[1] 第3圈P[2]第4圈P[3]第5圈P[4]第6圈P[5].......
                p++;
                if( number!=1 )        //不是最后一位
                IIC_SENDACK();                //等待从机应答ACK,结果由ask保存,为0就正确,为1就错误,这句不写也OK
        }
        while(--number);
        IIC_SENDNACK();
        IIC_STOP();  //主机发送停止信号“P”        
}
 
 
 do
 {
 *p = I2C_MasterReadByte(BOOL ack); //第1圈P[0] 第2圈 P[1] 第3圈P[2]第4圈P[3]第5圈P[4]第6圈P[5].......
 p++;
 if( number!=1 ) //不是最后一位
 IIC_SENDACK(); //等待从机应答ACK,结果由ask保存,为0就正确,为1就错误,这句不写也OK
 }
 
 
 I2C_MasterReadByte(BOOL ack); 是读当前地址的1个字节数据,那么这个入口参数BOOL ack,我从哪里获取?
 
 
 总不能直接带入0吧?
 
 |