C Arduino中的数字写入说明:切换数字引脚的LED
我试图了解当你打开/关闭LED时,“引擎盖下”会发生什么 硬件项目的基本Hello World似乎是车载LED的闪烁。对于Arduino,有一个LED连接到引脚12 我看了一下digitalWrite的源代码:C Arduino中的数字写入说明:切换数字引脚的LED,c,arduino,hardware,arduino-uno,C,Arduino,Hardware,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_
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;
}
这是怎么回事
特别是,功能结束时的位旋转位。AVR设备上的I/O被安排在每个端口8个管脚的端口中。不同的设备具有不同数量的端口,这些端口使用字母命名。端口一次写入8位 例如,要写入PORTA,可以说
PORTA=0xFF代码>,将打开PORTA上的每个pin
现在Arduino平台也有引脚,这些引脚在所有可能的AVR芯片上都进行了编号和标准化。有一个从特定AVR设备引脚到Arduino引脚的映射,digitalWrite()
函数必须找出该映射。查看特定芯片的数据表,查看端口和引脚。例如,在上,Arduino数字管脚0对应于端口D上的0管脚
digitalWrite()
顶部的两个函数确定我们需要哪个AVR端口和pin
所需引脚也可能连接到定时器,定时器使用脉宽调制(PWM)打开和关闭引脚。如果是这样,那么我们需要确保禁用此功能
要在端口上写入pin码,我们使用一些位运算。例如,要将端口B上的插脚4设置为高(Arduino插脚12),我们使用PORTB=PORTB |(1是否有您不理解的特定部分?