标题:
请问51单片机IIC发送程序怎么理解
[打印本页]
作者:
xxx1949
时间:
2021-3-30 17:23
标题:
请问51单片机IIC发送程序怎么理解
程序片段如下:
unsigned char I2cSendByte(unsigned char dat)
{
unsigned char a=0,b=0;//最大255,一个机器周期为1us,最大延时
255us。
for(a=0;a<8;a++)//要发送8 位,从最高位开始
{
SDA=dat>>7; //起始信号之后SCL=0,所以可以直接改变SDA 信
号
dat=dat<<1;
Delay10us();
SCL=1;
Delay10us();//建立时间>4.7us
SCL=0;
Delay10us();//时间大于4us
}
SDA=1;
Delay10us();
SCL=1;
while(SDA)//等待应答,也就是等待从设备把SDA 拉低
{
b++;
if(b>200) //如果超过2000us 没有应答发送失败,或者为非应答,
表示接收结束
{
SCL=0;
Delay10us();
return 0;
}
}
SCL=0;
Delay10us();
return 1;
}
void At24c02Write(unsigned char addr,unsigned char dat)
{
I2cStart();
I2cSendByte(0xa0);//发送写器件地址
I2cSendByte(addr);//发送要写入内存地址
I2cSendByte(dat); //发送数据
I2cStop();
}
请问unsigned char I2cSendByte(unsigned char dat)函数中黄色背景标注的return,整个程序中都没有对此返回值做什么操作,加此返回值显得没什么意义,请问此返回值有什么作用?
先谢了
作者:
lwh999995
时间:
2021-3-30 17:53
下面都解释了:
while(SDA)//死等回应
if(b>200) //如果超过2000us 没有应答发送失败,或者为非应答,
return 0 失败
return 1 成功
作者:
人人学会单片机
时间:
2021-3-30 18:34
http://www.51hei.com/bbs/dpj-204282-1.html
http://www.51hei.com/bbs/dpj-204281-1.html
我i这两个贴子 都是IIC的 你可以看看
作者:
请使劲儿飞
时间:
2021-3-30 19:43
应该是返回发送状态的 就是发送成功还是失败,这个步骤倒不是必要的,不写也无所谓。不过程序看起来似乎也不完整 ,if之后配套应该还有个else没写
可以参考以下
/***********************************
功能:向外部设备发送8bit数据-----
************************************/
void IIC_SendByte(uint8_t Byte)
{
uint8_t i = 0;
for(i=0; i<8; i++)
{
if(Byte & 0x80) //先从高位开始发送(&0x80是为了单独提取出最高位的那个值 也就是要发送的数据,因为数据一次只能发送一位0或1)
{
IIC_SDA_1(); //SDA置高 (IO引脚不能像51那般直接以等于0或1来进行输出控制)
}
else
{
IIC_SDA_0(); //SDA置低
}
Byte <<= 1; //数据左移
IIC_Delay(); //延时
IIC_SCL_1();
IIC_Delay();
IIC_SCL_0();
IIC_Delay();
}
IIC_SDA_1(); //释放总线
IIC_Delay();
}
作者:
cheney03
时间:
2021-3-30 20:09
调试时有用,可以通过返回值查看结果:没有应答发送失败,或者为非应答,返回0,else有应答发送成功,返回1
作者:
花心的刘备
时间:
2021-3-30 21:26
这里是判断iic设备是否应答的
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1