新手上路
- 积分
- 38
- 金钱
- 38
- 注册时间
- 2017-7-20
- 在线时间
- 4 小时
|
1金钱
本帖最后由 baoeraiqingcai 于 2017-7-22 09:01 编辑
1:分配所需的传送BD和接收BD中的BD是什么意思?
2、/*****************************************************************************/
/*函 数 名:I2C_Word_Write */
/*功能描述:I2C按WORD写操作 */
/*函数说明: */
/*调用函数:I2C_Start()、I2C_Senddata()、I2C_Ack()、I2C_Stop() */
/*全局变量:无 */
/*输 入:uchar device_address, uchar reg_add, uint writeword */
/*返 回:无 */
/*设 计 者: 时间: */
/*修 改 者: 时间: */
/*版 本: */
/*****************************************************************************/
void I2C_Word_Write(UINT8 device_address, UINT8 reg_add, UINT16 writeword)
{
UINT8 writeword_high,writeword_low;
writeword_low = writeword;
writeword_high = writeword>>8;
I2C_Start() I2C_Senddata(device_address & 0xFE);//为什么要&0xfe?
I2C_Ack();
if (Ack_Flag == 0)
{
I2C_Senddata(reg_add);
I2C_Ack();
if (Ack_Flag == 0)
{
I2C_Senddata(writeword_high);
I2C_Ack();
if (Ack_Flag == 0)
{
I2C_Senddata(writeword_low);
I2C_Ack();
}
else
SCL = 0;
}
else
SCL = 0;
}
else
SCL = 0;
I2C_Stop();
}
/*****************************************************************************/
/*函 数 名:I2C_Word_Read */
/*功能描述:I2C按Word读操作 */
/*函数说明: */
/*调用函数:I2C_Start()、I2C_Senddata()、I2C_Ack()、 */
/* I2C_Receivedata()、I2C_Stop() */
/*全局变量:无 */
/*输 入:uchar device_address,uchar reg_add */
/*返 回:正确:uchar readdata 错误:0x0000 */
/*设 计 者: 时间: */
/*修 改 者: 时间: */
/*版 本: */
/*****************************************************************************/
UINT16 I2C_Word_Read(UINT8 device_address, UINT8 reg_add)
{
UINT8 readdata_low;
UINT16 readdata,readdata_high,temp=0;
I2C_Start();
I2C_Senddata(device_address & 0xFE);//为什么要&0xfe?
I2C_Ack();
if (Ack_Flag == 0)
{
I2C_Senddata(reg_add);
I2C_Ack();
if (Ack_Flag == 0)
{
I2C_Start();
I2C_Senddata(device_address | 0x01);//这句话是什么意思
I2C_Ack();
if (Ack_Flag == 0)
{
// SDA = 1;//SDA 设为输入,读引脚
readdata_high = I2C_Receivedata();
SDA = 0;
I2C_Delay();I2C_Delay();
SCL = 1;
I2C_Delay();I2C_Delay();
SCL = 0;
I2C_Delay();I2C_Delay();
SDA = 1;
if (Ack_Flag == 0)
{
readdata_low = I2C_Receivedata();
I2C_Ack();
I2C_Stop();
temp = readdata_high << 8;
readdata = temp | readdata_low;
return(readdata);
}
else
{
I2C_Stop();
return(0x0000);
}
}
else
{
I2C_Stop();
return(0x0000);
}
}
else
{
I2C_Stop();
return(0x0000);
}
}
else
{
I2C_Stop();
return(0x0000);
}
}
void I2C_Senddata(UINT8 senddata)
{
UINT8 i;
for (i=0;i<8;i++)
{
I2C_Delay();
if ((senddata & 0x80) != 0x80) //这句话什么意思?
SDA = 0;
else
SDA = 1;
senddata = senddata << 1;
I2C_Delay();
SCL = 1;
I2C_Delay();
SCL = 0;
}
I2C_Delay();
}
|
|