本帖最后由 逍遥派掌门 于 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的数据手册写的,居然得不到正确的结果?!!!!!
|