求助!pic16f1829芯片调试IIC模块,SSP1IF没有置1, 卡死在while(!SS1IF)里面。
之前调试成功过,成功点亮oled屏幕使用。调试了2天突然卡死while(SS1IF)不动了,仿真测了下感觉是SS1IF没有置1,没有成功启动,不知道是什么原因,希望有大佬帮帮忙,不胜感激!
初始化程序如下
void IIC_Init(void)
{
ANSELB = 0;//数字口
TRISB4 = 1;//input
TRISB6 = 1;
GIE =1;//中断允许位
PEIE = 1;//允许外设中断
SSP1CON2bits.GCEN = 0;//禁止广播呼叫
SSP1CON1bits.SSPM = 0x08;//IIC主模式,时钟=Fosc/( 4*(SSPxADD+1) );
SSP1ADD = 0X09; //4M/40=100k, SSPxADD=9;
SSP1CON1bits.SSPEN =1;//使能串口;
delay_us(2);
}
void IIC_Start(void)
{
SSP1CON2bits.SEN = 1;//启动条件使能
// while(SSP1CON2bits.SEN == 1);
while(!SSP1IF);//等待启动结束,如果没启动,反复重启动
SSP1IF = 0;
}
void IIC_Stop(void)
{
SSP1CON2bits.PEN = 1;//停止条件使能
// while(SSP1CON2bits.PEN );//硬件清0;
while(!SSP1IF);
SSP1IF = 0;
}
//The master ACK 0 or 1
void IIC_ACK(unsigned char x)
{
SSP1CON2bits.ACKDT = (x & 0X01);//ACK 0 or 1, 0 is active
SSP1CON2bits.ACKEN = 1;//在SDA和SCL引脚上启动应答顺序,并发送ACKDT数据位,硬件自动清0;
delay_us(10);
while(!SSP1IF);
SSP1IF = 0;
}
void IIC_SendByte(unsigned char u8_data)
{
unsigned int i;
SSP1BUF = u8_data;
delay_us(10);
while(!SSP1IF);
SSP1IF = 0;
} |