IIC 總線的幾種信號1.起始和終止信號:
51hei圖片20190801103458.png (22.21 KB, 下載次數: 32)
下載附件
2019-8-1 10:36 上傳
從時序圖可以看出,起始信號為,SCL=1,SDA下降沿;終止信號為SCL=1,SDA為上升沿,保持的時間是有限制的:
51hei圖片20190801103515.png (28.69 KB, 下載次數: 37)
下載附件
2019-8-1 10:36 上傳
具體的程序實現如下:
起始信號:SDA=1保持時間大于4。7us,隨后SDA=0保持時間大于4us
?
1
2
3
4
5
6
7
8
9
| /*SDA下降沿*/
void start()
{
SDA = 1; //順序不能反了,先是SDA=1;
SCL = 1;
delay();
SDA = 0;
delay();
}
|
終止信號:SDA=0保持時間大于4us,隨后SDA=1保持時間大于4。7us
?
1
2
3
4
5
6
7
8
9
| /*SDA上升沿*/
void end()
{
SDA = 0; //順序不能反了,先是SDA=0;
SCL = 1;
delay();
SDA = 1;
delay();
}
|
2.應答信號:
51hei圖片20190801103520.png (22.8 KB, 下載次數: 43)
下載附件
2019-8-1 10:36 上傳
傳送的每一個字節必須保證是8位長度。數據傳送時,先傳送最高位(MSB),每一個被傳送的字節后面都必須跟隨一位應答信號(即一幀共有9位)。
如:主機往總線上發送一個字節的數據后,釋放總線,從機會把總線拉低(即應答信號),以表示這一字節發送成功
同理主機從總線上讀取完一個字節的數據后,主機會把總線拉低,"告訴"從機這一字節的數據接收成功
51hei圖片20190801103524.png (23.47 KB, 下載次數: 37)
下載附件
2019-8-1 10:36 上傳
程序實現
應答信號:
?
1
2
3
4
5
6
7
8
9
| void ack()
{
uchar i = 0;
SCL = 1;
delay();
while(SDA == 1 && i < 250)i++;
SCL = 0; //SCL=0,SDA可以改變
delay();
}
|
|