Главная > 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 = INPUT
 

 

А при такой конфигурации порта В на всех выводах порта DDR установлен в 0.
 

 

Так что же это нам дает? А вот что!
 
К примеру нам надо сконфигурировать порт B таким образом
 

 

CONFIG PORTB = OUTPUT

CONFIG PORTB.3 = INPUT

CONFIG PORTB.4 = INPUT

CONFIG PORTB.5 = INPUT

То есть – 3,4 и 5 выводы порта настроены на вход, а остальные на выход. С помощью DDR то же самое можно сделать одной строчкой… вот так…
 

DDRB=&B11100011
 

Вот собственно и все =) Правда не сложно?
 

 

Мы постарались описать конфигурирование портов как можно более доступным языком и возможно слишком уж упрощенно, поэтому подробное описание конфигурации портов вы можете скачать с официального сайта BASCOM AVR - http://www.mcselec.com

 

 

 

Исходник демо-прошивки и скомпилированный файл hex вы можете скачать в архиве ниже.
Вы не можете скачивать файлы с нашего сервера


Вернуться назад