Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Arduino中的数字写入说明:切换数字引脚的LED_C_Arduino_Hardware_Arduino Uno - Fatal编程技术网

C Arduino中的数字写入说明:切换数字引脚的LED

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_

我试图了解当你打开/关闭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;
}
这是怎么回事


特别是,功能结束时的位旋转位。

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是否有您不理解的特定部分?