Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Микроконтроллеры PIC фирмы Microchip для начинающих выпуск №11


РАССЫЛКА Микроконтроллеры PIC фирмы Microchip для начинающих
Ведущий: Алексей (pont_a@mail.ru)


Доброго времени суток, дамы и господа!!

Сегодня в выпуске начнем рассматривать периферию микроконтроллеров серии PIC18 на базе микроконтроллера PIC18F452! Первыми будем рассматривать порты ввода/вывода. 

В прошлом выпуске Александр выдал Вам немного знаний по аппаратной части.  На схеме Вы видели, что все пины микроконтроллера сгруппированы. Вот эти группы пинов и называются портами ввода/вывода. В микроконтроллерах PIC принято, что порты перечисляются с помощью букв латинского алфавита. Например: PORTA, PORTB…, PORTE. В порт может быть сгруппировано различное количество пинов. Их количество в портах зависит от типа микроконтроллера. Также, большая часть пинов микроконтроллеров имеет альтернативные функции (стандартным считается, что пин используется либо, как дискретный вход, либо, как дискретный выход).
Теперь рассмотрим регистры управления любого порта, которые доступны программе.
Порты микроконтроллеров серии PIC18 управляются с использованием 3-х регистров: PORTx, TRISx, LATx. Где x – буква порта ввода/вывода. Регистр PORTx используется обычно для чтения входных дискретных сигналов. Можно использовать и для записи, но этого я не рекомендую делать. Почему? Потому что, команды, записывающие  в регистр PORTx данные, используют механизм RMW (Read Modify Write). Обычно, это команды установки битов. Т.е. чтобы записать бит в порт, сначала микроконтроллер читает весь порт, потом в прочитанном значении модифицирует бит, а потом обратно, весь порт записывает. Данный механизм может сыграть «плохую шутку». Если у Вас на каком - либо из битов порта висит большая токопотребляющая нагрузка, то есть вероятность прочитать ноль по этому биту, хотя Вы записали ранее на выход бита единицу. Тем самым после модификации, обратно может записаться в тот бит ноль. А в программе Вы будете считать, что на выходе у Вас единица. Чтобы избежать этого, добавлен регистр  LATx. Запись в него не вызывает чтение физических уровней порта. Т.е. чтобы изменить значения на выводах порта, необходимо использовать регистр LATx. Регистр TRISx задает направление пинов порта. Если бит этого регистра установлен в единицу, то данный пин будет сконфигурирован, как вход. Если ноль – как выход.
Например:
            CLRF             LATD, ab
            MOVLW       0x0F
            MOVWF       TRISD, ab
Пины порта D  будут  сконфигурированы следующим образом: пины 0-3 – входы; пины 4-7 – выходы. И на выходах появятся нули.  Обязательно, сначала формируйте значения выходов, а потом конфигурируйте сами пины, чтобы не появилось мгновенных неверных значений на выходах.
Внимание! Очень распространенная ошибка! При конфигурации портов ввода/вывода необходимо учитывать, что при включении питания или после сброса по default выставляются часть пинов, как аналоговые входы! Если Вы не используете аналоговую периферию (например, АЦП), то необходимо программно установить в регистре управления АЦП  ADCON1 значение, которое переконфигурирует пины на цифровые входы/выходы.
Например:
            MOVLW       0x07
            MOVWF       ADCON1, ab
 Все пины переконфигурируются на цифровые. Учтите, что для каждого типа микроконтроллеров регистр ADCON1 имеет разную структуру битов настройки.        
Теперь открываем datasheet на наш микроконтроллер PIC18F452, находим пункт  9.0 I/O PORTS и начинаем читать.  Альтернативные функции трогать пока не будем, по ходу рассылки мы их все рассмотрим.
Первым идет PORTA.  Как видим, он состоит из 6-ти битов RA0-RA6. Бит RA4 имеет выход с открытым коллектором (open drain). Т.е., на данном пине выходную единицу придется формировать аппаратно, подтяжкой резистором на шину питания +5В.
Порты PORTB, PORTC, PORTD имеют по восемь пинов. Для входов PORTB можно использовать дополнительную подтяжку ~50кОм. Подключается она сбросом в ноль бита  RBPU регистра INTCON2. Обычно, эту подтяжку используют для организации на PORTB клавиатуры. И последний порт микроконтроллера PIC18F452 – PORTE. Он имеет 3 пина.  

Пока все! Дальше будем рассматривать периферийные модули, которые и будут накладываться на пины наших портов. Наложение и есть альтернативные функции пинов. Потому что, периферийные модули будут иметь больший приоритет. И если модуль включен, то он будет забирать под себя часть строго определенных для него пинов.

По Вашим просьбам в следующем выпуске будем рассматривать таймер TMR0 микроконтроллера PIC18F452!

Полный архив рассылки Вы можете прочитать на нашем сайте!  При любом опубликовании текстов данной рассылки ссылка на сайт http://www.2aplusa.ru обязательна!

Теперь на нашем сайте начал работать форум, где Вы можете общаться на интересующие Вас вопросы по поводу разработки собственных устройств или задавать вопросы по поводу рассылки!  

Желаю Вам удачи! До скорой встречи!


С уважением, Алексей pont_a@mail.ru
Cайт разработчиков 2AplusA http://2aplusa.ru


В избранное