Методические указания для практических занятий по дисциплине мдк. 02. 01
Скачать 7.37 Mb.
|
Практическая часть. 1. Дополнить программу, приведённую на рисунке, необходимыми директивами и командами. В подпрограмму обработки прерывания по таймеру-счётчику Т/С0 поместить команду загрузки числа в РОН. Выполнить программу в пошаговом режиме. Проследить изменение содержимого стека при обработке прерывания, а также установку и сброс бита I общего разрешения прерываний и флага TOV0 прерывания по таймеру-счётчику T/C0. Для контроля содержимого регистров таймера-счётчика T/C0 раскрыть пункт TIMER_COUNTER_0 объекта I/O ATMEGA8535 закладки I/O окна Workspace. 320 2. Исследовать процедуру обработки вложенных прерываний, внеся соответствующие изменения в программу. В подпрограмму обработки прерывания по внешнему прерыванию INT0 поместить команду очистки РОН, использующегося в подпрограмме обработки прерывания по таймеру-счётчику Т/С0. В симуляторе после перехода в подпрограмму обработки прерывания по таймеру-счётчику Т/С0 смоделировать поступление сигнала внешнего прерывания INT0. Для этого в симуляторе установить флаг INTF0 в регистре GIFR группы EXTERNAL_INTERRUPT объекта I/O ATMEGA8535 закладки I/O окна Workspace. 3. Проследить изменение содержимого стека при обработке вложенных прерываний. 4. Оформить отчет. Отчёт должен содержать: титульный лист с указанием номера и названия работы, номера группы и фамилий выполнивших работу; цель работы; листинги трансляции программ в соответствии с заданием. Контрольные вопросы. 1. Назначение прерываний. 2. Типы прерываний. 3. Средства управления прерываниями. 4. Операция маскирования прерываний. 5. Этапы процедуры прерывания. 6. Реализация прерываний в AVR-микроконтроллерах. Практическая работа №72. Элементарные приемы программирования (обработка многобайтных данных). Цель работы: ознакомление с периферийными устройствами AVR-микроконтроллера; изучение назначения и возможностей применения портов ввода- вывода при реализации типичных процедур управления и обмена данными. Основные сведения. 321 В состав микроконтроллера помимо процессорного ядра и блоков памяти входят периферийные устройства, обеспечивающие различные дополнительные функции. К внутренней периферии относятся аналого-цифровые и цифро- аналоговые преобразователи, порты, таймеры, контроллеры интерфейсов и другие устройства. Кроме внутренних периферийных устройств, дополнительные функции могут обеспечиваться подключением к микроконтроллеру внешних периферийных устройств, выполненных в виде самостоятельных микросхем. Внешняя периферия представлена различными запоминающими устройствами, внешними аналого- цифровыми и цифро-аналоговыми преобразователями, средствами сопряжения с каналом связи, устройствами отладки и рядом других. Одними из наиболее важных внутренних периферийных устройств микроконтроллера являются порты ввода-вывода (I/O port), представляющие собой средства информационного обмена с внешними устройствами. В зависимости от способа обмена данными порты ввода- вывода бывают последовательными и параллельными. Последовательный порт имеет одноразрядный формат и передаёт (принимает) информацию по принципу «один бит за другим». Параллельный порт имеет формат в несколько разрядов (обычно 8, 16 или 32), которые передаются или принимаются одновременно. По виду синхронизации (под синхронизацией в данном случае понимается временнόе согласование работы устройств передачи и приёма информации) порты делятся на синхронные и асин- хронные. Синхронными называют порты, передача и приём информации с помощью которых осуществляется с жёсткой временнόй синхронизацией. Асинхронными называют порты, которые передают (принимают) данные с различной скоростью. С точки зрения возможностей использования различают специализированные и универсальные порты. Специализированные порты предназначены для реализации определённых интерфейсов обмена данными (RS232/422/485, USB, SCI, SPI, I 2 C, CAN и др.). Интерфейсы типа RS232/422/485 обеспечиваются универсальными асинхронными приёмопере- датчиками – УАПП (UART – Universal Asinchronous Receiver-Transmitter). Синхронные интерфейсы реализуются универсальными синхронно-асинхронными приёмопередатчиками – УАПП (UART – Universal Sinchonous-Asinchronous Receiver-Transmitter). Универсальные порты позволяют программно управлять основными параметрами процесса обмена информацией (временными характеристиками, форматом данных и др.). Порты ввода-вывода могут использоваться для обмена информацией в различных режимах: программно-управляемого обмена, обмена по прерываниям и обмена в режиме прямого доступа к памяти (ПДП). При программно- управляемом обмене (program-driven I/O) все операции ввода-вывода выполня- ются в соответствии с заложенной программой с проверкой готовности внешнего устройства к обмену. Обмен по прерываниям (interrupt-driven I/O) осуществляется с использованием механизма прерываний. Обмен в режиме ПДП (Direct Memory Access – DMA) осуществляется с помощью аппаратных средств независимо от процессора, который в данном случае только инициирует процесс ввода-вывода и управляет соответствующими ресурсами. Ввод и вывод данных с помощью портов, а также управление портами осуществляется посредством чтения и записи специальных регистров или ячеек памяти. Доступ к другим периферийным устройствам производится аналогично. Периферийные устройства могут иметь собственное адресное пространство или для них выделяется часть адресов пространства памяти. В последнем случае говорят о вводе-выводе, отображённом на память (memory-mapped I/O). Порты ввода-вывода AVR-микроконтроллеров. В AVR-микроконтроллерах в зависимости от типа имеется от двух до шести универсальных двунаправленных портов ввода- вывода (порты A…F), содержащих семь или восемь сигнальных линий, которые соединены с соответствующими выводами БИС микроконтроллера. Например, в микроконтроллере ATmega8535 имеется четыре 8-разрядных порта A, B, C и D. Сигнальные линии порта А обозначаются РА0…РА7, порта В – РВ0…РВ7 и т. д. С каждым портом связаны три регистра ввода-вывода: регистр DDRx направления передачи данных, регистр PORTx данных порта и регистр PINx вы- водов порта, где х – имя порта (A…F). Содержимое разрядов регистра DDRx определяет направление передачи данных по каждой сигнальной линии порта (0 – порт 322 используется для ввода данных, 1 – для вывода данных). Регистр PORTx позволяет задавать состояние сигнальных линий порта при выводе информации; регистр PINx – считывать состояние сигнальных линий порта при вводе информации. С помощью указанных регистров реализуется требуемый протокол обмена данными (протокол – совокупность правил передачи кодированной информации). Основными процедурами при реализации некоторого протокола являются операции инициализации порта, вывода данных в порт, ввода данных из порта, а также формирования временных задержек. Инициализация порта состоит в назначении направления обмена данными по сигнальным линиям порта. Например, если сигнальные линии PА0, PА2, PА4, PА5 порта А служат для вывода данных, а сигнальные линии PА1, PА3, PА6, PА7 – для ввода данных, инициализация порта может быть произведена следующим образом: ldi R16, 0b00110101 out DDRA, R16 Вывод данных в порт производится путём записи значений в регистр PORTx, например: ldi R16, 0b10011101 out PORTA, R16 ; вывод содержимого регистра R16 в порт А Для изменения состояния только одного разряда порта ввода-вывода удоб- но использовать команды установки SBI (Set Bit in I/O Register) и сброса CBI (Clear Bit in I/O Register) бита в регистре ввода-вывода. Ввод данных из порта производится путём чтения содержимого регистра PINx выводов порта, например: in R16, PINA ; считывание состояния порта А в регистр R16 Формирование временных задержек необходимо для обеспечения требуемых временных соотношений при обмене данными. Временные задержки могут быть созданы включением в программу последовательностей пустых команд NOP, методом программных циклов и с помощью таймера. Первый способ служит для формирования коротких задержек (от долей до единиц микросекунд), второй и третий – более длительных задержек (до сотен миллисекунд). При реализации временной задержки методом программных циклов в не- который РОН загружается число, которое затем на каждом проходе цикла уменьшается на единицу. Так продолжается до тех пор, пока содержимое реги- стра не станет равным нулю, что является условием выхода из цикла. Время задержки при этом определяется числом, загруженным в РОН, и временем выполнения команд, образующих цикл. При необходимости формирования задержек бόльшей длительности организуют вложенные циклы. Точная подстройка задержки достигается подбором значений чисел, заносимых в РОН, и добавлением команд NOP. Для удобства использования цикл формирования за- держки целесообразно оформлять в виде подпрограммы. Пример подпрограммы, реализующей задержку на 10 мс при тактовой частоте 4 МГц приведён на рисунке ниже. Для данного примера с учётом затрат времени на вызов подпрограммы (3 такта) и возврат из неё (4 такта) общая длительность задержки составит: 503 ⋅0,25 + 2⋅0,25 + ((3⋅0,25⋅239 + 2⋅0,25) + 3⋅0,25) + ((3⋅0,25⋅255 + 2⋅0,25) + + 3⋅0,25)⋅50 + ((3 ⋅0,25⋅255 + 2⋅0,25) + 2⋅0,25 + 4⋅0,25 = 10000 мкс = 10 мс. Наиболее простой интерфейс обмена данными организуется для опроса двоичных датчиков и управления релейными элементами. Опрос двоичных датчиков представляет собой процедуру определения состояния элементов с выходным сигналом типа «да/нет», например, кнопок, сиг- нализаторов, контактов реле, концевых выключателей и т. п. Такой опрос про- изводится путём чтения содержимого регистра PINx с определённой периодич- ностью или по сигналу прерывания при изменении состояния датчика. Если используемый источник двоичного сигнала имеет механические или электромеханические контакты, то при их замыкании возникает сложный пере- ходной процесс, называемый «дребезгом контактов». При наличии дребезга сигнал с контакта может быть прочитан как случайная последовательность нулей и единиц. Устранить это явление можно схемотехническими средствами (например, с помощью буферного 323 триггера), однако чаще это производится программным путём. Наибольшее распространение получили два программных способа ожидания установившегося значения: подсчёт заданного числа совпадающих значений сигнала и временнáя задержка. Первый способ состоит в многократном считывании сигнала с контакта. Подсчёт опросов, при которых установлено замыкание контакта, ведётся программным счётчиком. Если после серии удачных опросов встречается неудач- ный, опрос начинается с начала. Контакт считается устойчиво замкнутым, если последовало N удачных опросов. Число N подбирается экспериментально для каждого типа датчиков и лежит в пределах от 5 до 50. Устранение дребезга путём введения временной задержки заключается в том, что программа, обнаружив замыкание контакта, запрещает опрос состояния этого контакта на время, заведомо большее длительности переходного про- цесса. Длительность временнόй задержки подбирается экспериментально для каждого типа датчиков (типичные значения 1…10 мс) и реализуется подпрограммой формирования задержки. Управление релейными элементами, т. е. элементами с двумя устойчивыми состояниями (например, электромагнитными клапанами, электромеханическими приводами и т. п.), производится путём записи значений в регистр PORTx. Более сложные процедуры управления могут быть реализованы с помощью встроенных широтно-импульсных модуляторов и внешних цифро-аналоговых преобразователей. Большинство сигнальных линий портов ввода-вывода AVR-микро- контроллера имеют альтернативное назначение (входы АЦП, входы для сигна- лов внешних прерываний и др.), а также реализуют функции специализирован- ных портов ввода- вывода, например, универсального асинхронного приёмопе- редатчика, последовательного периферийного интерфейса SPI и др. УАПП служит для организации последовательных интерфейсов типа RS232/422/485. Интерфейс SPI используется для занесения программы в память программ AVR-микроконтроллера непосредственно в микропроцессорной системе (про- граммирования в системе – In-System-Programming, ISP), а также может применяться для обмена данными с внешними устройствами. Режим ПДП при обмене данными в AVR- микроконтроллерах не предусмотрен. Практическая часть. 1. Составить программу опроса двух кнопок, служащих соответственно для увеличения и уменьшения значения некоторого числа (диапазон изменения 0…255). Число поместить в РОН. Для ввода в микроконтроллер сигналов от кнопок использовать внешние прерывания INT0 и INT1 (сигнал прерывания INT0 поступает на вывод PD2 порта D, сигнал прерывания INT1 – на вывод PD3). Задать режим запуска внешних прерываний по положительному фронту. Дребезг контактов устранить программно с помощью временнόй задержки. На- копленное в РОН число выводить в порт B параллельным 8-разрядным кодом. 2. Проверить работу созданной программы с помощью отладочной платы STK500. Убедиться, что микроконтроллер ATmega8535 установлен в разъём SCKT3100A3. Произвести на плате следующие подключения: разъём ISP6PIN соединить с разъёмом SPROG3, разъём SWITCHES – с разъёмом PORTD с помощью плоского 10-жильного кабеля; разъём LEDS – с разъёмом PORTB с помощью плоского 10-жильного кабеля (красный провод должен быть подклю- чён к первому контакту). Перемычку OSCSEL установить в положение 2-3; установить перемычки VTARGET, AREF, RESET, XTAL1. В разъём CRYSTAL установить кварцевый резонатор (8,0 МГц). С помощью интерфейсного кабеля соединить разъём RS232 CTRL платы STK500 с COM-портом компьютера. Включить питание отладочной платы. Средства работы с платой STK500 в среде AVR Studio находятся в одно- имённом диалоговом окне, вызов которого осуществляется командой STK500/AVRISP/JTAG ICE → STK500/AVRISP/JTAG ICE меню Tools. Настройка параметров работы платы STK500 производится на закладке Board диалогового окна STK500. В поле VTarget установить напряжение питания микроконтроллера, равное 5 В. Нажать кнопку Write Voltages. Занесение программы в память микроконтроллера производится следующим образом. На закладке Program диалогового окна STK500 в поле Device выбрать из списка тип используемого микроконтроллера (ATmega8535). В разделе Programming mode выбрать способ программирования – программирова- ние в системе (ISP); убедиться, что установлены флажки Erase Device Before Programming (стереть кристалл перед программированием) и Verify Device After Programming (проверить кристалл после 324 программирования). В разделе Flash указать в качестве источника загружаемой программы текущую програм- му симулятора-отладчика (Use Current Simulator/Emulator FLASH Memory). Можно также непосредственно указать путь к файлу-прошивке памяти про- грамм в поле Input HEX File. Для загрузки программы в память программ на- жать кнопку Program раздела Flash. Проверка содержимого памяти программ может быть произведена с помощью кнопки Verify, чтение содержимого памяти программ – с помощью команды Read. По окончанию программирования микроконтроллер начинает функционировать по загруженной программе. 3. Оформить отчет.Отчёт должен содержать: титульный лист с указанием номера и названия работы, номера группы и фамилий выполнивших работу; цель работы; листинг трансляции созданной программы. Контрольные вопросы. 1. Типы и назначение периферийных устройств. 2. Виды и особенности портов ввода-вывода. 3. Режимы обмена информацией; их преимущества и недостатки. 4. Реализация портов ввода-вывода в AVR-микроконтроллерах. 5. Способы формирования временных задержек. 6. Опрос двоичных датчиков и управление релейными элементами. 7. Способы подавления дребезга контактов. Практическая работа №73. Элементарные приемы программирования (особенности системы команд). Цель работы: изучение функций системного и прикладного ПО в составе программных комплексов микропроцессорных систем; ознакомление с возможностями использования языков высокого уровня при разработке прикладного ПО микроконтроллеров и основными методами обеспечения надёжности ПО. Основные сведения Программное обеспечение встраиваемых микропроцессорных систем представляет собой сложный комплекс программ и данных, отличающихся по назначению, возможности модификации в процессе работы, частоте и кратности выполнения и т. п. Согласно наиболее общей классификации в структуре комплекса программ выделяют системное и прикладное ПО. Системное ПО служит для распределения ресурсов микропроцессорной системы и управления выполнением программ и заданий. Прикладное ПО предназначено для решения различных пользовательских задач (обработки информации, управления и др.). Системное ПО. К системному программному обеспечению встраиваемых микропроцессорных систем относятся операционные системы (ОС), начальные загрузчики и другие программные средства. Операционная система (operating system, OS) – это совокупность про- грамм, обеспечивающих управление аппаратными ресурсами микропроцессор- ной системы, а также взаимодействие программных процессов с аппаратурой и другими процессами. Во встраиваемых микропроцессорных системах, в том числе построенных на базе RISC- микроконтроллеров, используются встраи- ваемые операционные системы. Встраиваемая операционная система выполня- ет следующие основные функции: − управление памятью (memory management); − управление процессами (tasks management); − интерфейс с периферийными устройствами; − поддержка различных коммуникационных протоколов. Первые две функции обычно выполняет ядро (kernel) операционной системы. Интерфейс с периферийными устройствами и поддержку различных протоколов обеспечивают отдельные специализированные модули (аналоги драйверов), что повышает гибкость использования операционной системы. Одной из основных функций ОС является управление процессами. Это обусловлено тем, что микропроцессор, встроенный в систему управления некоторым объектом, должен обслуживать большое количество источников и потребителей информации. При этом, 325 как правило, возникает необходимость одновременного выполнения различных действий (процессов): обработки поступающей информации, формирования и выдачи управляющих воздействий, об- мена данными и др. Под процессом (process) понимают функционально и логи- чески законченную последовательность команд микропроцессора. В литературе процесс иногда называют задачей (task). Так как процессорные ядра большинства современных микроконтроллеров представляют собой вычислители с одним потоком команд и одним потоком данных (SISD: Single Instruction – Single Data), в один момент времени обеспечивается выполнение только одной задачи. Совмещение во времени выполнения нескольких программных потоков достигается разделением процессорного времени между различными задачами. В этом случае говорят о квазипараллельном (лат. quasi – как будто, почти) вы- полнении нескольких программных потоков (задач), или многозадачности. Термин «многозадачность» применительно к микроконтроллерам должен пониматься с некоторой долей условности, т. к. существенно ограниченные ресурсы (и в большинстве случаев отсутствие аппаратных средств поддержки многозадачного режима) не позволяют использовать в них развитые механизмы многозадачности. Общая идея обеспечения многозадачности в микроконтроллерах состоит в следующем. Каждому процессу выделяется своя область памяти для хранения данных и программного контекста (содержимого регистров процессора). Пере- ключение между процессами производится согласно приоритетам с восстанов- лением соответствующего контекста процессора. Наиболее совершенными средствами реализации многозадачности обладают операционные системы реального времени. Операционная система реального времени (ОС РВ – real-time OS, RTOS) – ОС, обеспечивающая взаимодействие микропроцессорной системы с внешними процессами в темпе, соизмеримом со скоростью протекания этих процессов, т. е. с гарантированным временем реакции (отклика). Типичная ОС реального времени выполняет задачи в соответствии с приоритетами, осуществляет динамическое распределение памяти, использует различные средства межзадачного взаимодействия (семафоры, сигналы, события, алармы, программные каналы, разделяемые модули данных, стеки сообщений и др.), обеспечивает быстрые процедуры обслуживания прерываний, гибкое взаимодействие между программными модулями и параллельную работу процессов, обслуживающих разные внешние устройства. В силу специфических условий применения основным требованием, предъявляемым к встраиваемым ОС, является компактность. Чаще всего ядро встраиваемой операционной системы имеет объём порядка нескольких килобайт, и ещё несколько килобайт занимают различные драйверы. В том случае, если по каким-либо причинам использование встраиваемой ОС в конкретной разработке невозможно (ограниченные ресурсы, отсутствие подходящей ОС и др.), функции ОС реализуются программистом при разработке прикладного ПО. Начальный загрузчик (boot loader) – это специализированная программа, предназначенная для загрузки исполняемого кода программы (или операционной системы) в определённое место памяти программ при включении питания. Функции и характеристики начальных загрузчиков сильно различаются в зависимости от типа микропроцессора и структуры его памяти. Например, начальный загрузчик может выполнять функции программирования внутренней или внешней FLASH-памяти микроконтроллера с помощью интерфейсов RS232, SPI и др. или же (в том случае, если программа исполняется из ОЗУ) загружать код программы (операционной системы) из ПЗУ в оперативную память. 55В AVR-микроконтроллерах начальный загрузчик имеется в старших моделях и служит для загрузки памяти программ в режиме самопрограммирования. |