本帖最后由 temphc 于 2013-5-17 16:44 编辑
新手做I2C通讯,芯片是PIC16F877A和FM24C16A。
简单程序如下,在Proteus里仿真时可以出现预期的波形,没有问题。但是MPLAB里运行时,在子程序WRITE()的第一个while(RW==1)处卡住。然后尝试断点设在子程序WRITE()的第一句SEN=1处调试,发现单步运行过这一句后SSPCON2还是0x00,语句竟然不能对寄存器修改。似乎SEN=1没有起作用,所以硬件也看不到任何波形。很是奇怪,找资料也调试了好多天还是找不到原因,故向大家请教!谢谢!
#include<pic.h>
void I2CINT(void);
void WRITE(void);
void main()
{ I2CINT();
WRITE();
}
void I2CINT(void)
{ TRISC=0X18; //RC3、RC4设为输入引脚
SSPSTAT=0X00; //使能变化率控制(400khz)
SSPCON=0X38; //SSPEN=1;I2C主动模式
SSPCON2=0X00;
SSPADD=19; //晶振16M,设置每位时间为5us,200khz
}
void WRITE(void)
{
SEN=1;
while(SEN==1);
SSPBUF=0XA0; //Slave Address,write
while(RW==1);
while(SSPIF==0);
while(ACKSTAT==1);
SSPBUF=0X00; //Word Address
while(RW==1);
while(SSPIF==0);
while(ACKSTAT==1);
SSPBUF=0X05; //data
while(RW==1);
while(SSPIF==0);
while(ACKSTAT==1);
PEN=1;
while(PEN==1);
}
|