Главная » Статьи » Программирование » Программирование в BascomAVR |
Порты ввода/вывода данных. Подключение кнопки к мк.
Мы уже с вами рассмотрели простой пример программы моргания светодиодом в BascomAVR. Теперь давайте разберёмся подробно как настраивать порты ввода/вывода мк более точно. Для примера, попробуем подключить кнопку. Берём наш контроллер+модуль к нему. На нём уже есть 2 кнопки. Задействуем и ту и другую. Опять же написав пару программ.
Рассмотрим структуру мк. Порт имеете три части:
Code Config PORTA.0 = Input 'здесь ножку PA0 мы назначили на вход Config PORTA.0 = Output 'здесь ножку PA0 мы назначили на выход Config PORTA = Input 'здесь все порты PA мы назначили на вход Config PORTA = Output 'здесь все порты PA мы назначили на выход Если выполнить команду так: Code Config PORTA = Output 'здесь все порты PA мы назначили на выход Config PORTA.0 = Input 'здесь ножку PA0 мы назначили на вход Если попробовать считать состояние порта PORTA.0, то ни чего не получится. Потому что PORTA.0 не соединен электрически внутри МК со схемой входа, он может работать только в режиме «выход». Если вы хотите считать состояние вывода порта, то это надо делать из PINA.0, так как именно через него осуществляется считывание данных в МК. Теперь напишем программу. На плате нашего модуля для универсального контроллера воспользуемся кнопкой, которая подключена на PORTC.2 и светодиодом, который подключён на PORTB.0. Code $regfile = "m16def.dat" ' используем ATmega16 (с универсальным модулем) $crystal = 16000000 ' частота установленного кварца 16 mHz Config Portb.0 = Output : Красный0 Alias Portb.0 ' назначаем вывод PB0 на выход и присваиваем имя Красный0 Config Portb.1 = Output : Красный1 Alias Portb.1 ' назначаем вывод PB1 на выход и присваиваем имя Красный1 Config Portb.2 = Output : Красный2 Alias Portb.2 ' назначаем вывод PB2 на выход и присваиваем имя Красный2 Config Pinc.2 = Input : Кнопка0 Alias Pinc.2 ' назначаем вывод PC2 на вход и присваиваем имя Кнопка0 Config Pinc.3 = Input : Кнопка1 Alias Pinc.3 ' назначаем вывод PC3 на вход и присваиваем имя Кнопка1 Do ' начало цикла программы If Кнопка0 = 0 Then ' УСЛОВИЕ - если на 2-й ножке порта С низкий логический уровень то... Красный0 = 1 ' устанавливаем на ножке 0 порта В высокий логический уровень (светодиод горит) Else ' в противном случае... Красный0 = 0 ' устанавливаем на ножке 0 порта В низкий логический уровень (светодиод не горит) End If 'конец условия Loop ' конец цикла программы End ' конец программы Теперь давайте напишем ещё одну программу. По нажатию кнопки все светодиоды начнут по очереди загораться, потом гаснуть. Остановить это можно с помощью 2 кнопки, удерживая её в нажатом состояние. Code $regfile = "m16def.dat" ' используем ATmega16 (с универсальным модулем) $crystal = 16000000 ' частота установленного кварца 16 mHz Config Portb.0 = Output : Красный0 Alias Portb.0 ' назначаем вывод PB0 на выход и присваиваем имя Красный0 Config Portb.1 = Output : Красный1 Alias Portb.1 ' назначаем вывод PB1 на выход и присваиваем имя Красный1 Config Portb.2 = Output : Красный2 Alias Portb.2 ' назначаем вывод PB2 на выход и присваиваем имя Красный2 Config Pinc.2 = Input : Кнопка0 Alias Pinc.2 ' назначаем вывод PC2 на выход и присваиваем имя Кнопка0 Config Pinc.3 = Input : Кнопка1 Alias Pinc.3 ' назначаем вывод PC3 на выход и присваиваем имя Кнопка1 Dim T As Integer ' объявляем переменную T T = 250 ' Назначаем число для переменной Do ' начало основного цикла программы If Кнопка0 = 0 Then : Gosub 1 : End If 'если подаётся логический 0, то переходим на метку 1 Loop ' конец основного цикла программы 1: 'метка Do 'начало цикла с условием Waitms T : Красный0 = 1 Waitms T : Красный1 = 1 Waitms T : Красный2 = 1 Waitms T : Красный0 = 0 Waitms T : Красный1 = 0 Waitms T : Красный2 = 0 Loop Until Кнопка1 = 0 'конец цикла с условием. Если удерживается кнопка1, то заканчиваем цикл программы, иначе продолжаем выполнять этот цикл Return 'возврат к основному циклу программы End ' конец программы И теперь последнее о чём нужно тоже упомянуть. Предположим порты нужно назначить следующим образом: Code Config Portb.0 = Output ' назначаем вывод PB0 на вход Config Portb.1 = Output ' назначаем вывод PB1 на выход Config Portb.2 = Output ' назначаем вывод PB2 на выход Config Portb.3 = Output ' назначаем вывод PB3 на выход Config Portb.4 = Output ' назначаем вывод PB4 на вход Config Portb.5 = Output ' назначаем вывод PB5 на вход Config Portb.6 = Output ' назначаем вывод PB6 на выход Config Portb.7 = Output ' назначаем вывод PB7 на вход То есть у нас получается 4 порта на вход и 4 порта на выход, но это не удобно, куда проще сделать тоже самое так: Code DDRB = &B01110010 0 - это вход 1 - это выход Тем самым мы сделали тоже самое в одну строчку. Исходники и прошивки для 2 примеров скачать можно по ссылке. Удачи! Ссылка на предыдущую статью. Ссылка на следующую статью. Источник: www.enore.ru | |
Категория: Программирование в BascomAVR | Добавил: Space (23.01.2011) | | |
Просмотров: 1987 | |
Всего комментариев: 0 | |