单片机 iic总线 51单片机IIC总线通信

\u5355\u7247\u673aIIC\u603b\u7ebf\uff0c\u5199\u4e00\u4e2a\u5b57\u8282

\u30101\u3011temp=temp<<1; \u8fd9\u4e2a\u662f\u6570\u636e\u5de6\u79fb\uff1bCY\u5c31\u7b49\u4e8e\u79fb\u51fa\u7684\u6700\u9ad8\u4f4d\u3002
\u30102\u3011sda=CY;\u6bcf\u6b21\u5faa\u73af\uff0c\u5c06\u81ea\u52a8\u53d6\u5230temp\u7684\u6bcf\u4e00\u4f4d\uff0c\u4ece\u9ad8\u5230\u4f4e\u3002
\u30103\u3011scl=1;\u76ee\u7684\u662fscl\u7ebf\u4ece0\u52301\u7684\u8df3\u53d8\u3002\u5177\u4f53\u53ef\u4ee5\u770bIIC\u901a\u4fe1\u534f\u8bae\u7684\u56fe\u5f62\u3002
\u30104\u3011scl=0; \u5faa\u73af\u5916 \u3002\u5b57\u8282\u7684\u6240\u6709\u4f4d\uff0c\u51718\u4f4d\u79fb\u51fa\u540e\u3002\u9700\u8981\u7b49\u5230IIC\u4ece\u7ad9\u8bbe\u5907\u7684\u54cd\u5e94\u3002
scl\u72b6\u6001\u662f\u534f\u8bae\u7ea6\u5b9a\u7684\u8981\u6c42\u3002sda=1\u8868\u793a\uff0cIO\u53e3\u505a\u8f93\u5165\u7528\u3002\u91ca\u653e\u603b\u7ebf\u7406\u89e3\u4e5f\u662f\u5bf9\u7684\u3002

\u6240\u6709\u4ee3\u7801\u7684\u76ee\u7684\u90fd\u662f\u56f4\u7ed5IIC\u901a\u4fe1\u534f\u8bae\u4e2d\uff0c\u5173\u4e8e\u201c \u4e3b\u5199\u4ece\u4e00\u4e2a\u5b57\u8282\u201d\u7684\u8981\u6c42\u3002

\u6211\u628aiic\u901a\u4fe1\u7684\u4ee3\u7801\u7ed9\u4f60\u5427
/**************************************
\u5411IIC\u603b\u7ebf\u53d1\u9001\u4e00\u4e2a\u5b57\u8282\u6570\u636e
**************************************/
/*******************************/
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
{
for(j=0;j<121;j++)
{;}}
}


/**************************************
\u5ef6\u65f65\u5fae\u79d2(STC90C52RC@12M)
\u4e0d\u540c\u7684\u5de5\u4f5c\u73af\u5883,\u9700\u8981\u8c03\u6574\u6b64\u51fd\u6570\uff0c\u6ce8\u610f\u65f6\u949f\u8fc7\u5feb\u65f6\u9700\u8981\u4fee\u6539
\u5f53\u6539\u75281T\u7684MCU\u65f6,\u8bf7\u8c03\u6574\u6b64\u5ef6\u65f6\u51fd\u6570
**************************************/
void Delay5us()
{
_nop_();_nop_();_nop_();_nop_();
_nop_();/*_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_(); */
}

/**************************************
\u5ef6\u65f65\u6beb\u79d2(STC90C52RC@12M)
\u4e0d\u540c\u7684\u5de5\u4f5c\u73af\u5883,\u9700\u8981\u8c03\u6574\u6b64\u51fd\u6570
\u5f53\u6539\u75281T\u7684MCU\u65f6,\u8bf7\u8c03\u6574\u6b64\u5ef6\u65f6\u51fd\u6570
**************************************/
void Delay5ms()
{
WORD n = 1000;

while (n--)
{
_nop_();_nop_();_nop_();_nop_();
};
}
void MMA8452_SendByte(BYTE dat)
{
BYTE i;

for (i=0; i<8; i++) //8\u4f4d\u8ba1\u6570\u5668
{
dat <<= 1; //\u79fb\u51fa\u6570\u636e\u7684\u6700\u9ad8\u4f4d
SDA = CY; //\u9001\u6570\u636e\u53e3
SCL = 1; //\u62c9\u9ad8\u65f6\u949f\u7ebf
Delay5us(); //\u5ef6\u65f6
SCL = 0; //\u62c9\u4f4e\u65f6\u949f\u7ebf
Delay5us(); //\u5ef6\u65f6
}
MMA8452_RecvACK();
}

/**************************************
\u4eceIIC\u603b\u7ebf\u63a5\u6536\u4e00\u4e2a\u5b57\u8282\u6570\u636e
**************************************/
BYTE MMA8452_RecvByte()
{
BYTE i;
BYTE dat = 0;

SDA = 1; //\u4f7f\u80fd\u5185\u90e8\u4e0a\u62c9,\u51c6\u5907\u8bfb\u53d6\u6570\u636e,
for (i=0; i<8; i++) //8\u4f4d\u8ba1\u6570\u5668
{
dat <<= 1;
SCL = 1; //\u62c9\u9ad8\u65f6\u949f\u7ebf
Delay5us(); //\u5ef6\u65f6
dat |= SDA; //\u8bfb\u6570\u636e
SCL = 0; //\u62c9\u4f4e\u65f6\u949f\u7ebf
Delay5us(); //\u5ef6\u65f6
}
return dat;
}


\u8fd9\u662f\u6211\u4ee5\u524d\u8bfb\u53d6\u4f20\u611f\u5668\u4fe1\u606f\u65f6\u5019\u7528\u7684\u3002\u6b63\u597d\u662fiic\u901a\u4fe1\u7684\u90a3\u90e8\u5206\uff0c\u4f60\u81ea\u5df1\u5b66\u4e00\u4e0biic\u5427\uff0c\u6211\u7684\u7a0b\u5e8f\u662f\u6ca1\u95ee\u9898\u7684\u54e6\u3002

说起来比较复杂
有CLK(时钟) 和DTA(数据) 组成,
DTA为高 CLK为拉低, 为起始,CLK发送位时钟 第一个8BIT送设备号,读写命令, 然后发数据,最后DTA位高 SCK为高结束

很多单片机内置iic总线,也可以通过IO口,自己软件仿一个IIC总线。

I方C
这个办法不好,编程也复杂,而且不通用,只有一个好处就是熟悉了IIC总线了
建议每个传感器做单一检测,然后通过通信(有线或无线)方式进行信息传输,主机应尽量用上位机.

扩展阅读:51单片机iic总线 ... iic协议 ... 蓝桥杯单片机 ... 51单片机iic通信 ... iic时序图 ... sunny ui ... 线路开π ... can总线 ... iic通信 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网