单片机设置为从接收模式,采用中断方式。第一次接受地址后可以进入中断,第二次就进不去了,大侠帮忙看看下面程序: void I2cInterrupt() interrupt 6 { UCHAR tempSTAT; tempSTAT = I2STAT;
VideoSta = 0; //终止发送VGA测试信号
switch(tempSTAT) { case 0x60: //接收自身SLA+W I2CON = 0xC4; break;
case 0x68: //主控器丢失仲裁 I2CON = 0xC4; break;
case 0x70: //已接收通用调用地址 I2CON = 0xC0; //返回非应答 break;
case 0x78: //主控器丢失仲裁 I2CON = 0xC0; //返回非应答 break;
case 0x80: //接收到数据字节 case 0x88: g_I2cReceive.Buffer[g_I2cReceive.Index] = I2DAT; if(g_I2cReceive.Index < (g_I2cReceive.Buffer[0]-1)) { g_I2cReceive.Index ++; I2CON = 0xC4; //当数据没有接收完毕,发送应答 } else { g_I2cReceive.Index = 0; I2CON = 0xC0; //当数据接收完毕,发送非应答 // I2cDecode(); } break; default: //其他状态下,不做处理 break; }
SI = 0;// 标志位清0
}
|