欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
關于I2C數據有效性的疑問
[打印本頁]
作者:
song未央
時間:
2018-7-27 21:54
標題:
關于I2C數據有效性的疑問
這個字節發送函數我看得明白是符合數據位的有效性性規定,一字節數據一次一位發送,以SCL=1保證數據有效性,之后將SCL置0,當需要再發送一位時SCL=0,符合數據有效性
可是這個字節接收函數首先他就讓SCL=0,不是很懂,我的初步理解結合兩個函數一起看,當字節發送函數時由主機控制SCL變化,發送一位上SDA,讓SCL=1,先保證他數據有效傳輸,然后SCL=0,同上,之后再發送一位時,SCL=0,因此SDA可以變化,對于字節接收函數,此時由從機控制SCL變化,當主機發送完數據叢機準備接收時,首先打開SCL=0,保證一位一位接收時SDA可以變化,當有一位在SDA上時,讓SCL=1,保證傳輸到從機這的數據是有效的。請大佬指證
至于最初的字節接收函數開始的SDA=1,和最后的SCL=0不是很懂。
請大佬指教一下,不是很懂,希望大佬能詳細講解下,這里想了很久卡了很久,希望大佬可以對比著這兩個函數講講數據傳輸過程。
/*******************************************************************
字節數據接收函數
函數原型: UCHAR I2C_RcvByte();
功能: 用來接收從器件傳來的數據,并判斷總線錯誤(不發應答信號),
發完后請用應答函數應答從機。
********************************************************************/
unsigned char I2C_RcvByte()
{
unsigned char retc=0,i;
sda=1; /*置數據線為輸入方式*/ (不是很明白???)
for(i=0;i<8;i++)
{
_nop_();
scl=0; /*置時鐘線為低,準備接收數據位*/
_nop_();
_nop_(); /*時鐘低電平周期大于4.7μs*/
_nop_();
_nop_();
_nop_();
scl=1; /*置時鐘線為高使數據線上數據有效*/
_nop_();
_nop_();
retc=retc<<1;
if(sda==1)retc=retc+1; /*讀數據位,接收的數據位放入retc中 */
_nop_();
_nop_();
}
scl=0; (不是很懂???)
_nop_();
_nop_();
return(retc);
}
/*******************************************************************
字節數據發送函數
函數原型: void I2C_SendByte(UCHAR c);
功能: 將數據c發送出去,可以是地址,也可以是數據,發完后等待應答,并對
此狀態位進行操作.(不應答或非應答都使ack=0)
發送數據正常,ack=1; ack=0表示被控器無應答或損壞。
********************************************************************/
void I2C_SendByte(unsigned char c)
{
unsigned char i;
for(i=0;i<8;i++) /*要傳送的數據長度為8位*/
{
if((c<<i)&0x80)sda=1; /*判斷發送位*/
else sda=0;
_nop_();
scl=1; /*置時鐘線為高,通知被控器開始接收數據位*/
_nop_();
_nop_(); /*保證時鐘高電平周期大于4μs*/
_nop_();
_nop_();
_nop_();
scl=0;
}
_nop_();
_nop_();
sda=1; /*8位發送完后釋放數據線,準備接收應答位*/
_nop_();
_nop_();
scl=1;
_nop_();
_nop_();
_nop_();
if(sda==1)ack=0;
else ack=1; /*判斷是否接收到應答信號*/
scl=0;
_nop_();
_nop_();
}
復制代碼
作者:
xiuyueyuan2013
時間:
2018-7-29 03:46
接收函數一開始SDA置一,是讓從機來決定總線電平,不產生線與,使用這個接收函數時,主機是發送了接收指令給從機,從機送出數據,當從機接收到發送指令后,就會把數據的第一位放到總線上,這個時候的SCL就是發送指令的最后一位的結束,就是低電平,所以接收函數的SCL以低電平開始,每產生一個高電平,在其下降沿之后,從機再放第二位數據到總線上。。。好像是這么回事
作者:
wkall
時間:
2018-7-29 15:28
我也想知道,新手學習
作者:
zl2168
時間:
2018-7-29 16:34
看IIC信號傳送要求,理解就行了。
作者:
song未央
時間:
2018-7-29 16:39
xiuyueyuan2013 發表于 2018-7-29 03:46
接收函數一開始SDA置一,是讓從機來決定總線電平,不產生線與,使用這個接收函數時,主機是發送了接收指令 ...
那接收函數的數據位有效性怎么看呢?
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1