AVR для начинающих.Урок 3.Порты ввода/вывода.

Автор: | 04.07.2016

Итак, продолжим знакомство с микроконтроллерами!

Сегодня мы рассмотрим такую важную тему как порты ввода/вывода. С ними мы столкнулись уже в предыдущем уроке, когда зажигали светодиод. Взаимодействие микроконтроллера с внешними устройствами, происходит именно благодаря портам ввода/вывода (Порты I/O(Input/Output)).

Порт микроконтроллера AVR представляет собой достаточно запутанный для новичка механизм. Однако сейчас мы не будем досконально разбирать его устройство, а лишь получим общее представление его работы. В данный момент нас интересует его программная реализация, которую мы рассмотрим в данном уроке, а к техническому устройству порта мы вернемся позднее.

I/O порт микроконтроллера AVR в программном виде представляет из себя 3 регистра, которые непосредственно отвечают за его работу. Так как микроконтроллеры AVR 8 разрядные, ножки контроллера для удобства были сгруппированы в порты по 8 штук.

atmega8_pinout_lrg

То есть, ножки контроллера PB0-PB7 являются портом B микроконтроллера AtMega8. Точно так же с выводами PD0-PD7, которые являются портом D.

Каждой ножке соответствует бит в управляющих регистрах. То есть ножке под номером 4 (Например PB4) соответствует 4 бит в регистрах PORTB,DDRB,PINB.

Каждая ножка порта может быть как портом ввода, так и портом вывода. То есть, мы можем либо управлять чем либо (например зажигать светодиод), либо принимать данные с чего либо (например обрабатывать нажатие кнопки).

За работу порта отвечает 3 регистра:

  • PORTx
  • PINx
  • DDRx

Каждый из данных регистров 8 разрядный. То есть, каждый бит данного регистра регулирует работу одной ножки контроллера. Рассмотрим каждый из данных регистров подробнее.

Рассматривать будем на примере порта B микроконтроллера AtMega8.

DDRB:

Каждый бит регистра DDRB отвечает за режим работы соответствующей ножки (PB0-PB7). Записав 0 в соответствующий бит, мы настраиваем соответствующую ножку в режим входа. То есть, теперь мы сможем считывать с неё входящие с внешних устройств данные. Записав в соответствующий бит 1 мы установим ножку в режим вывода, что позволит нам управлять чем либо (Например зажигать светодиод).

Читайте также  AVR для начинающих. Урок 12.SPI.Регистры.

Пример кода на C(Настройка ножки PD4 на вывод):

Пример кода на ASM(Настройка ножки PD4 на вывод):

PORTB:

При настройке соответствующего вывода на вывод, регистр PORTB управляет состоянием данной ножки. То есть установив 1 в соответствующем бите регистра, мы подадим логическую 1 на вывод контроллера (Около +5 вольт), тем самым мы, например, зажигаем светодиод, подав на него +5v. Установив 0 в соответствующем бите регистра PORTB, мы установим логический 0 на выводе контроллера (Около 0 вольт), тем самым, например, мы гасим светодиод, подав на него около 0v, что прекратит протекание электрического тока через него.

Пример кода на C(установим ножку PB3 в состояние вывода и подадим на нее логическую единицу):

Пример кода на Ассемблере(установим ножку PB3 в состояние вывода и подадим на нее логическую единицу):

PINB:

Каждый бит регистра PINB, показывает текущее состояние соответствующей ножки контроллера, при её настройке в состояние ввода. Данный регистр, в отличии от двух предыдущих работает только в режиме чтения. То есть записать что либо в него мы не можем, однако считать состояние текущей ножки контроллера не составит труда! При подаче логической единицы на соответствующую ножку контроллера(которая разумеется работает в режиме ввода), в соответствующий бит данного регистра будет записана единица. Наоборот, при подаче логического нуля, в соответствующий бит будет записан 0.

Следующий пример поможет Вам лучше понять описанное выше:

Читайте также  AVR для начинающих. Урок 8. АЦП.

Соберем следующую цепь

Номинал резистора R1, вы уже можете рассчитать самостоятельно!

Создадим в Atmel Studio новый проект на удобном Вам языке.

С:

ASSEMBLER:

При нажатии кнопки S1, на ножку PB1 контроллера AtMega8, подается логический ноль. В бесконечном цикле мы проверяем состояние регистра PINB, и если бит PB1 равен 0, то зажигаем светодиод. В противном случае, выключаем светодиод HL1.

Читайте также  COM порт Windows. SerialPort. C#.Продолжение.

Надеюсь что комментарии помогут Вам лучше разобраться в работе данных регистров.

Если у Вас ещё остались вопросы, оставляйте их в комментариях.

Спасибо за внимание!

Администрация сайта MKPROG.RU

Другие уроки цикла.


Копирование, воспроизведение, цитирование данного материала или его частей разрешено только с письменного разрешения администрации сайта MKPROG.RU.

AVR для начинающих.Урок 3.Порты ввода/вывода.: 4 комментария

  1. саша

    ошибка в коде на с
    «if((PINB&(1<<PB1))==) //Если на PB1 логический ноль"

    к чему равно условие?

  2. Виктор

    Если я правильно понял прочитанное, то в статье небольшая опечатка.
    ———————-
    Пример кода на ASM(Настройка ножки PD4 на вывод):
    Start:
    sbi DDRB,4
    ———————-
    Получается, что запись sbi DDRB,4 нужно записать, как sbi DDRD,4

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *