如何在 C 语言中为微控制器创建 Setpin 和 Clearpin?

How to create Setpin and Clearpin in C for microcontroller?

我在用 C 编写 µC 方面比较陌生,之前一直使用 arduino IDE。我想创建一个设置和清除引脚的函数。我试过了

#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 16000000UL

void set_led(int poort,int pin){
    poort |= (1<<pin);
    //PORTB |= (1<<pin); <-- this works
}
void clear_led(int poort,int pin){
    poort &= ~(1<<pin);

}

int main(void)
{
    DDRD = 0xff;
    PORTD = 0x00;
    while(1)
    {
        set_led(PORTD,PD7);
        _delay_ms(500);
        clear_led(PORTD,PD7);
        _delay_ms(500);
    }
}

pin 变量正常工作,但是当我实现 poort 变量时,led 不再闪烁。有人知道如何解决这个问题吗? 我在 manjaro 上使用 eclipse(AVR),控制器是 arduino nano。

因为 C 是按值传递的,所以只改变了局部变量。

您可以使用宏:

#define SET_LED(POORT, PIN) ((POORT) |= (1<<(PIN)))

或将变量作为指针传递:

void set_led(volatile uint8_t *poort, int pin)
{
    *poort |= (1<<pin);
}

并用 set_led(&port, pin); 来调用它。

类型int可能是错误的,应该是volatile uint8_t