STC的IIC从机中断地址寄存器的设置疑惑

[复制链接]
 楼主| 逍遥派掌门 发表于 2019-3-20 18:27 | 显示全部楼层 |阅读模式
本帖最后由 逍遥派掌门 于 2019-3-20 18:29 编辑

      先说题外话:最近发现 STC 的技术支持很忙,而且脾气也很大,而且只能电话咨询。话说,代码的问题,能在电话里说得清楚?

这个疑惑是关于STC8F的IIC从机中断的问题,

先看STCF手册描述: 001.png



设置参数:
  1. void iic_init(void)
  2. {
  3. P_SW2=0xB0;     // 设置IIC的脚为  P3.2,P3.3

  4.     I2CCFG = 0x81;      
  5.     I2CSLADR = 0x9C;    /////////////////////////////  设备地址是 0x4E,根据手册将设备地址左移1位
  6.     I2CSLST = 0x00;
  7.     I2CSLCR = 0x78;                  
  8. }
IIC从机中断:

  1. void I2C_Isr() interrupt 24  
  2. {
  3.    if (I2CSLST & 0x40)           // START
  4.     {
  5.         I2CSLST &= ~0x40;      
  6.     }
  7.     else if (I2CSLST & 0x20)    // RECEIVE
  8.     {
  9.         I2CSLST &= ~0x20;                     
  10.         iic_receive_buffer[iic_receive_length++]=I2CRXD;
  11.     }
  12.     else if (I2CSLST & 0x08)    // STOP
  13.     {
  14.         I2CSLST &= ~0x08;     
  15.          iic_receive_buffer[iic_receive_length++]=0x0D;      
  16.     }
  17. }
此时串口输出的数据:
002.png
显示是没有收到数据。

==========================美丽的分割线=================================
再看改动的设置参数:
  1. void iic_init(void)
  2. {
  3. P_SW2=0xB0; // 设置IIC的脚为 P3.2,P3.3

  4. I2CCFG = 0x81;
  5. I2CSLADR = 0x4E;  ///////////////////////////// 设备地址是 0x4E,没有按手册的要求,直接写 0x4E
  6. I2CSLST = 0x00;
  7. I2CSLCR = 0x78;
  8. }
再看串口输出的数据:
003.png

这样就正确了!


***********************************疑惑的头晕线*********************************************


   什么情况啊?! 按照STC的数据手册写的,居然得不到正确的结果?!!!!!


零三翟邢止胃 发表于 2019-3-21 09:38 | 显示全部楼层
感谢楼主分享啊!!!!!
weiyu2019 发表于 2020-2-22 19:21 | 显示全部楼层
强人,佩服死了。呵呵,不错啊
zeshoufx 发表于 2020-6-4 14:09 | 显示全部楼层
谢谢分享,,,,,,

14

主题

528

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

14

主题

528

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部