本帖最后由 镜中风铃 于 2013-8-23 22:17 编辑
/**
* 函数: i2c_sendbyte(uint8 bt)
* 功能: 将输入的一字节数据bt发送
*/
void i2c_sendbyte(uint8 bt)
{
uint8 i;
for(i=0; i<8; i++)
{
if (bt & 0x80)
SDA = 1;
else
SDA = 0;
SCL=0;
SCL = 1;
nops();
bt <<= 1;
}
SCL = 0;
}
这个IIC 发送程序通不过,请问问题出在哪里呢?
* 函数: i2c_sendbyte(uint8 bt)
* 功能: 将输入的一字节数据bt发送
*/
void i2c_sendbyte(uint8 bt)
{
uint8 i;
for(i=0; i<8; i++)
{
if (bt & 0x80)
SDA = 1;
else
SDA = 0;
nops();
SCL = 1;
bt <<= 1;
nops();
SCL = 0;
}
}
下面这个程序是可以通过的 请问区别在哪里
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
AVR的SPI有很多模式,可以通过寄存器设置,相信其他的带SPI的MCU也可以灵活设置
你看看他们俩的时序图就明白了
IIC无所谓上升沿采样还是下降沿采样,IIC的顺序是:数据——时钟——时钟——数据,上升沿,下降沿SDA的状态是一样的
SPI的顺序:数据——时钟——数据——时钟(起始沿采样),或者,时钟——数据——时钟——数据(结束沿采样),因此就有起始沿/结束沿采样的问题,同样也就有上升沿采样还是下降沿采样的问题了
一周热门 更多>