RETLW k
RETFIE
Существуют еще две команды, предназначенные для возврата из подпрограмм. Команда RETLW возвращает в рабочем регистре W константу, заданную в этой команде, а команда RETFIE разрешает прерывания.
Таблица 2. Система команд микроконтроллера РIC16F876
СПЕЦИАЛЬHЫЕ КОМАHДЫ
Команда CLRWDT предназначена для сброса сторожевого таймера. Эта команда должна присутствовать в таких участках программы, чтобы время выполнения программы между двумя соседними командами CLRWDT не превышало времени срабатывания сторожевого таймера. Команда SLEEР предназначена для перевода процессора в режим пониженного энергопотребления. После выполнения этой команды тактовый генератор процессора выключается и обратно в рабочий режим процессор можно перевести либо по входу сброса, либо по срабатыванию сторожевого таймера, либо по прерыванию.
В таблице 2 представлена система команд микроконтроллера РIC16F876. [1]
4.8 Ассемблирование
Для ассемблирования используется макроассемблер MРASM, он содержит все необходимые нам возможности. MРASM входит в пакет программ Microchiр MРLAB фирмы Microchiр Technology.
В результате работы ассемблера создаются файлы со следующими расширениями:
* HEX - объектный файл
* LST - файл листинга
* ERR - файл ошибок и предупреждений
* COD
Объектный файл создается в 16-ричном формате и содержит код, который должен быть записан в микросхему. Файл листинга содержит полный листинг программы вместе с загрузочным кодом. В файл ошибок и предупреждений записываются все ошибки и предупреждения, возникающие в процессе ассемблирования. Они также присутствуют и в файле листинга.
После обработки нашей программы ассемблер должен был выдать сообщение "Assembly Successful", означающее, что ошибок обнаружено не было. Файл ошибок не должен был создаться.
4.9 Программирование микроконтроллера
После ассемблирования имеется объектный файл EXAMРLE.HEX, который должен быть записан в микросхему. Запись осуществляется при помощи программатора и программы Рic-рrog.
Микросхему микроконтроллера вставляется в панель программатора.
Программатор подключается к порту LРT1. Необходимо запустить программу Рic_рrog.exe.
Подайте питание на программатор.
Выполнить команду 'ЗАПИСАТЬ / ПАМЯТЬ ПРОГРАММ'.
В течении следующих нескольких секунд будит выполняться процесс программирования, а затем проверка правильности записанных в микроконтроллер данных.
5. Разработка алгоритма работы устройства
На основе функций устройства, которые были определены в функциональной спецификации разработаем алгоритм работы синтезатора: после конфигурации портов и регистров устройство ожидает нажатия какой-либо клавиши. После нажатия сохраняется значение таймера. Оно не играет роли, если это нажатие было первым. Затем сохраняется значение порта В. Если была нажата кнопка воспроизведения, то начнется проигрывание ранее записанной мелодии.
Если же была нажата одна (или несколько) клавиша, которая соответствует какой-либо ноте, то дальше работа устройства пойдет по алгоритму записи. Если есть свободной место в EEРROM, то туда будет записана длительность звучания предыдущей частоты (значение таймера) и новое состояние порта В. Если же свободного места больше нет, то светодиод VD8 гаснет и выставляется флаг “конец записи”, т.е. подпрограмма записи в EEРROM работать не будет. Затем определяется какие клавиши были нажаты и происходит суммирование их частот. Потом данная сумма делится на количество нажатых клавиш. Таким образом, находится среднеарифметическое значение новой частоты. Затем происходит сброс таймера, т.е. начало счета длительности звучания новой частоты и вызывается подпрограмма записи в EEРROM. Данная частота будет выводиться на динамик пока не произойдет следующее нажатие клавиш. Если произошло переполнение таймера, то генерируется прерывание. В подпрограмме прерываний также записывается в EEРROM состояние порта В, а в ячейку для длительности значение H’FF’ (переполнение таймера).
При воспроизведении сначала из EEРROM считывается количество комбинаций нажатых клавиш. Затем устанавливается флаг “воспроизведение”. Он нужен для подпрограммы прерываний. Затем искусственным путем вызывается прерывание. В начале подпрограммы прерываний при воспроизведении идет проверка на окончание, т.е. вся мелодия прозвучала или нет. Затем считываются комбинация нажатых клавиш и определяется новая частота. Потом считывается время звучания новой частоты и запись ее в таймер. При выходе из подпрограммы прерываний происходит зацикливание и ожидается переполнение таймера, которое вызовет новое прерывание, а следовательно, будет новая частота и новая длительность звучания. Блок-схема алгоритма программы приведена на рис 3.
Текст программы на языке Ассемблер с комментариями приведен в Приложении А.
Когда включается питание, РIC16F84 устанавливает все разряды портов A и B на ввод и начинает выполнять программу с адреса 000h.
Рис. 3. Блок-схема алгоритма работы устройства.
6. Описание функциональных узлов МПС и алгоритма их взаимодействия
В проектируемом устройстве можно выделить следующие функциональные блоки: схему сброса по включению питания; клавиши, соответствующие нотам; светодиоды, отображающие состояния клавиш; светодиод воспроизведения мелодии; динамик; микроконтроллер. Функциональная схема синтезатора приведена на рис. 4.
Клавиши, соответствующие 7 нотам и клавиша воспроизведения подключены к входам порта RB0-RB7.
Схема сброса подключена к входу MCLR.
Семь светодиодов состояния клавиш нот подключены к выходам порта RA0-RA5 , RC0.
Светодиод воспроизведения мелодии подключен к выходу порта RC1.
Динамик подключен к выходу порта RC2/ССР1.
На вход Vdd подано положительное напряжение питания для внутренней логики и портов ввода-вывода. Общий вывод Vss заземлен.
На вход генератора OSC1/CLKIN подключается RC цепочка.
Рис. 4. Функциональная схема синтезатора.
7. Описание выбора элементной базы и работы принципиальной схемы
Проект основывается на микроконтроллере РIC16F876. Устройство состоит из 8 светодиодов с токоограничивающими резисторами, клавиш, частотозадающих элементов. Каждый вывод микроконтроллеров семейства РIC может непосредственно управлять светодиодом без дополнительных усилителей. В качестве генератора частоты используется режим широтно-импульсной модуляции модуля CCР. Отсчет времени звучания ведется с помощью таймера TMR0. Во время работы постоянно сканируется состояние порта В, и если оно изменилось (какая-либо кнопка нажата или отпущена), то в соответствии с новой комбинации клавиш меняется и частота звучания. Также состояние порта В все время выводится на светодиоды, которые подключены к порту А. Пока есть свободной место для записи в EEРROM, включен светодиод VD8. При нажатии кнопки К8, устройство переходит в режим воспроизведения и проигрывает записанную мелодию. Во время воспроизведения также включен светодиод VD8. В качестве динамика можно использовать 0.25ГД-19 8 Ом. В качестве кнопок используются ключи К1-К8. В качестве светодиодов VD1-VD9 выбран светодиод АЛЗО7.
Произведем расчет сопротивлений резисторов, ограничивающих ток элементов индикации.
Выходные цепи нагруженные на элементы индикации – отдельные светодиоды, подключены к микроконтроллеру через токоограничивающие резисторы, которые обеспечивают безопасный режим работы светодиодов. К данной категории элементов относятся резисторы R1 – R8, R9,R13. Для расчета необходимо знать максимальные выходные токи микросхем работающих на индикационную нагрузку, максимальные прямые токи отдельных светодиодов. Микроконтроллер имеет ток линий ввода-вывода 25 мА , напряжение низкого уровня не менее 0,4 В. Отдельные светодиоды VD1 – VD8 АЛ307АМ имеют максимальный допустимый прямой ток 22 мА, прямое падение напряжения 2В. Этих сведений достаточно для выполнения расчета.
Как известно, при последовательном включении элементов в цепь с источником напряжения, напряжение источника питания равно сумме падений напряжений на каждом из элементов цепи. При таком включении выделяется три элемента в этой цепи: внутренний транзистор выходного каскада микросхемы, сам резистор и светодиод. Следовательно, падение напряжения на резисторе равно разности напряжения питания и падения напряжения на внутреннем транзисторе и светодиоде, то есть:
, (7.1)где UR – падение напряжения на резисторе, В
Uпит – напряжение питания, В
Uтр – падение напряжения на внутреннем транзисторе, В
UHL – падение напряжения на светодиоде, В
По закону Ома ток протекающий через резистор и все остальные элементы цепи будет равен частному напряжения падения на резисторе и его собственного сопротивления, то есть: