本帖最后由 逍遥派掌门 于 2019-3-20 18:29 编辑
先说题外话:最近发现 STC 的技术支持很忙,而且脾气也很大,而且只能电话咨询。话说,代码的问题,能在电话里说得清楚?
这个疑惑是关于STC8F的IIC从机中断的问题,
先看STCF手册描述:
设置参数:
void iic_init(void)
{
P_SW2=0xB0; // 设置IIC的脚为 P3.2,P3.3
I2CCFG = 0x81;
I2CSLADR = 0x9C; ///////////////////////////// 设备地址是 0x4E,根据手册将设备地址左移1位
I2CSLST = 0x00;
I2CSLCR = 0x78;
}
IIC从机中断:
void I2C_Isr() interrupt 24
{
if (I2CSLST & 0x40) // START
{
I2CSLST &= ~0x40;
}
else if (I2CSLST & 0x20) // RECEIVE
{
I2CSLST &= ~0x20;
iic_receive_buffer[iic_receive_length++]=I2CRXD;
}
else if (I2CSLST & 0x08) // STOP
{
I2CSLST &= ~0x08;
iic_receive_buffer[iic_receive_length++]=0x0D;
}
}
此时串口输出的数据:
显示是没有收到数据。
==========================美丽的分割线=================================
再看改动的设置参数:
void iic_init(void)
{
P_SW2=0xB0; // 设置IIC的脚为 P3.2,P3.3
I2CCFG = 0x81;
I2CSLADR = 0x4E; ///////////////////////////// 设备地址是 0x4E,没有按手册的要求,直接写 0x4E
I2CSLST = 0x00;
I2CSLCR = 0x78;
}
再看串口输出的数据:
这样就正确了!
***********************************疑惑的头晕线*********************************************
什么情况啊?! 按照STC的数据手册写的,居然得不到正确的结果?!!!!!
|