Как создать Setpin и Clearpin в C для микроконтроллера? - PullRequest
0 голосов
/ 13 октября 2018

Я относительно новичок в программировании микроконтроллеров на 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, светодиод больше не мигает.Кто-нибудь знает, как это исправить?Я использую Eclipse (AVR) на Манджаро, а контроллер - Arduino Nano.

1 Ответ

0 голосов
/ 13 октября 2018

Поскольку 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.

...