8051控制器端口位读/写

时间:2012-10-04 08:09:40

标签: c port bit 8051 sdcc

想法是从端口读取任何位。 无论如何访问一个已知位很简单,比如

P0_0 <-- gets bit 0 from port 0

但是如果我需要通过函数访问位y?

read_bit(__bit y){
    return P0_y; // <-- just an idea but its not right becouse of syntax.
}

使用SDCC编程和8051标题。

3 个答案:

答案 0 :(得分:1)

如果它是文字常量,你可以使用宏技巧:

#define READ_P0_BIT(BIT) (P0_ ## BIT)
unsigned x = READ_P0_BIT(1);

如果它不是文字常量,你可以这样做:

int readP0bit(int bitNo)
{
    switch (bitNo)
    {
    case 0: return P0_0;
    case 1: return P0_1;
    // ...
    case 7: return P0_7;
    default: return 0;
    }
}

答案 1 :(得分:0)

您可以创建一个包含函数位的本地数组变量,并使用“bit”作为此数组的索引。

类似的东西:

__bit read_bit(const int b)
{
    __bit all_bits[8] = {
        P0_0,
        P0_1,
        /* etc. */
        P0_7
    };

    return (b < 8 ? all_bits[b] : 0);
}

答案 2 :(得分:0)

只看到这个功能

char chek_bit_p0(unsigned char chk_bit){
 if((P0>>chk_bit) & 1)
    return 1;
 else 
    return 0;
}

或仅仅通过下面的宏(首选方式)

#define chek_bit_p0(x) (((P0>>x)&1)&&1)