基于可配置数据执行逻辑NOT

时间:2018-02-18 09:54:41

标签: avr avr-gcc

我想将我的开关输入类型配置为高电平有效或低电平有效。我写了下面的代码,我知道它不会起作用,因为当我乘以0时,没有任何作用。一种方法是编写代码以使用if语句和句柄检查ACTIVE LOW。但我确信可以有一种简单的方法来基于可配置位执行逻辑NOT操作。如何根据开关输入类型配置readSwitch()函数?

#define ACTIVE_LOW 0
#define ACTIVE_HIGH 1
#define SWITCH_TYPE ACTIVE_LOW

uint8_t readSwitch(uint8_t pinNum)
{
    uint8_t state=0;
    if(SWITCH_TYPE*(PINC&(1<<pinNum)))
    {
        _delay_ms(20);
        if(SWITCH_TYPE*(PINC&(1<<pinNum)))
        {
           state=1;
        }
    }
    return(state);
}

1 个答案:

答案 0 :(得分:0)

基于@AterLux评论和进一步分析,下面的代码可以照顾。

if(!(PINC&(1<<pinNum))^SWITCH_TYPE)