打印
[STM8]

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

[复制链接]
1768|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 推荐使用软件模拟的 :)

使用特权

评论回复
5
yewuyi| | 2011-6-11 17:38 | 只看该作者
if(flag2 & (INT8U)I2C_Event)

因为贴的不完整,大概意思应该是两个标志位做&运算,‘这一段是判断I2C_SR2的bit2:0。根据我的理解,如果这三位有任意一位置1’,你为何搞成三个位出来?

使用特权

评论回复
6
guanggaoren| | 2011-6-12 03:10 | 只看该作者
关注.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

3

帖子

1

粉丝