Смекни!
smekni.com

Разработка микропроцессорной системы на базе микроконтроллера - синтезатора игры пианино в пределах (стр. 2 из 5)

4.5 Тактовый генератор

Для микроконтроллеров семейства РIC возможно использование четырех типов тактового генератора:

- XT кварцевый резонатор

- HS высокочастотный кварцевый резонатор

- LР микропотребляющий кварцевый резонатор

- RC RC цепочка

Задание типа используемого тактового генератора осуществляется в процессе программирования микросхемы. В случае задания вариантов XT, HS и LР к микросхеме подключается кварцевый или керамический резонатор либо внешний источник тактовой частоты, а в случае задания варианта RC - резистор и конденсатор. Конечно, керамический и, особенно, кварцевый резонатор значительно точнее и стабильнее, но если высокая точность отсчета времени не нужна, использование RC генератора может уменьшить стоимость и габариты устройства.

4.6 Схема сброса

Микроконтроллеры семейства РIC используют внутреннюю схему сброса по включению питания в сочетании с таймером запуска генератора, что позволяет в большинстве ситуаций обойтись без традиционного резистора и конденсатора. Достаточно просто подключить вход MCLR к источнику питания. Если при включении питания возможны импульсные помехи или выбросы, то лучше использовать последовательный резистор 100-300 Ом. Если питание нарастает очень медленно (медленнее, чем за 70 мсек), либо Вы работаете на очень низких тактовых частотах, то необходимо использовать традиционную схему сброса из резистора и конденсатора.

На рис. 2 представлена цоколевка микроконтроллера. В таблице представлено назначение выводов микроконтроллера.


Рис. 2. Цоколевка микроконтроллера.

Особенности ядра микроконтроллера:

· Высокопроизводительный RISC-процессор

· Всего 35 простых для изучения команд.

· Все инструкции исполняются за один такт, кроме инструкций перехода, выполняемых за два такта

· Скорость работы: тактовая частота до 20 МГц;

· минимальная длительность такта 200 нс

· FLASH память программ до 8K x 14 слов

· Память данных (ОЗУ) до 368 x 8 байт

· ЭСППЗУ память данных до 256 x 8 байт

· Совместимость цоколевки с РIC16C73/74/76/77

· Механизм прерываний (до 14 внутренних/внешних источников прерываний)

· Восьмиуровневый аппартный стек

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

· Сброс при включении питания (Р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 при вызове подпрограммы не сохраняются, поэтому, если необходимо, их можно сохранить в отдельных ячейках памяти.