单片机内置的硬件I2C部件大家已经很熟悉了,现在给大家介绍一种自己修改之后的软件I2C通信协议,在适当的时候可能会给自己的系统带来更多的灵活性。
软件I2C在使用中硬件链路同样是两线制,一根时钟线(CLK),一根数据线(DATA)。数据传送方式为空闲时间CLK和DATA均为高电平,CLK拉低开始数据传送,CLK低电平期间对DATA赋值,CLK高电平期间数据稳定可以做数据接收。高低电平的周期和比例可以根据自己系统的时钟和数据处理灵活调整,一次数据传送的BIT数要事先约定好,方便后面的数据接收处理。
软件处理过程如下:对于发送端,CLK拉低开始数据传送,并在CLK低电平期间给DATA赋值,赋值成功之后把CLK拉高,适当延时即可以开始下一BIT位数据的传送。对于接收端,为了能够及时检测到有数据传送,应该吧CLK接到外部中断管脚,并开启相应的外部中断,触发方式选择为下降沿触发,这样一旦有数据传送就可以检测到,并在中断服务程序中完成一次数据接收,CLK低电平期间做循环等待,高电平期间做数据检测储存。
该软件I2C通信协议是对硬件I2C部件的一种简化处理,使用中根据自己的系统设计灵活处理,在很多使用过程中都会给你带来方便。
以下程序是一段发射端的实例代码,仅供大家参考:
void status_out(uint8_t hdd_status)
{
uint8_t i;
uint8_t test;
for(i=0; i<8; i++)
{
scl_low;
test = (1 << i);
if(hdd_status & test)
{
sda_high;
}
else
{
sda_low;
}
delay(10);
scl_high;
delay(20);
}
scl_high;
sda_high;
}
文章评论(0条评论)
登录后参与讨论