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

論壇索引


Board index » All Posts (ebowang)




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


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

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

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

發表於: 2006/10/26 17:11
頂部


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


各位,哪为有经验的朋友看看.
我用的是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
頂部


Debug: Unable to enter debug mode. 一种原因(Power up timer:enable)
#13
初級會員
初級會員


我遇到过Debug: Unable to enter debug mode.这样的信息,在P18F4520下.配置位为:
1>OSC :HS-PLL ENABLE
2>Power up timer:enable

其他都DISABLE. 此时不能进入Debug模式. 后来我把Power up timer:disable .就可以了,在这里告诉其他朋友,以后遇到这样的问题,看看这个设置.

我想问问,为什么Power up timer:enable 就不能进入了?而我用其他的如P18F452, P18F2455 就可以了!

發表於: 2006/10/25 10:02
頂部


Re: 关于中断使PC指针跑飞的问题,请教
#14
初級會員
初級會員


在C18中关于Temp Data 的使用,我看过了,说实话没怎么看懂,能不能给我列一个例子讲讲啊,谢谢

發表於: 2006/10/18 13:10
頂部


关于中断使PC指针跑飞的问题,请教
#15
初級會員
初級會員


关于中断使PC指针跑飞的问题,请教
各位好!
我在用I2C Slave模式时,只要中断打开PC指针就跑飞,具体情况如下:
用的是P18F452, I2C 工作在Slave 模式, 就用了这一个中断,具体如下:
#pragma code InterruptVectoHigh=0x0008
void InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh
_endasm
}


#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh ()
{
if((PIE1bits.SSPIE)&&(PIR1bits.SSPIF))
{
I2CSlaveHandler();
PIR1bits.SSPIF=0;

}
}
不知道我写的中断是否对的.在I2CSlaveHandler()里,主要就是通过SSPSTAT判断是什么事件就做相应的处理.
问题就是,只要中断启用,PC指针就跑飞了,有时跑到没有调用的程序里,甚至跑到剩余的ROM空间了, 我把上面的程序改到Main()做查询, 就很正常,PC指针也不乱, SCL,SDA,以及其他的监测信号也很正常.具体如下:
main()
{
//
.....
....
while(1)
{
if(PIR1bits.SSPIF)
{
I2CSlaveHandler();
PIR1bits.SSPIF=0;

}
............
..............
}
}

还有这样一个情况须说明,就是I2C 中断会很频繁,有可能一出就要进入中断.

發表於: 2006/10/17 11:25
頂部


Re: 关于中断使PC指针跑飞的问题,请教
#16
初級會員
初級會員


斑竹不在,小弟这个问题已经有一个星期了,痛苦啊,
斑竹能不能指点一下,或者那位知道的也跟我说说啊

發表於: 2006/10/13 13:50
頂部


关于中断使PC指针跑飞的问题,请教
#17
初級會員
初級會員


各位好!
我在用I2C Slave模式时,只要中断打开PC指针就跑飞,具体情况如下:
用的是P18F452, I2C 工作在Slave 模式, 就用了这一个中断,具体如下:
#pragma code InterruptVectoHigh=0x0008
void InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh
_endasm
}


#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh ()
{
if((PIE1bits.SSPIE)&&(PIR1bits.SSPIF))
{
I2CSlaveHandler();
PIR1bits.SSPIF=0;

}
}
不知道我写的中断是否对的.在I2CSlaveHandler()里,主要就是通过SSPSTAT判断是什么事件就做相应的处理.
问题就是,只要中断启用,PC指针就跑飞了,有时跑到没有调用的程序里,甚至跑到剩余的ROM空间了, 我把上面的程序改到Main()做查询, 就很正常,PC指针也不乱, SCL,SDA,以及其他的监测信号也很正常.具体如下:
main()
{
//
.....
....
while(1)
{
if(PIR1bits.SSPIF)
{
I2CSlaveHandler();
PIR1bits.SSPIF=0;

}
............
..............
}
}

还有这样一个情况须说明,就是I2C 中断会很频繁,有可能一出就要进入中断.

發表於: 2006/10/13 9:30
頂部


Re: P18F452振荡器不能用HS_PLL_enable,为什么?
#18
初級會員
初級會員


呵呵,还真的可以啊,谢谢了!
但不知道为什么会这样啊?为什么有的型号的片子又不这样了?

發表於: 2006/9/22 16:03
頂部


P18F452振荡器不能用HS_PLL_enable,为什么?
#19
初級會員
初級會員


请教各位
我的是P18F452,外部晶振荡器是4M,我想用片内的倍频,在选择configbits时,我选的是:HS-PLL enable.我选的这个选项是对的吧? 如果是对的,为什么我测的实际内部的时钟还是4M啊(测试方法:,1,用定时中断;.
2,直接在main()中,while(1){
PORTAbits.RA0=1;
PORTAbits.RA0=0;
PORTAbits.RA0=1;
PORTAbits.RA0=0;
},
我用,XT,HS,HS-PLL enbale 这三个选项时钟怎么都一样啊,(1,2应该是一样的,是对的,但是3就不应该一样啊)

谁能帮帮我啊?

發表於: 2006/9/22 14:00
頂部


Re: 为什么PIC18F2455的USB D+,D- 两个引脚不能当一般的I/O
#20
初級會員
初級會員


谢谢你的回复,把UCFGbits.UTRDIS=1,确实可以当做输入使用,但时,这是好象RC1这个PIN就会自动变成USB外部收发器的一个信号线--UOE,而我这个PIN又有其他的用途,这样的话,可能不行啊.
不知道我的理解对不对?

發表於: 2006/8/31 9:24
頂部



« 1 (2) 3 »



:::

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... ]

教育訓練中心

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