如何从ARM的32位端口的第15引脚获取值?

Ale*_*der 2 c embedded microcontroller arm

我正在使用IC,DS1620来读取单行上的1位串行数据.我需要使用ARM微控制器(LPC2378)的一个端口读取这些数据.ARM端口为32位.如何将此值转换为1位变量?

编辑:换句话说,我需要直接引用端口引脚.

Eva*_*ran 5

没有1位变量,但你可以隔离一个特定的位,例如:

uint32_t original_value = whatever();
uint32_t bit15 = (original_value >> 15) & 1; /*bit15 now contains either a 1 or a 0 representing the 15th bit */
Run Code Online (Sandbox Code Playgroud)

注意:我不知道你是否计算从0或1开始的位数,所以>> 15可能会被一个关闭,但你明白了.

另一种选择是使用位字段,但这会变得混乱,除非值中的每一位都以某种方式有用,否则IMO是不值得的.如果你只想要一个或两个位,那么转移和屏蔽是最佳选择.

总的来说,这篇文章可能对您有用.

  • 根据代码的其余部分,您可能不需要转换.你可以改为:uint32_t bit15 =(original_value)&(1 << 15); 注意:(1 << 15)仅在编译时计算一次. (3认同)