这个想法是从端口读取任何位。无论如何访问一个已知位很简单,比如
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 标头。
如果它是文字常量,则可以使用宏技巧:
#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;
}
}
只看这个功能
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)
您可以创建一个包含函数中位的局部数组变量,并使用“位”作为该数组的索引。
就像是:
__bit read_bit(const int b)
{
__bit all_bits[8] = {
P0_0,
P0_1,
/* etc. */
P0_7
};
return (b < 8 ? all_bits[b] : 0);
}