#define如何运作arduino?

时间:2014-04-16 14:54:40

标签: arduino c-preprocessor

我对Arduino中的#define事情感到困惑。通常我使用#define来选择我想要使用的引脚。 但是here代码有像

这样的行
#define LTC_CS 2
#define LTC_MISO 4
#define LTC_SCK 5

但是在Arduino Uno上我分别连接引脚10,12和13? 这是什么意思?为什么我不连接引脚2,4和5? LTC 2400您可以从图中检查连接。请帮我卡住。 我无法将它连接到Arduino Leonardo。当我将它连接到引脚10,12和13时,它无法正常工作。

1 个答案:

答案 0 :(得分:1)

如果您添加了您链接的代码中的注释,那么它实际上会解释这些#define正在做什么。

#define LTC_CS 2         // LTC2400 Chip Select Pin  on Portb 2
#define LTC_MISO  4      // LTC2400 SDO Select Pin  on Portb 4
#define LTC_SCK  5       // LTC2400 SCK Select Pin  on Portb 5

这似乎解释了对应于Arduino的IO端口B引脚2的物理IO引脚应连接到LTC2400上的CS(片选)引脚,类似地,其他两个引脚连接到LTC2400上的其他命名引脚

这些数字与实际物理引脚数不同的原因是它们没有引用引脚号,它们指的是控制PORTB寄存器中引脚的位的位置。 sbi(PORTB,LTC_CS)表示"将PORTB寄存器的第2位设置为1"并将引脚升至逻辑高电平。

#define本身不是在Arduino上运行的代码;它是preprocessor directive#define在这里做的是定义常量。 #define LTC_CS 2表示"在此代码文件中,当我写LTC_CS时,假装我写了2而不是#34;。稍后,这些宏将用于sbi(PORTB,LTC_CS);之类的代码中。在该函数调用中,您可以改为编写sbi(PORTB,2),并且由于LTC_CS已定义为值2,因此它意味着相同的事情并编译​​为相同的代码。