初级会员

- 积分
- 156
- 金钱
- 156
- 注册时间
- 2015-1-15
- 在线时间
- 73 小时
|
5金钱
#define IIC_SCL PBout(6)// DS1
#define IIC_SDA PBout(7)
#define IN_SDA PBin(7)
//改变SDA所接的IO输入/输出
#define IIC_SDA_IN ((GPIOB->CRL&0X0FFFFFFF)|0X80000000)
#define IIC_SDA_OUT ((GPIOB->CRL&0X0FFFFFFF)|0X30000000)
u8 IIC_Write_Byte(u8 dat)
{
u8 i;
u8 iic_ack=0; //iic应答标志
IIC_SDA_OUT; //设置成输出
for(i = 0;i < 8;i++)
{
if(dat & 0x80) IIC_SDA = 1; //判断发送位,先发送高位
else IIC_SDA = 0;
#if _USER_DELAY_CLK==1 /* 定义了则使用延时函数来改变通讯频率 */
IIC_Delay();
IIC_SCL = 1; //为SCL下降做准备
IIC_Delay();
IIC_SCL = 0; //突变,将数据位发送过去
dat<<=1; //数据左移一位
IIC_Delay();
} //字节发送完成,开始接收应答信号
IIC_SDA = 1; //释放数据线
IIC_SDA_IN; //设置成输入
IIC_SCL = 1; //为SCL下降做准备
IIC_Delay();
#else /* 否则不使用延时函数改变通讯频率 */
IIC_SCL = 1; //为SCL下降做准备
IIC_SCL = 0; //突变,将数据位发送过去
dat<<=1; //数据左移一位
} //字节发送完成,开始接收应答信号
IIC_SDA = 1; //释放数据线
IIC_SDA_IN(); //设置成输入
IIC_Delay();
IIC_SCL = 1; //为SCL下降做准备
#endif /* end __USER_DELAY_CLK */
iic_ack |= IN_SDA; //读入应答位
IIC_Delay();
IIC_SCL = 0;
return iic_ack; //返回应答信号
}
写入地址后,3232无返回低电平的应答。
|
-
最佳答案
查看完整内容[请看2#楼]
回复【2楼】正点原子:
---------------------------------
解决了 IO口需配置成OD 而不能PP
|