• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
  • slider image 488
  • slider image 491
:::


Browsing this Thread:   1 Anonymous Users






Re: I2C通讯,为什么没有接从器件,第九个脉冲是高,程序还能向下走?
#3
初級會員
初級會員


查看用戶資訊
呵呵,谢谢版主,我的程序就参考你说的那个,只是我稍微改动了一下.
如:
本来是:
while(SSPCON2bits.ACKSTAT) ;
我改为:
while(SSPCON2bits.ACKSTAT)
{
i++;
if(i>COE)
{
I2CMErrorState.Wrt=6;
goto _EEROR;
}
}

我感觉对与硬件检测从器件的应答信号(第9个脉冲的SDA)不是很准确,就是似呼有时检测不到.不知道为什么?

我想这个不会影响吧,COE足够大.

發表於: 2006/10/26 17:11
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: I2C通讯,为什么没有接从器件,第九个脉冲是高,程序还能向下走?
#2
版主
版主


查看用戶資訊
還看出來你的問題,參考一下右邊範例程式裡的12-1項有I2C的範例程式。

發表於: 2006/10/26 15:57
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


I2C通讯,为什么没有接从器件,第九个脉冲是高,程序还能向下走?
#1
初級會員
初級會員


查看用戶資訊
各位,哪为有经验的朋友看看.
我用的是P18F2455为主机,在I2C通讯时,怎当我没从器件时,波形是对的,第九个脉冲的SDA为高,但是主I2C器件怎么就没能检测到这个脉冲了,程序还是向下继续走了? 奇怪!有哪位帮我看看.
程序如下:
IdleI2C();
StartI2C();

i=0;
while (!PIR1bits.SSPIF)
{
i++;
if(i>COE)
{
I2CMErrorState.Wrt=1;
goto _EEROR;
}
}
PIR1bits.SSPIF=0;


suc=0;
SSPCON2bits.ACKSTAT=1;
WriteI2C1(ID,suc);
if(suc==0)
{
I2CMErrorState.Wrt=2;
goto _EEROR;
}

while(SSPCON2bits.ACKSTAT) //注意,为什么在没有接器件时,这句话没判断出来? 实在想不通?
{

i++;
if(i>COE)
{
I2CMErrorState.Wrt=3;
goto _EEROR;
}
}

i=0;
while (!PIR1bits.SSPIF)
{
i++;
if(i>COE)
{
I2CMErrorState.Wrt=4;
goto _EEROR;
}
}
PIR1bits.SSPIF=0;

while (length!=0)
{
//SSPCON2bits.ACKSTAT=1;
WriteI2C1(*dptr,suc);
if(suc==0)
{
I2CMErrorState.Wrt=5;
goto _EEROR;
}
i=0;
while(SSPCON2bits.ACKSTAT)
{
i++;
if(i>COE)
{
I2CMErrorState.Wrt=6;
goto _EEROR;
}
}

i=0;
while (!PIR1bits.SSPIF)
{
i++;
if(i>COE)
{
I2CMErrorState.Wrt=7;
goto _EEROR;
}
}
PIR1bits.SSPIF=0;

dptr++; // Point to next byte
length--;
}

StopI2C();

i=0;
while (!PIR1bits.SSPIF)
{
i++;
if(i>COE)
{
I2CMErrorState.Wrt=8;
goto _EEROR;
}
}
PIR1bits.SSPIF=0;


_NORMAL:
SSPCON1=0X00;
SSPCON2=0X00;
SSPSTAT &=0X3f;
PIR1bits.SSPIF=0; // Clear SSPIF
return NOM ;

_EEROR:
SSPCON1=0X00;
SSPCON2=0X00;
SSPSTAT &=0X3f;
PIR1bits.SSPIF=0; // Clear SSPIF

return ER_DEV;

發表於: 2006/10/26 9:43
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------