Лабораторная работа №4
ИЗУЧЕНИЕ ОСНОВНЫХ ПРИНЦИПОВ ПРОГРАММИРОВАНИЯ ОПЕРАЦИЙ ВЫВОДА МИКРОКОНТРОЛЛЕРОВ
НА ПРИМЕРЕ УПРАВЛЕНИЯ БЛОКОМ СВЕТОДИОДОВ
Цель работы: изучить архитектуру и принципы программирования микроконтроллера AVR АТMEGA128 на примере разработки программы для управления блоком светодиодов; структурную организацию, состав и возможности компонентов лабораторного макета, освоить пользовательский интерфейс среды программирования C Code Vision AVR.
1 Указания по организации самостоятельной работы
Перед работой необходимо проработать теоретический материал по литературе [1, 2] и конспект лекций, ознакомиться со структурой и принципами функционирования микроконтроллера AVR АТMEGA128, системой команд и основами программирования на языке Assembler. При подготовке к лабораторной работе необходимо составить предварительные варианты листингов программ, указываемых в пунктах практического выполнения работы.
1.1 Принципы программного управления светодиодами, подключенными к внешним выводам портов ввода/вывода микроконтроллера AVR ATMEGA128.
Согласно технической документации на выходных линиях микроконтроллеров AVR при уровне напряжения, соответствующем “логическому нулю”, ток нагрузки составляет порядка 20 мА. Стандартные светодиоды потребляют ток в пределах 320 мА при рабочем напряжении порядка 1,54 В. Это позволяет непосредственно подключать светодиод к выходной линии порта последовательно с ограничивающим ток резистором (см. рисунок 1). Второй вывод цепи необходимо подсоединить к положительному полюсу источника питания (+5 В).
Для управления светодиодом необходимо подавать на соответствующий вывод микроконтроллера уровни “логического нуля” или “логической единицы”. При появлении на выводе микроконтроллера, к которому подключен светодиод, уровня «логического нуля», падение напряжения на светодиоде будет достаточным для свечения. При формировании на соответствующем выводе микроконтроллера напряжения “логической единицы” падения напряжения на светодиоде не будет, и он будет погашен.
Рисунок 1 – Схема подключения светодиода к выходу порта
ввода/вывода микроконтроллера AVR
Для управления уровнями напряжения на выходных линиях микроконтроллера можно применять алгоритмы маскирования или, непосредственно, команды для работы с битами (cbi, sbi). Прямое обращение к регистрам портов ввода/вывода на языке Assembler обеспечивается с помощью команд in и out. Компилятор языка С допускает использование идентификаторов регистров ввода/вывода: DDRX – регистр управления направлением передачи данных, PORTX регистр вывода данных, PINX – регистр ввода данных, где Х – обозначение порта ввода/вывода. Например, программно доступные регистры порта А обозначаются как: DDRA, PORTA, PINA. Если линия порта ввода/вывода Х программируется на вывод, то в соответствующем бите регистра управления направлением передачи данных DDRX должна быть установлена 1, если на ввод – то 0. Рассмотрим примеры:
unsigned char a, b; декларация переменных а и b размером в байт;
DDRB=0b0101110; линии 0, 5 и 7 порта В запрограммированы на вывод данных, остальные (1,2,3,6) – на ввод.
DDRD=0xFF; установка всех линий порта D в режим вывода данных;
а=0х12; присвоить переменной а значение 12h;
PORTD = a; вывести данные (значение переменной а) в порт вывода D.
DDRС=0; установка всех линий порта С в режим ввода данных;
b=PINС; записать данные из порта ввода С в переменную b.
Для работы с отдельными разрядами регистров портов ввода/вывода на языке С можно использовать конструкции: POTTX.NиPINX.N, гдеN– номер бита. Например,
PORTB.2=0; второй бит порта D сбросить в 0;
PORTB.4=1; четвертый бит порта D установить в 1;
PORTD.5=PINF.3; пятому биту порта D присвоить значение третьего
бита порта F;
Наиболее универсальным способом работы с отдельными разрядами регистров портов ввода/вывода является использование масок и поразрядных логических операций.