- Библиотеки
- Операторы
- Sketch
- Управляющие операторы
- Синтаксис
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Указатели доступа
- Битовые операторы
- Составные операторы
- Данные
- Типы данных
- Преобразование типов данных
- Область видимости переменных и квалификаторы
- Утилиты
- Функции
- Цифровой ввод/вывод
- Аналоговый вход/выход
- Расширенный ввод/вывод
- Время
- Математические функции
- Тригонометрические функции
- Символы
- Случайные числа
- Биты и байты
- Внешние Прерывания
- Прерывания
- Функции передачи данных
- Управление портами через регистры ATmega
- Функции
Управление портами через регистры ATmega
Использование встроенных функций Arduino для работы с выводами очень удобно. Однако за удобство приходится платить быстродействием. В большинстве программ это не принципиально, но иногда имеет решающее значение. В таких случаях необходимо управлять портами Arduino напрямую через регистры ATmega. При этом мы не только увеличиваем быстродействие, но еще и уменьшаем размер программы.
Рассмотрим таблицу соответствия выводов Arduino портам микроконтроллера ATmega 168
Что мы видим:
PORTD — цифровые выводы Arduino от D0-D7;
PORTB — цифровые выводы Arduino от D8-D13;
PORTC — аналоговые выводы Arduino A0-A5 (А6-А7 доступны в Arduino Mini, Nano).
Для установки выводов и чтения записи данных используются следующие команды:
DDRD, DDRB, DDRC — для установки назначения выводов (направления передачи данных) соответствующих портов (0 — input, 1 — output);
PORTD, PORTB, PORTC — регистр установки данных на выводах соответствующего порта;
PIND, PINB, PINC — считывание данных всех контактов соответствующего порта.
Используя эти команды, можно заменить стандартные функции Arduino для управления выводами. Например:
// pinMode(13,INPUT)
DDRB = DDRB & B11011111
// pinMode(5,OUTPUT)
DDRD = DDRD | B00100000
// digitalWrite(7,HIGH)
PORTB = PORTB | B10000000
// digitalRead(10,HIGH)
PINB = (PINB & B00000100)>>2