void IIC_Send_Byte(u8 txd) { u8 t; SDA_OUT(); IIC_SCL=0; for(t=0;t<8;t++) { IIC_SDA=(txd&0x80)>>7; txd<<=1; //从高位按次序进行传输 delay_us(2); IIC_SCL=1;//开始传输 delay_us(2); IIC_SCL=0;//结束传输 delay_us(2); } } /* @brief 主机读取1个字节 @param ...
IIC_SDA=(txd&0x80)>>7; /* ② */ txd<<=1; /*③ */ delay_us(2); /* 对TEA5767这三个延时都是必须的*/ IIC_SCL=1; /* ④ */ delay_us(2); IIC_SCL=0; /* ⑤ */ delay_us(2); } } 一开始为什么①把IIC_SCL=0;因为主要IIC_SCL上升沿时准备好数据就是稳定有效数据,例如我们发...
IIC_SDA=(txd&0x80)>>7; //SDA高低电平表示数据1和0 txd<<=1; delay_us(2); //对TEA5767这三个延时都是必须的 IIC_SCL=1; //SCL先上升 delay_us(2); IIC_SCL=0; //SCL再下降,形成一个脉冲,发送一位数据生效 delay_us(2); } } 发送一个字节,就是分8次循环,产生8个时钟信号,并将SDA赋值...
SDA的8bit数据由发送方(主或从)控制 SDA的1bit应答由接收方(主或从)控制 3、主从设备配对 前面提到过,为了在总线上的总多设备中匹配主机和从机,需要进行配对,方法如下: 主机发送起始信号 主机发送8bit寻址数据,从高到低为:7bit从机地址+1bit读写标志。读写标志0表示主设备向从设备写数据,1表示主设备向从...
从图中可以看到,STM32F103中引出的管教PB6、PB7本来也是STM32103芯片定义的I2C1管脚,外面通过上拉电阻接入到芯片24C02的SCL和SDA引脚处。 软件设计 通过GPIO模拟I2C协议达到I2C通信的相同的效果,主要实现在myiic.c和myiic.h文件中,具体内容如下: IIC协议实现代码 ...
1.硬件I2C的效率要远高于软件的,而软件I2C由于不受管脚限制,接口比较灵活。 2.IIC是半双工通信方式 IIC通信协议 IIC通信过程由开始、结束、发送、响应、接收五个部分构成。 1、(在发送、接收数据的时候)当SCL为高电平时,SDA线不允许变化;当SCL线为低电平时,SDA线可以任意0、1变化。
#define IIC_SDA PBout(7) //SDA #define READ_SDA PBin(7) //输入SDA //IIC所有操作函数 void IIC_Init(void); //初始化IIC的IO口 void IIC_Start(void); //发送IIC开始信号 void IIC_Stop(void); //发送IIC停止信号 void IIC_Send_Byte(u8 txd); //IIC发送一个字节 ...
②:0xA1&0x80为0xA0,0xA0为10100000然后右移7位得到1,如以下图所示: 重点绿色的位,就是为1。 ③:0xA1左移1位,如以下图所示: 所以txd = 0x20,懂不?我们重点取绿色的框框。 ④:IIC_SCL拉高就是为了SDA线上的数据必须保持稳定。 ⑤:IIC_SCL拉低,为了上升沿时准备好数据就是稳定有效数据。
();IIC_SCL=0;//拉低时钟开始数据传输for(t=0;t<8;t++){//IIC_SDA=(txd&0x80)>>7;//获取数据的最高位,然后左移7位//如果某位为1,则SDA为1,否则相反if((txd&0x80)>>7)IIC_SDA=1;elseIIC_SDA=0;txd<<=1;delay_us(2);//对TEA5767这三个延时都是必须的IIC_SCL=1;delay_us(2);IIC...
IIC_SDA=1; delay_us(2); IIC_SCL=1; delay_us(2); IIC_SCL=0; } //IIC发送一个字节 //返回从机有无应答 //1,有应答 //0,无应答 void IIC_Send_Byte(u8 txd) { u8 t; SDA_OUT(); IIC_SCL=0;//拉低时钟开始数据传输 for(t=0;t<8;t++) { IIC_SDA=(txd&0x80)>>7; txd<<=...