Главная > BASCOM AVR > BASCOM AVR – конфигурируем порты МК. Подключаем кнопку.
BASCOM AVR – конфигурируем порты МК. Подключаем кнопку.8 июля 2008. Разместил: administrator |
В предыдущей статье мы рассмотрели простой пример моргания светодиодом и научились пользоваться встроенным программатором в BASCOM AVR. Теперь настало время подробнее ознакомится с настройкой портов микроконтроллера на примере работы с кнопкой. Для этого используем наш контроллер MRC40(ATmega32) с установленным экспериментальным модулем.
Для начала кратко и упрощенно рассмотрим внутреннюю структуру микроконтроллера... Порт имеет три части ...
1) DDR 2) PORT 3) PIN
DDR переключает режимы работы порта - режим INPUT (вход) или OUTPUT (выход). Он осуществляет коммутацию элементов внутри микроконтроллера.
PORT представляет из себя набор из 8 выходных ключей, которые могут выдерживать нагрузку в 50мА. К примеру можно управлять светодиодом и прочими внешними элементами с небольшой нагрузкой.
PIN является набором из 8 входных логических элементов, которые могут быть установлены как 1 или 0. Когда установлен логический уровень "0", то на ножке МК установлено напряжение от 0 до примерно 0.1 вольт, если установлен логический уровень 1, то напряжение на ножке МК от 2,5 вольт до VCC (напряжение питания микроконтроллера, в данном рассматриваемом случае это 5В).
Когда вы выполняете эту строку ...
CONFIG PORTB = OUTPUT
Вы устанавливаете все выводы порта B в режим выхода.
Когда вы выполняете эту строку ...
CONFIG PORTB = INPUT
Вы устанавливаете все выводы порта B в режим входа.
Если вы выполните следующие команды ...
CONFIG PORTB = OUTPUT CONFIG PORTB.2 = INPUT
Тогда только вывод 2 порта B (PORTB.2) установлен в режим входа, остальные установлены на выход.
А теперь попытайтесь считать состояние PORTB.2 … у вас ничего не получится…
Почему?
Потому что PORTB.2 не соединен электрически внутри МК со схемой входа, он может работать только в режиме «выход».
Если вы хотите считать состояние вывода порта, то это надо делать из PINB.2, так как именно через него осуществляется считывание данных в МК. Не смотря на то, что при CONFIG PORTB.2 = INPUT не читается PORTB.2, второй вывод все равно конфигурируется на вход и прочитать его можно через PIND.2.
Теперь рассмотрим все вышесказанное на примере обработки состояния кнопки.
Итак, мы имеем кнопку и светодиод (на экспериментальном модуле для MRC40 все это хозяйство имеется в наличии). Кнопка подключена на ножку 2 порта С (PORTC.2), а светодиод на ножку 0 порта В (PORTB.0). Нам необходимо сделать так, что бы при нажатии на кнопку загорался светодиод.
Пишем программу…
'считываем состояние порта (подключаем кнопку)
'Robozone.su $regfile = "m32def.dat" ' используемый микроконтроллер ATmega32 ( MRC40 с универсальным модулем) $crystal = 16000000 ' частота установленного кварца 16 mHz Config Portb.0 =Output ' конфигурируем вывод 2 порта B на ВЫХОД - подключаем к нему светодиод Config Pinc.2 = Input ' конфигурируем вывод 2 порта С на ВХОД - подключаем к нему кнопку Do ' начало цикла программы If Pinc.2 =0 Then ' УСЛОВИЕ - если на 2-й ножке порта С низкий логический уровень то... Portb.0 = 1 ' устанавливаем на ножке 0 порта В высокий логический уровень (светодиод горит) Else ' в противном случае... Portb.0 = 0 ' устанавливаем на ножке 0 порта В низкий логический уровень (светодиод не горит) End If'конец условия Loop End На будущее при написании программ для МК очень удобно пользоваться командой присвоения имен – ALIAS. С помощью нее различным переменным можно присвоить уникальные имена.
Перепишем программу с использованием команды ALIAS.
'считываем состояние порта (подключаем кнопку)
'RoboZone.SU $regfile = "m32def.dat" ' используемый микроконтроллер ATmega32 (MRC40 с универсальным модулем) $crystal = 16000000 ' частота установленного кварца 16 mHz Config Portb.0 = Output ' конфигурируем вывод 2 порта B на ВЫХОД - подключаем к нему светодиод Config Pinc.2 = Input ' конфигурируем вывод 2 порта С на ВХОД - подключаем к нему кнопку Led Alias Portb.0 ' присваиваем имя LED выводу 0 порта B Button Alias Pinc.2 ' присваиваем имя Button выводу 2 порта С Do ' начало цикла программы If Button = 0 Then ' УСЛОВИЕ - если на 2-й ножке порта С низкий логический уровень то... Led = 1 ' устанавливаем на ножке 0 порта В высокий логический уровень (светодиод горит) Else ' в противном случае... Led = 0 ' устанавливаем на ножке 0 порта В низкий логический уровень (светодиод не горит) End If 'конец условия Loop End Как видите, наглядность кода программы повысилась, это существенно помогает при написании программ с большим количеством различных переменных.
О!… мы забыли про DDR…
Пришло время разобраться и с этим зверем =)
С помощью DDR мы имеем возможность настроить весь порт одной строчкой кода. Как мы писали выше, функцией DDR является переключение режимов работы порта. Внутри микроконтроллера выводы портов пронумерованы в следующем порядке – 76543210. Таким образом, мы можем одним бинарным числом установить состояния PORT/PIN порта.
Посмотрим на пример ниже…
CONFIG PORTB = OUTPUT
При такой конфигурации порта В на всех выводах порта DDR установлен в 1.
CONFIG PORTB = OUTPUT CONFIG PORTB.3 = INPUT CONFIG PORTB.4 = INPUT
Мы постарались описать конфигурирование портов как можно более доступным языком и возможно слишком уж упрощенно, поэтому подробное описание конфигурации портов вы можете скачать с официального сайта BASCOM AVR - http://www.mcselec.com. Вернуться назад |