З цього розділу ми починаємо писати код на мові С. Почнемо ми з портів введення / виводу, які є найбільш критичними аспектами управління. Це такі об’єкти, які беруть введення від користувача і відображають результати вашої програми. Інша частина обробки знаходиться всередині контролера.

Мікроконтролери AVR мають безліч портів введення / виводу з іменами PORTA, PORTB, PORTC і т. Д. Число контактів кожного порту вводу / виводу не більше восьми. Кожен порт має три пов’язаних з ним регістра:

□ DDRx – регістр напрямку передачі даних;

□ PORT * – регістр виведення даних;

□ PIN * – регістр введення даних,

де х – ім’я порту. Кожен з цих трьох регістрів 8-розрядний і призначений для маніпулювання вісьмома бітами порту. Біти цих трьох регістрів (та й взагалі всіх регістрів AVR) нумеруються від 0 (наймолодший біт) до 7 (найстарший біт). DDRxr конфигурирует контакти як вхід або вихід (залежно від значення біта – 1 (вихід) або 0 (вхід)). Регістр PORT * використовується для виводу (якщо контакт оголошений як вихід) або для включення (1) / вимикання (0) навантажувальних резисторів (якщо контакт оголошений як вхід). Регістр PIN * служить для читання значення логічного рівня на контактах (якщо вони оголошені як вхід).

У компіляторі WinAVR GCC всі периферійні регістри AVR доступні через макроси і пишуться великими літерами. Таким чином, наступні еквівалентні рядки коду оголошують всі контакти PORTB виходами:

DDRB = 255; // В десяткового системі

DDRB = Oxff; // В шістнадцятковій системі

DDRB = 0И1111111; // У двійковій системі

Зверніть увагу, що для всіх восьми контактів конкретного порту є тільки один набір регістрів, що створює певну проблему в тому випадку, коли ви хочете працювати з ними окремо.

Наприклад, оператор:

PORTB = 0Ь00000010;

виставляє високий рівень на контакті 1 порту PORTB. Тепер припустимо, що ми хочемо подати логічну 1 на контакт 3 того ж самого порту. Ви можете написати:

PORTB = 0Ь00010000; ,

але при цьому на контакт 1 подається логічний рівень 0 (а ви не збиралися цього робити). Отже, повинен бути спосіб відстеження окремих бітів – і саме тут у гру вступають оператори &, ~, |, л, «І».

Джерело: Гадре, Д., Цікаві проекти на базі мікроконтролерів tinyAVR / Дхананья Гадре, Нігула Мелхотра: Пер. з англ. – СПб .: БХВ-Петербург, 2012. – 352 с .: іл. – (Електроніка)