单片机通信问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 12:11:57
for (BitCnt=0; BitCnt<8; BitCnt++) //要传送的数据长度为8位
{
if((c<<BitCnt)&0x80) //判断发送位(从高位起发送)
{
SDA = 1;
}
else
{
SDA = 0;
}

_nop_();
_nop_();
SCL = 1; //置时钟线为高通知被控器开始接收数据位
SomeNOP(); //保证时钟高电平周期大于 4us
SCL = 0;
}

_nop_();
_nop_();

I2C_Ack = I2C_CheckAck(); //检验应答信号,作为发送方,所以要检测接收器反馈的应答信号.
_nop_();
_nop_();
}
请问
SDA = 1;
}
else
{
SDA = 0;
}
是怎么回事呀?为什么c移位后和0x80按位相与?谢谢!请详细解答

c移位后和0x80按位相与的作用是取其最高位用来作为输出的量,实现从高位起的数据传送.

这个要看你实现什么功能,才好解释

为什么都喜欢将串行通信自己设计呢?不是有一个串行通信口,还需要自己编写传输协议呢?TXD、RXD端口就是用来做串行通信接口的。