新手上路
- 积分
- 38
- 金钱
- 38
- 注册时间
- 2015-8-27
- 在线时间
- 5 小时
|
发表于 2015-11-6 10:58:59
|
显示全部楼层
u8 IIC_Read_Byte(unsigned char ack)
{
unsigned char i,receive=0;---------------------举例说明吧: 初始的时候 receive 0000 0000 ,假设接受的数据(即SDA)SDA=0X81 (1000 0001)
SDA_IN();// ---------------------------SDA变成输入模式
for(i=0;i<8;i++ )
{
IIC_SCL=0; ------------------以下是SCL动作,让芯片发SDA信号过来
delay_us(2);
IIC_SCL=1;
receive<<=1;---------------------每一次循环接受变量左移1位, 0000 0000 <<1 还是0000 0000 ,共8次
if(READ_SDA)receive++; -------------如果SDA是高电平(从高位传数据),执receive++....... 第一次receive=0000 0001,第二次receive=0000 0010,第三次receive=0000 0100 ,第四次receive=0000 1000,第五次receive=0001 0000, 第六次receive=0010 0000,第七次receive=0100 0000,第八次receive加1,receive=1000 0001,
delay_us(1);
}
if (!ack)--------------------下面ACK什么的就自己datesheet了
IIC_NAck();//
else
IIC_Ack(); //
return receive; 返回receive即SDA的值
} |
|