Мигаем светодиодом

Напишем программу мигания светодиодом. Допустим, что светодиод подключен как штатный светодиод Arduino на выводе Digital 13 -- к выводу PB5, то есть шестой разряд порта B.

Добавим функцию delay_ms, в качестве параметра принимающую число миллисекунд для выполнения задержки:

void delay_ms(uint16_t ms)

{

while (ms) {

_delay_ms(1);

--ms;

}

}

Как видно из кода функции, в ней используется функция библиотеки avr-libc _delay_ms(), выполняющая задержку длительностью в 1 мс. Теперь можно написать код основной программы мигания светодиодом:

#define LED_DDR DDRB

#define LED_PORT PORTB

#define LED_BIT _BV(5)


int main()

{

LED_DDR |= LED_BIT;

while (1) {

LED_PORT |= LED_BIT;

delay_ms(150);

LED_PORT &= ~LED_BIT;

delay_ms(350);

}

}

Добавим в шапку файла инклюды библиотечных заголовков:

#include <inttypes.h>

#include <avr/io.h>

#include <util/delay.h>

Сохраним файл с названием blink.c.

Скомпилируем файл, добавив необходимые для функции _delay_ms() параметры -- макроопределение F_CPU, равное рабочей частоте микроконтроллера в Гц, и ключ -O3, указывающий компилятору использовать оптимизацию третьего уровня:

avr-gcc -o blink.elf -mmcu=atmega16 -DF_CPU=16000000L -O3 blink.c

Автор: Андрей Шаройко <vanyamboe@gmail.com>