#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无返回低电平的应答。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
隐隐有些不明白,电池备份就是为了断电后继续计时,保证时间准确,判断字节是否要初始化的话,初始化后时间就不对了。
一周热门 更多>