[STM8] STM8S的一个程序,求高手解答

[复制链接]
3165|5
 楼主| zl527486598 发表于 2011-6-9 10:19 | 显示全部楼层 |阅读模式
程序如下:
为一个I2C传输检测程序

I2C_Event=(INT16U)0x1701;     /*!< EV5: SB=1 */

ErrorStatus I2C_CheckEvent(I2C_Event_TypeDef I2C_Event)
{
    INT8U flag1 = 0x00;
    INT8U flag2 = 0x00;
    ErrorStatus status = ERROR;
   
    flag1 = I2C_SR1;
    flag2 = I2C_SR2;
   
    if((I2C_Event & (INT16U)0x0F00) == 0x0700)
    {
        if(flag1 & (INT8U)I2C_Event)
        {
            status = SUCCESS;
        }
        else
        {
            status = ERROR;
        }
    }
    else
    {
        if(flag2 & (INT8U)I2C_Event)
        {
            status = SUCCESS;
        }
        else
        {
            status = ERROR;
        }
    }
   
    return status;
}

求教:
1. “if(flag2 & (INT8U)I2C_Event)”,根据上下环境,这一段是判断I2C_SR2的bit2:0。根据我的理解,如果这三位有任意一位置‘1’,应该是status=ERROR才是,还请高手讲解一下此处设为status=SUCCESS的原因;

2. 为什么会用这种判断方法?这种方法的编程思路是怎样的,可否指点一下?

谢谢
 楼主| zl527486598 发表于 2011-6-9 12:02 | 显示全部楼层
自己顶一下,拜托各位高手指点一下啊
 楼主| zl527486598 发表于 2011-6-10 17:28 | 显示全部楼层
问题太幼稚吗?怎么没人反应一下啊
rasar3 发表于 2011-6-11 14:47 | 显示全部楼层
I2C 推荐使用软件模拟的 :)
yewuyi 发表于 2011-6-11 17:38 | 显示全部楼层
if(flag2 & (INT8U)I2C_Event)

因为贴的不完整,大概意思应该是两个标志位做&运算,‘这一段是判断I2C_SR2的bit2:0。根据我的理解,如果这三位有任意一位置1’,你为何搞成三个位出来?
guanggaoren 发表于 2011-6-12 03:10 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

3

帖子

1

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