【发布时间】:2014-12-16 03:05:51
【问题描述】:
我试图了解当您打开/关闭Arduino Uno 上的 LED 时“幕后”会发生什么。
带有硬件项目的基本 Hello World 似乎是板载 LED 闪烁。在 Arduino 的情况下,有一个 LED 连接到引脚 12。
我看了一下digitalWrite的源代码:
void digitalWrite(uint8_t pin, uint8_t val)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *out;
if (port == NOT_A_PIN)
return;
// If the pin that support PWM output, we need to turn it off
// before doing a digital write.
if (timer != NOT_ON_TIMER)
turnOffPWM(timer);
out = portOutputRegister(port);
uint8_t oldSREG = SREG;
cli();
if (val == LOW) {
*out &= ~bit;
}
else {
*out |= bit;
}
SREG = oldSREG;
}
这是怎么回事?
特别是函数末尾的位旋转位。
【问题讨论】:
-
你有什么不明白的部分吗?
标签: c arduino hardware arduino-uno