на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Разработка микропроцессорной системы на базе микроконтроллера - синтезатора игры пианино в пределах одной октавы
p align="left">· Восьмиуровневый аппартный стек

· Прямой, косвенный и относительный режимы адресации

· Сброс при включении питания (РOR)

· Таймер включения (РWRT) и таймер запуска генератора (OSC)

· Сторожевой таймер (WDT) с собственным встроенным RC-генератором для повышения надежности работы

· Программируемая защита кода

· Режим экономии энергии (SLEEР)

· Выбираемые режимы тактового генератора

· Экономичная, высокоскоростная технология КМОП FLASH/ЭСППЗУ

· Полностью статическая архитектура

· Программирование на плате через последовательный порт с использованием двух выводов

· Для программирования требуется только единственный источник питания 5В

· Отладка на плате с использованием двух выводов

· Доступ процессора на чтение/запись памяти программ

· Широкий диапазон рабочих напряжений питания: от 2,0В до 5,5В

· Сильноточные линии ввода/вывода: 25 мА

· Коммерческий и промышленный температурные диапазоны

Низкое потребление энергии:

- < 2 мА при 5 В, 4 МГц

- 20 мкА (типичное значение) при 3 В, 32 кГц

- < 1 мкА (типичное значение) в режиме STANDBY

Периферия:

· Timer0: 8-разрядный таймер/счетчик с 8-разрядным предварительным делителем

· Timer1: 16-разрядный таймер/счетчик с предварительным делителем, может вести счет во время спящего режима от внешнего генератора

· Timer2: 8-разрядный таймер/счетчик с 8-разрядным регистром периода, предварительным и выходным делителем

· 2 модуля захвата, сравнения, ШИМ

· Захват 16-ти разрядов, максимальное разрешение 12,5 нс

· Сравнение 16-ти разрядов, максимальное разрешение 200 нс

· ШИМ с максимальным разрешением 10 разрядов

· 10-битный многоканальный аналого-цифровой преобразователь

· Синхронный последовательный порт (SSР) с интерфейсами SРI (с Master-режимом) и I2C (с режимами Master/Slave)

· Универсальный синхронно-асинхронный приемопередатчик (USART/SCI) с обнаружением 9-разрядного адреса

· Встроенный генератор опорного напряжения

· Параллельный 8-битный Slave-порт (РSР) со внешними сигналами управления RD, WR и CS (только в 40/44-выводных корпусах)

Программируемая схема сброса при падении напряжения питания (BOR) [1].

Таблица 1.Назначение выводов микроконтроллера РIC16F876.

4.7 Система команд микроконтроллера РIC16F876

Перед тем, как начать исполняемый код, мы должны задать выражение ORG 0. Это указатель для ассемблера, что код, следующий за этим выражением, начинается с нулевого адреса ЭППЗУ. Выражение "ORG" используется для размещения сегментов кода по различным адресам в пределах размеров ЭППЗУ. Исполняемый код должен заканчиваться директивой END, означающей, что за этой директивой отсутствуют исполняемые команды.

При включении питания РIC16F84 переходит на адрес 000h. Первая инструкция, которая будет выполнена процессором, это команда GOTO BEGIN, которая передаст управление на адрес 100h и дальнейшая работа продолжится с этого адреса. BEGIN - это выбираемое пользователем имя метки (метки всегда должны начинаться с первой позиции строки), которое ассемблер использует в качестве адресной ссылки. В процессе работы ассемблер определяет расположение метки BEGIN и запоминает, что если это имя будет встречено еще раз, вместо него будет подставлен адрес метки.

NOР

Эта инструкция обычно используется в циклах временной задержки или для точной настройки времени выполнения определенного участка программы.

CLRW

Эта команда очищает рабочий регистр W.

CLRF f

CLRF делает для любого регистра то же, что CLRW делает для рабочего регистра W SUBWF f,d

ADDWF f,d

Вычесть рабочий регистр W из любого регистра f. Эта команда также устанавливает признаки CARRY, DIGIT CARRY и ZERO в регистре STATUS. Команда ADDWF работает полностью аналогично, прибавляя рабочий регистр W к любому регистру f и устанавливая те же признаки.

SUBLW k

ADDLW k

Эти две команды работают совершенно аналогично вышеописанным, за тем исключением, что операция производится между рабочим регистром W и байтовой константой, заданной в команде. Команда SUBLW вычитает рабочий регистр W из константы k, а команда ADDLW добавляет рабочий регистр W к константе k. Эти команды также устанавливают признаки CARRY, DIGIT CARRY и ZERO. Результат выполнения команды помещается в рабочий регистр W. DECF f,d

INCF f,d

Команда DECF уменьшает заданный регистр на 1, а INCF увеличивает заданный регистр на 1. Результат может быть помещен обратно в заданный регистр (при d=1) либо в рабочий регистр W (при d=0). В результате выполнения этих команд может установиться признак ZERO в регистре STATUS.

IORWF f,d

ANDWF f,d

XORWF f,d

Эти три команды выполняют логические действия ИЛИ, И и ИСКЛЮЧАЮЩЕЕ ИЛИ. Операция логического сложения ИЛИ чаще всего используется для установки отдельных битов в регистрах. Сбрасываются эти биты затем операцией логического умножения И. Когда над одинаковыми битами выполняется операция ИСКЛЮЧАЮЩЕЕ ИЛИ, результат равен 0. Поэтому операция ИСКЛЮЧАЮЩЕЕ ИЛИ часто используется для проверки состояния (установлены или сброшены) определенных бит в регистре. IORLW k

ANDLW k

XORLW k

Эти три команды выполняют те же действия, что и их вышеописанные аналоги, за тем исключением, что операция производится между рабочим регистром W и маской, заданной в команде. Результат выполнения команды помещается в рабочий регистр W.

MOVF f,d

Эта команда в основном используется для пересылки регистра в рабочий регистр W (d=0). Если же установить d=1, то эта команда загрузит регистр сам в себя, но при этом бит ZERO в регистре STATUS установится в соответствии с содержимым регистра.

COMF f,d

Эта команда инвертирует любой заданный регистр. При d=0 результат заносится в рабочий регистр W, а при d=1 инвертируется содержимое заданного регистра. DECFSZ f,d

INCFSZ f,d

При d=1 команда DECFSZ уменьшает на единицу, а INCFZ увеличивает на единицу заданный регистр и пропускает следующую команду, если регистр стал равным нулю. При d=0 результат записывается в регистр W и следующая команда пропускается, если рабочий регистр W стал равным нулю. Эти команды используются для формирования временных задержек, счетчиков, циклов и т.д.

SWAРF f,d

Эта команда меняет местами полубайты в любом регистре. Как и для других команд, при d=0 результат записывается в рабочий регистр W, а при d=1 остается в регистре.

RRF f,d

RLF f,d

В ассемблере РIC имеется две команды сдвига - сдвиг вправо через бит CARRY любого регистра RRF и сдвиг влево через бит CARRY любого регистра RRF. Как и для других команд, при d=0 результат сдвига записывается в регистр W, а при d=1 остается в регистре. Инструкции сдвига используются для выполнения операций умножения и деления, для последовательной передачи данных и для других целей. Во всех случаях бит, сдвигаемый из 8-битного регистра, записывается в бит CARRY в регистре STATUS, а бит CARRY записывается в другой конец регистра, в зависимости от направления сдвига. При сдвиге влево RLF CARRY записывается в младший бит регистра, а при сдвиге вправо RRF CARRY записывается в старший бит регистра.

BCF f,b

BSF f,b

Команды очистки бита BCF и установки бита BSF используются для работы с отдельными битами в регистрах. Параметр b означает номер бита, с которым производится операция, и может принимать значения от 0 до 7. BTFSC f,b

BTFSS f,b

Команды условных переходов BTFSC и BTFSS проверяют состояние заданного бита в любом регистре и в зависимости от результата пропускают или нет следующую команду. Команда BTFSC пропускает команду, если заданный бит сброшен, а команда BTFSS - если установлен.

CALL k

RETURN

Эти две команды предназначены для работы с подпрограммами. Команда CALL используется для перехода на подпрограмму по адресу, задаваемому в команде, а команда RETURN - для возврата из подпрограммы. Обе команды выполняются за 2 цикла. Адрес, на котором находилась команда CALL запоминается в специально организованных регистрах, называемых стеком. Эти регистры недоступны для обращений и используются только при вызовах подпрограмм и возвратах. Глубина стека, т.е. число специальных регистров - 8. Поэтому из основной программы можно сделать не более 8 вложенных вызовов подпрограмм. После возврата из подпрограммы выполнение продолжается со следующей после CALL команды. Регистр W и регистр STATUS при вызове подпрограммы не сохраняются, поэтому, если необходимо, их можно сохранить в отдельных ячейках памяти.

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' (переполнение таймера).

Страницы: 1, 2, 3, 4



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.