C-XMPLAB DDRD / DDRB无法分配错误

问题描述 投票:1回答:1

我正在将RFM Hopper发射器的某些Arduino代码转换为C的项目,但是有一些我不完全理解的概念,例如DDRB和DDRD。

例如,我调用这两个方法:

InputSDIO();
OutputSDIO();

在另一个文件中用以下几行声明:

#define InputSDIO() (DDRB &= (~_SDIO))
#define OutputSDIO() (DDRB |= (_SDIO))

它给我以下错误

“错误:表达式不可分配”

此外,此呼叫我也遇到相同的错误,

RX_ANTOut();

在另一个文件中用以下行定义:

#define RX_ANTOut() (DDRD |= (RX_ANT))

正如我说的,代码来自发送器的Arduino项目。如果您需要更多信息,或者我的问题可以更详细,请随时提出。

c arduino translation pic mplab
1个回答
0
投票

DDRBDDRD中,DDRd ata d接线端[[r egister,它确定引脚是输入还是输出(uC是(Atmel AVR),DDRB是端口B的DDR,端口D的DDRDSDIO是通常配置为bitmask的端口配置。运算符&=|=+=-=,...的含义相同,因此a &= b表示a = a & b,因此DDRB &= (~SDIO)等效于DDRB = DDRB & (~SDIO),这是常见的方式bitmasking的~是逻辑取反&是逻辑AND,|是逻辑OR。

[SDIO是一个8位(?这是什么AVR模型?)二进制数字,类似于0b01110010,它掩盖了端口(即端口D)的引脚

https://blog.podkalicki.com/bit-level-operations-bit-flags-and-bit-masks/What is Bit Masking?

在ATmega128RFA1(https://cdn.sparkfun.com/datasheets/Dev/AVR/ATmega128RFA1_Datasheeta.pdf)的数据表中,DDR的功能在第[[14.2.2配置引脚]]的第191页上。
© www.soinside.com 2019 - 2024. All rights reserved.