void IIC_Start(void)
{
IIC_SDA_OUT(); //主机产生一个起始信号,所以SDA设置为推挽输出模式
IIC_SDA=1;
IIC_SCL=1;
delay_us(5); //当SCL为高电平时,SDA必须保持大于4.7us的时间,然后SDA拉低
IIC_SDA=0;
delay_us(5); //当SDA变为低电平时,低电平必须保持大于4us的时间
IIC_SCL=0; //钳位SCL拉低,准备传输数据或者接收数据
}
void IIC_Stop(void)
{
IIC_SDA_OUT(); //主机产生一个停止信号,所以SDA设置为推挽输出模式
IIC_SDA=0;
IIC_SCL=1;
delay_us(5); //当SCL为高电平的时候,SDA为低电平的时间必须保持在4us以上
IIC_SDA=1; //拉高SDA
delay_us(5); //SDA高电平时间必须保持大于4.7us
}
void IIC_Ack(void)
{
IIC_SDA_OUT(); //数据线还是推挽输出模式,主机发送数据给从机的时候所产生的应答信号
IIC_SCL=1;
IIC_SDA=0;
delay_us(5);
IIC_SCL=0;
IIC_SDA=1;
}
void IIC_NoAck(void)
{
IIC_SDA_OUT();
IIC_SCL=1;
IIC_SDA=1;
delay_us(5);
IIC_SCL=0;
IIC_SDA=0;
}
这样子写主机和从机可以通信,和原子的例程不同,就是不知道有没有什么优缺点,想问问,或者说在模拟时序的时候有什么要注意的。。。谢谢。。。
|