Урок 2. Порты ввода/вывода


• О проекте
• Обратная связь
• Полезные ссылки
• Полезные программы
• Друзья сайта


Последние комментарии

Аби: Подключение микроконтроллеров к шине RS-485
написано просто о...

Анатолий: Джойстик для денди на stm32
Автору 100500 рес...




           

Библиотека для AVR





AXLIB Генератор





Помощь сайту


				

Урок 2. Порты ввода/вывода



	
Здравствуйте. Как видно из заголовка, сегодня мы рассмотрим порты ввода/вывода МК. Давайте зададимся вопросом, а на кой черт вообще эти порты нам нужны? А нужны они для того, чтобы наш МК помимо выполнения задачи внутри себя, смог об этом поведать миру. Почему я вывел в отдельный урок только порты ввода/вывода? А вот почему: 1. Каждый из портов является 8-ми битным регистром ввода/вывода, способный как выводить, так и получать данные по 1 байту за один раз. Для этих целей на МК предусмотрено по 8 ножек на порт. 2. Каждый порт имеет альтернативные функции. Такие как счетчики, компараторы, входы(АЦП), входы внешнего прерывания, UART и так далее. Вот это и есть, основные причины по которым мне кажется лучше изучить порты более подробно в одном уроке. Давайте сначала рассмотрим порты по прямому назначению, а именно попробуем ввести данные из вне и вывести наружу. Смотрим на рисунок ниже. Рисунок 1. Порт PBx. Что тут я пытаюсь изобразить. А вот что. У МК есть на борту три регистра которые отвечают за работу порта ввода/вывода. Называются они так DDRx, PORTx и PINx. Как видно из рисунка, регистр DDRx управляет направлением порта на вход или на выход. Если установить разряд регистра в "1", то разряд этого порта будет работать на выход. Если сбросить в "0", то разряд будет работать на вход. Запутано, да? Все очень просто, если мы захотим выводить данные, ну к примеру вывести в третий разряд порта В "1", то нам нужно в регистре DDRB присвоить значение "1" в третьем разряде и в регистр PORTB тоже записать "1" в третий разряд. А при записи данных в МК значение регистра DDRx должно быть равно "0". Отсюда: DDRx = 1 выводит данные, DDRx = 0 читает. Если не понятно не расстраивайтесь, когда начнем программить, все встанет на свои места. Как вы уже заметили регистр PORTx нужен для вывода данных, а PINx для ввода. С прямыми обязанностями портов мы разобрались, теперь давайте пробежимся по альтернативным. Ну на мой взгляд один из интересных альтернатив - это минимум два разряда выполняющую функцию UART. UART - это COM-порт. Да да тот самый что мы видим сзади нашего системного блока. Только он не совсем COM. Видите ли что, у COM порта компьютера физические уровни совсем не те что требуются для работы МК. +12 и -12 вольт просто убьют МК. А как же быть? Да все просто. Для этих целей давно были придуманы микросхемы сопряжения уровней. Самая распространенная на мой взгляд - это MAX232. Но мы отошли от сути дела. UART - это универсальный асинхронный приемо/передатчик. Те два разряда о которых я говорил, называются: TXD и RXD. TXD - нужен для передачи данных, а RXD для приема. Мы об этом поговорим чуть позже, а сейчас достаточно лишь того что я рассказал. Следующий альтернативой может быть внешние прерывания. Внешние прерывания очень полезная штука. Что это такое? Ну к примеру у нас работает какой-то узел с таймером или еще с чем, не суть важно. И вот нам требуется узнать о каком-нибудь предельном изменении, которое узел генерит например единицей. То есть всегда висит ноль, а при наступлении события выставляет 1. Можно конечно читать постоянно порт, но при этом остальная программа будет простаивать, так как мы постоянно ждем 1 от узла. Это не хорошо. Проще повесить событие на ножку с внешним прерыванием и заниматься своими делами, а когда узел выдаст нам 1, то МК остановит программу и побежит обрабатывать прерывание. После выполнения обработчика прерывания, МК вернется к основной программе и продолжит ее выполнять с того места где он остановился до обработки прерывания. Вот такая полезная штука внешние прерывания. Так же на борту МК есть прекрасная вещь компаратор. Компаратор это сравниватель. Он сравнивает величины напряжений и в зависимости от того какое из них выше другого, выставляет на выходе либо 1, либо 0. Также как альтернатива, есть АЦП. Правда не во всех МК. Ну про АЦП я рассказывать не буду, тут и так все понятно. Ну вот вроде и все. Это конечно не все функции которые есть в МК, но этого на первое время достаточно. Если что-то не понятно, пишите и я постараюсь ответить на ваши вопросы. <-Назад Вперед ->



Рейтинг@Mail.ru Яндекс.Метрика