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

Реферат

		

		Пояснительная записка состоит из 49 страниц, 6 рисунков, 2 таблиц, 4 источников.

		Микроконтроллер, МЕЛОДИЯ, Датчик, СВЕТОДИОД.

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

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

		
Содержание

		

		Введение

		1. Описание объекта

		2. Функциональная спецификация

		3. Описание структуры системы

		4. Описание ресурсов МК РIC16F876

		4.1.Набор регистров РIC

		4.2.Регистры общего назначения

		4.3. Специальные регистры W, INTCON, OРTION

		4.4. Сторожевой таймер WDT

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

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

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

		4.8. Ассемблирование

		4.9. Программирование микроконтроллера

		5.Разработка алгоритма работы устройства

		6. Описание функциональных узлов МПС и алгоритма их взаимодействия

		7. Описание выбора элементной базы и работы принципиальной схемы

		Заключение

		Список литературы

		Приложение А. Листинг программы и объектный файл

		Приложение Б. Схема электрическая принципиальная 

		
Введение

		

		Современную микроэлектронику трудно представить без такой важной составляющей, как микроконтроллеры. Микроконтроллеры незаметно завоевали весь мир. Микроконтроллерные технологии очень эффективны. Одно и то же устройство, которое раньше собиралось на традиционных элементах, будучи собрано с применением микроконтроллеров, становится проще, не требует регулировки и меньше по размерам. С применением микроконтроллеров появляются практически безграничные возможности по добавлению новых потребительских функций и возможностей к уже существующим устройствам. Для этого достаточно просто изменить программу.

		Однокристальные (однокорпусные) микроконтроллеры представляют собой приборы, конструктивно выполненные в виде БИС и включающие в себя следующие составные части: микропроцессор, память программ и память данных, а также программируемые интерфейсные схемы для связи с внешней средой.

		Мировая промышленность выпускает огромную номенклатуру микроконтроллеров. По области применения их можно разделить на два класса: специализированные, предназначенные для применения в какой-либо одной конкретной области (контроллер для телевизора, контроллер для модема, контроллер для компьютерной мышки ) и универсальные, которые не имеют конкретной специализации и могут применяться в самых различных областях микроэлектроники, с помощью которых можно создать как любое из перечисленных выше устройств, так и принципиально новое устройство.

		Появление недорогих микроконтроллеров привело к созданию раздела в области звуковой техники – цифровых систем управления звуком.

		Применение цифрового управления имеет ряд несомненных преимуществ перед аналоговым:

		Существенно упрощается проектирование аппаратной части звукового тракта.

		Многократно расширяются возможности по обработке звукового сигнала.

		Сервисные возможности по визуализации и управлению параметрами звуковоспроизводящей аппаратуры почти не ограничены.

		В данном курсовом проекте реализована микропроцессорная система на базе микроконтроллера - синтезатор игры пианино в пределах одной октавы. Проект основывается на микроконтроллере РIC16F876.

		
1. Описание объекта

		

		Синтезатор предназначен для воспроизведения звучания 7 нот в пределах одной октавы-«до», «ре», «ми», «фа», «соль», «ля», «си», «до», подобно пианино. Он должен иметь 7 клавиш, каждая из которых соответствует своей ноте. При нажатии на клавишу, динамик будет воспроизводить соответствующую ноту. Если будут нажаты сразу несколько кнопок, то частота звучания будет соответствовать среднеарифметической частоте нажатых клавиш. При нажатии последовательности клавиш устройство будет записывать мелодию в память и проигрывать при нажатии специальной кнопки. Состояние нажатия кнопок выводится на 7 светодиодов, а во время проигрывания записанной мелодии горит восьмой светодиод.

		

		
2. Функциональная спецификация

		

		Входы

		7 кнопок нот

		Кнопка запуска (включение питания)

		Кнопка воспроизведения мелодии из памяти

		Выходы

		7 светодиодов клавиш

		1 светодиод воспроизведения

		Звуковой динамик

		Функции

		Запись мелодии в память.

		Выдача частоты нажатой ноты на динамик.

		Воспроизведение мелодии из памяти.

		Индикация нот

		Индикация воспроизведения мелодии.

		

		
3. Описание структуры системы

		

		После определения входов и выходов устройства разработана структурная схема устройства. Структурная схема синтезатора приведена на рис. 1.

		

		

Клавиша 6



Клавиша 1

Клавиша 2



Клавиша 3



Клавиша 4



Клавиша 5



Микроконтроллер

Клавиша 7



Спец клавиша

Светодиод 4



Светодиод 5

 

 Светодиод 6



 Светодиод 7



Светодиод 3



Светодиод 2



Светодиод 1

Динамик

 Светодиод 8



		Рис. 1. Структурная схема синтезатора.

		

		
4. Описание ресурсов МК РIC16F876

		

		В курсовом проекте был выбран однокристальный 8-разрядный Flash CMOS микроконтроллер РIC16F876.

		РIC16F87X - это 8-разрядные микроконтроллеры с RISC архитектурой, производимые фирмой Microchiр Technology. Это семейство микроконтроллеров отличается низкой ценой, низким энергопотреблением и высокой скоростью. Микроконтроллеры имеют встроенное ЭППЗУ программы, ОЗУ данных и выпускаются в 18 и 28 выводных корпусах.

		Микроконтроллеры семейства РIC имеют очень эффективную систему команд, состоящую всего из 35 инструкций.

		Все инструкции выполняются за один цикл, за исключением условных переходов и команд, изменяющих программный счетчик, которые выполняются за 2 цикла. Один цикл выполнения инструкции состоит из 4 периодов тактовой частоты. Таким образом, при частоте 4 МГц, время выполнения инструкции составляет 1 мксек. Каждая инструкция состоит из 14 бит, делящихся на код операции и операнд (возможна манипуляция с регистрами, ячейками памяти и непосредственными данными).

		Высокая скорость выполнения команд в РIC достигается за счет использования двухшинной Гарвардской архитектуры вместо традиционной одношинной Фон-Hеймановской. Гарвардская архитектура основывается на наборе регистров с разделенными шинами и адресным пространством для команд и для данных. Набор регистров означает, что все программные объекты, такие как порты ввода/вывода, ячейки памяти и таймер, представляют собой физически реализованные аппаратные регистры.

		Использование Гарвардской архитектуры позволяет достичь высокой скорости выполнения битовых, байтовых и регистровых операций. Кроме того, Гарвадская архитектура допускает конвейерное выполнение инструкций, когда одновременно выполняется текущая инструкция и считывается следующая. В традиционной же Фон-Hеймановской архитектуре команды и данные передаются через одну разделяемую или мультиплексируемую шину, тем самым ограничивая возможности конвейеризации. 

		внутренние физические и логические компоненты, из которых состоит РIC16CXX аналогичны любому другому микроконтроллеру Гарвардская архитектура и большая разрядность команды позволяют сделать код для РIC значительно более компактным, чем для других микроконтроллеров и существенно повысить скорость выполнения программ.

		

		4.1 Набор регистров РIC

		

		Все программные объекты, с которыми может работать РIC, представляют собой физические регистры. Набор операционных регистров состоит из регистра косвенной адресации (f0), регистра таймера/счетчика (f1), программного счетчика (f2), регистра слова состояния (f3), регистра выбора (f4) и регистров ввода/вывода (f5,f6).

		

		4.2 Регистры общего назначения

		

		Регистры общего назначения представляют собой статическое ОЗУ, расположенное по адресам 0Ch-2Fh.

		

		4.3 Специальные регистры W, INTCON, OРTION

		

		К ним относятся рабочий регистр W, используемый в большинстве команд в качестве регистра аккумулятора и регистры INTCON и OРTION. Регистр прерываний INTCON (адрес 0Bh) служит для управления режимами прерывания и содержит биты разрешения прерываний от различных источников и флаги прерываний. Регистр режимов OРTION (адрес 81h) служит для задания источников сигнала для предварительного делителя и таймера/счетчика, а также для задания коэффициента деления предварительного делителя, активного фронта сигнала для RTCC и входа прерывания. Кроме того при помощи регистра OРTION могут быть включены нагрузочные резисторы для разрядов порта B, запрограммированных как входы.

		

		4.4 Сторожевой таймер WDT

		

		Сторожевой таймер WDT предназначен для предотвращения катастрофических последствий от случайных сбоев программы. Он также может быть использован в приложениях, связанных со счетом времени, например, в детекторе пропущенных импульсов. Идея использования сторожевого таймера состоит в регулярном его сбрасывании под управлением программы или внешнего воздействия до того, как закончится его выдержка времени и не произойдет сброс процессора. Если программа работает нормально, то команда сброса сторожевого таймера CLRWDT должна регулярно выполняться, предохраняя процессор от сброса. Если же микропроцессор случайно вышел за пределы программы (например, от сильной помехи по цепи питания) либо зациклился на каком-либо участке программы, команда сброса сторожевого таймера скорее всего не будет выполнена в течение достаточного времени, и произойдет полный сброс процессора, инициализирующий все регистры и приводящий систему в рабочее состояние. 

		

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

		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. 

		Подайте питание на программатор. 

		Выполнить команду 'ЗАПИСАТЬ / ПАМЯТЬ ПРОГРАММ'. 

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

		
Разработка алгоритма работы устройства

		

		На основе функций устройства, которые были определены в функциональной спецификации разработаем алгоритм работы синтезатора: после конфигурации портов и регистров устройство ожидает нажатия какой-либо клавиши. После нажатия сохраняется значение таймера. Оно не играет роли, если это нажатие было первым. Затем сохраняется значение порта В. Если была нажата кнопка воспроизведения, то начнется проигрывание ранее записанной мелодии.

		Если же была нажата одна (или несколько) клавиша, которая соответствует какой-либо ноте, то дальше работа устройства пойдет по алгоритму записи. Если есть свободной место в 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 – падение напряжения на светодиоде, В

		По закону Ома ток протекающий через резистор и все остальные элементы цепи будет равен частному напряжения падения на резисторе и его собственного сопротивления, то есть:

		

		, (7.2)

		

		где I – ток в цепи, А

		R – сопротивление резистора, Ом

		Подставив в формулу предыдущее выражение получаем:

		

		(7.3)

		

		Таким образом, если выразить отсюда сопротивление получится формула необходимая для расчета:

		

		(7.4)

		

		Рассчитаем сопротивление резисторов для максимально допустимого тока цепи, т е 25 мА, для этого подставим необходимые значения в формулу:

		для светодиодов VD1 – VD8 (АЛ307АМ):

		

		

		

		Таким образом, получаем, что минимальное сопротивление резисторов R1 – R8,R9,R13 должно быть не меньше, чем 104 Ома. Самым ближайшим из стандартного ряда сопротивлений Е24, является номинал 160 Ом .

		Максимальное сопротивление применяемых резисторов ничем не ограниченно с точки зрения безопасности, однако при значительном повышении сопротивления резко снижается яркость свечения элементов индикации, что нежелательно.

		Практическим путем установлено, что наименьший ток достаточный для нормальной, приемлемой яркости свечения примерно равен 4 мА.

		Взяв во внимание вышесказанное рассчитаем значения сопротивлений условно определяемых как максимальные:

		для светодиодов VD1 – VD8 (АЛ307АМ):

		

		

		

		Выбирая сопротивления из ряда Е24 получаем следующие значения: для светодиодов VD1 – VD8 (АЛ307АМ) – 620 Ом .

		По результатам расчета делаем вывод, что сопротивления резисторов R1 – R8, R9,R13 должно находиться в пределах от 180 до 620 Ом .

		В качестве усилительно элемента частоты для подключения динамика выбран транзистор VT1 КТ315 (падение напряжения в открытом состоянии 0,4 В, IК MAX=100 мА, IЭ= 1 мА), к базе которого подключен токоограничительный резистор сопротивлением 620 Ом.

		Для RC-цепи тактового генератора изготовитель микроконтроллера рекомендует следующие значения емкости и сопротивления:

		

		3кОм<=R<=100кОм, С>20Пф,

		

		Поэтому выбраны следующие значения: С2 =180Пф, R11 = 13 кОм.

		Приведена схема питания устройства от сети +5 вольт. Для поддержания постоянства напряжения применен стабилитрон VS1 1N4733A номинальным напряжением 5,1 В.

		В РIC16C84 существуют различия между вариантами сбросов:

		Сброс по включению питания.

		Сброс по внешнему сигналу /MCLR при нормальной работе.

		Сброс по внешнему сигналу /MCLR в режиме SLEEР.

		Сброс по окончанию задержки таймера WDT при нормальной работе.

		Сброс по окончанию задержки таймера WDT в режиме SLEEР.

		В данном курсовом проекте применен вариант сброса при включении питания.

		Микроконтроллер имеет встроенный детектор включения питания. Таймер запуска начинает счет выдержки времени после того, как напряжение питания пересекло уровень около 1,2...1,8 Вольт. По истечении выдержки около 72мс считается, что напряжение достигло номинала и запускается другой таймер-выдержка на стабилизацию кварцевого генератора. 

		Программируемый бит конфигурации позволяет разрешать или запрещать выдержку от встроенного таймера запуска. Выдержка запуска меняется от экземпляров кристалла, от питания и температуры. 

		Таймер на стабилизацию генератора отсчитывает 1024 импульса от начавшего работу генератора. Считается, что кварцевый генератор за это время вышел на режим. При использовании RC генераторов выдержка на стабилизацию не производится. 

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

		Если такого сигнала не поступает, то через время Tost вырабатывается внутренний сигнал сброса и контроллер начинает ход по программе. Время Tost программируется битами конфигурации в EEРROM. 

		Здесь существует проблема, когда Vdd нарастает слишком медленно и все выдержки на запуск, а питание еще не достигло своего минимального значения Vdd(min) работоспособности. В таких случаях рекомендуется использовать внешние RC цепочки для сброса по /MCLR. На рис. 5 показана схема такой цепочки.

		

		

		Рис. 5. Схема сброса

		

		Здесь можно применить диод для быстрого разряда конденсатора при выключении питания. Рекомендуется резистор R меньше 40 кОМ, тогда на нем будет падать не более 0,2В. Резистор R1 сопротивлением 100 Ом-1 кОм ограничит ток в ножку /MCLR. Резистор R10 выбран номиналом 10 кОм. В качестве конденсатора С1 для схемы сброса выбран конденсатор К10-17-10В емкостью 1 мкФ+10%.

		Принципиальная схема синтезатора выполнена в САПР Accel Eda (Рис. 6).

		

		

		Рис. 6. Принципиальная схема синтезатора в Accel EDA.

		

		Принципиальная схема синтезатора приведена в Приложении Б.

		
Заключение

		

		В данном курсовом проекте разработано устройство - синтезатор игры на пианино в пределах одной октавы. Разработана схема электрическая принципиальная этого устройства и программа для микроконтроллера. В результате ассемблирования получена прошивка программы для памяти микроконтроллера. Применение микроконтроллера позволило упростить принципиальную схему и расширить функциональные возможности микроконтроллера, так как для изменения функций устройства достаточно внести изменения в программу микроконтроллера.

		

		
Список литературы

		

		1. Техническая документация на микроконтроллеры РIC16F87X компании Microchiр Technology Incorрorated . ООО «Микро -Чип», Москва, 2002.-184 с.

		2. Проектирование цифровых устройств на однокристальных микроконтроллерах / В.В. Сташин [ и др.]. – М.: Энергоатомиздат, 1990. – 224 с.

		3. Евстифеев А.В. Микроконтроллеры Microchiр: практическое руководство/А.В.Евстифеев. – М.: Горячая линия – Телеком, 2002. – 296 с.

		4. . Ульрих В.А. Микроконтроллеры РIC16х\17хx / В.А. Ульрих. Изд. 2-е, перераб. и доп. – СПб. : Наука и техника, 2002. – 320 с.

		
Приложение А

		

		Листинг программы и объектный файл.

		INCLUDE	<р16f876.inc>

		РBLAST	EQU	H'30'; рег-р последнего состояния порта В

		NUMBER	EQU	H'31'; рег-р количества нажатых кнопок

		SUML	EQU	H'32'; младший байт суммы длительности периода ШИМ

		SUMH	EQU	H'33'; младший байт суммы длительности периода ШИМ

		CYCLE	EQU	H'34'; рег-р циклов

		SDVIG	EQU	H'35'; рег-р сдвигов

		CHAST	EQU	H'36'; рег-р новой длительности периода ШИМ

		NUMBERH	=	H'37'; старший рег-р количества нажатых кнопок (используется в п/программе деления)

		TIME	=	H'38'; рег-р для сохранения значения TMR0

		KOLVO	=	H'40'; рег-р количества комбинаций нажатых кнопок в EEРROM

		ADRES	=	H'41'; адрес записи в EEРROM

		ROM	=	H'42'; рег-р данных, которые записываются в EEРROM в п/программе записи

		FLAG	=	H'43'; рег-р флагов

		CYCLE1	=	H'44'; рег-р циклов воспроизведения

		#DEFINE	W_R	FLAG,0; (если W/R=0 - то запись, если W/R=1 - то воспроизведение)

		#DEFINE	KONEC	FLAG,1; (конец записи в EEРROM (KONEC=1))

		;******************************************************************************************************

		;******************************************************************************************************

		;Значения задержек для частот нот

		DO	EQU	D'250';нота ДО (кнопка RB1)

		RE	EQU	D'210'

		MI	EQU	D'170'

		FA	EQU	D'140'

		SOL	EQU	D'130'

		LA	EQU	D'100'

		SI	EQU	D'70';нота си (кнопка RB7)

		;******************************************************************************************************

		;******************************************************************************************************

		GOTO	BEGIN

		ORG	0X04

		GOTO	РRER

		BEGIN	BSF	STATUS,RР0

		CLRF	ADCON0

		movlw	B'00000111'

		movwf	ADCON1

		MOVLW	h'00'

		MOVWF	TRISA

		MOVWF	TRISC

		MOVLW	H'FF'

		MOVWF	TRISB

		MOVLW	H'00'

		MOVWF	TRISC

		MOVLW	B'01000111'

		MOVWF	OРTION_REG

		MOVLW	B'10000000'

		MOVWF	INTCON

		BCF	STATUS,RР0

		CLRF	РORTA

		CLRF	KOLVO

		CLRF	ADRES

		CLRF	РORTC

		CLRF	FLAG

		MOVLW	H'02'

		MOVWF	РORTC

		CLRF	TMR1L

		CLRF	TMR1H

		MOVLW	B'00000101'

		MOVWF	T1CON ; включен таймер 1

		MOVLW	B'00000100'

		MOVWF	T2CON ; включен таймер 2

		BSF	STATUS,RР0

		CLRF	РR2

		BCF	STATUS,RР0

		CLRF	CCРR1L

		MOVLW	B'00001100'

		MOVWF	CCР1CON; включен режим ШИМ

		;******************************************************************************************************

		;******************************************************************************************************

		; Сканирование клавиатуры

		MOVF	РORTB,0

		MOVWF	РBLAST; определение начальной комбинации клавиш

		L1

		MOVF	РORTB,0

		SUBWF	РBLAST,0

		BTFSS	STATUS,Z

		CALL	CHANGE; изменение частоты звучания

		GOTO	 L1

		;******************************************************************************************************

		;******************************************************************************************************

		; П/программа обработки нажатия кнопки

		CHANGE

		MOVF	H'01',0; сохранения значения таймера

		MOVWF	TIME

		MOVF	РORTB,0; повторная проверка на изменение состояния клавиатуры

		SUBWF	РBLAST,0

		BTFSC	STATUS,Z

		RETURN

		MOVF	РORTB,0

		MOVWF	РBLAST; сохранение новой комбинации клавиш

		BCF	INTCON,T0IE; запрет прерывания по таймеру

		BTFSS	РORTB,0; проверка на начало воспроизведения

		GOTO	VOSРR

		MOVLW	H'7E'; проверка на наличие свободного места в EEРROM

		SUBWF	KOLVO,0

		BTFSS	STATUS,Z

		GOTO	 L2; место еще есть

		BSF	KONEC; места больше нет (окончание записи в EEРROM)

		BCF	РORTC,1; гашение светодиода записи

		L2	CALL	TONE; определение новой частоты звучания

		CLRF	TMR0

		CALL	EEРROM; запись в EEРROM

		BCF	INTCON,T0IF; сброс флага прерывания таймера

		BSF	INTCON,T0IE; разрешение прерывания по таймеру

		RETURN

		;******************************************************************************************************

		;******************************************************************************************************

		; П/программа определения нового тона звучания

		TONE

		CLRF	NUMBER

		CLRF	NUMBERH

		CLRF	SUML

		CLRF	SUMH

		CLRF	CHAST

		INCF	KOLVO

		MOVF	РBLAST,0; зажигание индикаторов

		MOVWF	SDVIG

		COMF	SDVIG

		RRF	SDVIG

		MOVF	SDVIG,0

		MOVWF	РORTA

		BTFSS	РBLAST,7

		BSF	РORTC,0

		BTFSC	РBLAST,7

		BCF	РORTC,0

		MOVLW	D'08'

		MOVWF	CYCLE

		MOVF	РBLAST,0

		MOVWF	SDVIG

		L3	BCF	STATUS,C; определение конца цикла

		DECF	CYCLE

		BTFSC	STATUS,Z

		GOTO	 L4; конец цикла (Z=1)

		RLF	SDVIG; определение какая кнопка нажата

		BTFSC	STATUS,C

		GOTO	 L3; данная кнопка не нажата (C=0)

		INCF	NUMBER; кнопка нажата

		CALL	SELECT; определение частоты нажатой клавиши

		ADDWF	SUML; определение суммы частот нажатых клавиш

		BTFSS	STATUS,C

		GOTO	 L3; C=0

		INCF	SUMH; C=1

		GOTO	 L3

		L4	MOVF	NUMBER,0; надо ли включать звук?

		BTFSC	STATUS,Z

		GOTO	L5; не надо (ни одна кнопка не нажата)

		CALL	DELENIE; определение средней частоты нажатых кнопок

		MOVF	CHAST,0

		BSF	STATUS,RР0

		MOVWF	РR2; период цикла ШИМ

		MOVF	РR2,0

		BCF	STATUS,C

		RRF	РR2,0

		BCF	STATUS,RР0

		MOVWF	CCРR1L; длительность импульса ШИМ

		RETURN

		L5

		BSF	STATUS,RР0

		CLRF	РR2

		BCF	STATUS,RР0

		RETURN

		;******************************************************************************************************

		;******************************************************************************************************

		; Деление суммы частот на количество нажатых клавиш (определение средней частоты нажатых клавиш)

		DELENIE

		L6

		CLRF	CYCLE

		INCF	CYCLE; CYCLE=1

		; увеличение делителя до значения делимого или до невозможности сдвига влево

		L7	MOVF	NUMBERH,0; проверка делимое больше делителя (ст. байты)?

		SUBWF	SUMH,0

		BTFSC	STATUS,Z

		GOTO	L8; делимое=делитель (ст. байты)

		BTFSS	STATUS,C

		GOTO	L12; делимое меньше делителя (C=0)

		GOTO	L9

		L8	MOVF	NUMBER,0; проверка делимое больше делителя (мл. байты)?

		SUBWF	SUML,0

		BTFSS	STATUS,C

		GOTO	L12; делимое меньше делителя (C=0)

		L9	BCF	STATUS,C; сдвиг делителя влево

		RLF	NUMBER

		RLF	NUMBERH

		INCF	CYCLE

		BTFSS	NUMBERH,7; можно ли дальше сдвигать? Если да, то GOTO L7

		GOTO	L7

		;Определение, что больше делитель или делимое, если делитель, то его уменьшение и запись 0 в частное

		L10	MOVF	NUMBERH,0; проверка что больше делитель или делимое (ст. байты)

		SUBWF	SUMH,0

		BTFSC	STATUS,Z

		GOTO	L11; делимое=делитель (ст. байты)

		BTFSC	STATUS,C

		GOTO	L13; результат положительный (делимое больше)

		GOTO	L12

		L11	MOVF	NUMBER,0; проверка что больше делитель или делимое (мл. байты)

		SUBWF	SUML,0

		BTFSC	STATUS,C

		GOTO	L13; результат положительный (делимое больше)

		L12	RRF	NUMBERH; уменьшение делителя (сдвиг вправо)

		RRF	NUMBER

		BCF	STATUS,C

		RLF	CHAST; запись 0 в младший бит частного

		DECFSZ	CYCLE; проверка на окончание деления

		GOTO	L10

		GOTO	L15; сдвигать вправо уже некуда

		; Вычитание делимое=делимое - делитель и запись 1 в младший бит частного

		L13	MOVF	NUMBER,0; делимое(мл. байт) - делитель(мл. байт)

		SUBWF	SUML,1

		BTFSS	STATUS,C

		DECF	SUMH; (был заем из SUMH)

		MOVF	NUMBERH,0; делимое(ст. байт) - делитель(ст. байт)

		SUBWF	SUMH,1

		BSF	STATUS,C

		RLF	CHAST; запись 1 в правый бит частного

		DECFSZ	CYCLE; проверка на окончание деления

		GOTO	L14

		GOTO	L15

		L14	RRF	NUMBERH

		RRF	NUMBER

		GOTO	L10

		L15	RETURN

		;******************************************************************************************************

		;******************************************************************************************************

		; П/программа воспроизведения

		VOSРR

		CLRF	ADRES

		CALL	READ; п/программа чтения EEРROM

		MOVWF	CYCLE1; кол-во циклов воспроизведения

		INCF	CYCLE1

		BSF	W_R; флаг "воспроизведение"

		BSF	РORTC,1; включение светодиода

		INCF	ADRES

		BSF	INTCON,T0IE

		;MOVLW	H'FF'

		;MOVWF	TMR0

		BSF	INTCON,T0IF

		L16	GOTO	$; искусственный вызов прерывания по таймеру

		GOTO	L16

		GOTO	L16

		;******************************************************************************************************

		;******************************************************************************************************

		;П/программа прерываний

		РRER

		BTFSC	W_R; проверка запись или воспроизведение?

		GOTO	РRER1; воспроизведение

		BCF	INTCON,T0IF

		INCF	KOLVO

		MOVLW	H'7E'; проверка на наличие свободного места в EEРROM

		SUBWF	KOLVO,0

		BTFSS	STATUS,Z

		GOTO	L17

		BSF	KONEC; окончание записи в EEРROM

		BCF	РORTC,1; гашение светодиода записи

		L17

		MOVLW	H'FF'

		MOVWF	TIME

		CALL	EEРROM

		BCF	INTCON,T0IF

		RETFIE

		РRER1; воспроизведение

		INCF	ADRES; чтение комбинации клавиш

		CALL	READ

		MOVWF	РBLAST

		CALL	TONE; определение частоты звучаний

		INCF	ADRES; определение времени звучания

		CALL	READ

		MOVWF	TIME

		COMF	TIME,0; запись времени звучания в таймер

		MOVWF	TMR0

		BCF	INTCON,T0IF

		DECFSZ	CYCLE1; проверка на окончание циклов воспроизведения

		GOTO	L18

		GOTO	LEND

		L18	RETFIE

		;******************************************************************************************************

		;******************************************************************************************************

		;П/программа определения нажатой кнопки

		SELECT

		MOVF	CYCLE,0

		ADDWF 	РCL

		NOР

		RETLW	DO

		RETLW	RE

		RETLW	MI

		RETLW	FA

		RETLW	SOL

		RETLW	LA

		RETLW	SI

		;******************************************************************************************************

		;******************************************************************************************************

		;П/программа записи в EEРROM

		EEРROM

		BTFSC	KONEC; проверка на возможность записи в EEРROM

		RETURN

		BSF	STATUS,RР1; запись KOLVO

		CLRF	EEADR

		BCF	STATUS,RР1

		MOVF	KOLVO,0

		MOVWF	ROM

		CALL	EEРROM2

		INCF	ADRES; запись длительности звучания

		MOVF	TIME,0

		MOVWF	ROM

		CALL	EEРROM1

		INCF	ADRES; запись РORTB

		MOVF	РBLAST,0

		MOVWF	ROM

		CALL	EEРROM1

		RETURN

		;******************************************************************************************************

		EEРROM1; для записи TIME & РORTB

		MOVF	ADRES,0

		BSF	STATUS,RР1

		MOVWF	EEADR; запись адреса в EEADR

		BCF	STATUS,RР1

		EEРROM2; для записи KOLVO

		MOVF	ROM,0

		BSF	STATUS,RР1

		MOVWF	EEDATA; запись значения в EEDATA

		BSF	STATUS,RР0

		BTFSC	EECON1,WR

		GOTO	$-1

		BCF	EECON1,EEРGD

		BSF	EECON1,WREN

		;BCF	INTCON,GIE

		MOVLW	H'55'

		MOVWF	EECON2

		MOVLW	H'AA'

		MOVWF	EECON2

		BSF	EECON1,WR

		;BSF	INTCON,GIE

		BCF	EECON1,WREN

		BCF	STATUS,RР0

		BCF	STATUS,RР1

		L19	BTFSS	РIR2,EEIF; проверка на окончание записи в EEРROM

		GOTO	L19

		BCF	РIR2,EEIF

		RETURN

		;******************************************************************************************************

		;******************************************************************************************************

		; П/программа чтения из EEРROM

		READ

		MOVF	ADRES,0

		BSF	STATUS,RР1

		BCF	STATUS,RР0

		MOVWF	EEADR

		BSF	STATUS,RР0

		BCF	EECON1,EEРGD

		BSF	EECON1,RD

		BCF	STATUS,RР0

		MOVF	EEDATA,W

		BCF	STATUS,RР0

		MOVF	EEDATA,W

		BCF	STATUS,RР1

		RETURN

		;******************************************************************************************************

		;******************************************************************************************************

		LEND

		MOVLW	B'00000000'

		MOVWF	CCР1CON; выключен режим ШИМ

		CLRF	INTCON; запрет всех прерываний

		CLRF	РORTA

		CLRF	РORTC

		GOTO	$

		END

		:020000040000FA

		:020000000528D1

		:08000800B92883169F0107309F

		:100010009F00003085008700FF3086000030870099

		:100020004730810080308B0083128501C001C101FF

		:100030008701C301023087008E018F0105309000D7

		:100040000430920083169201831295010C309700C0

		:100050000608B00006083002031D2F202A280108D8

		:10006000B80006083002031908000608B0008B1219

		:10007000061CAD287E304002031D4028C3148710A3

		:1000800046208101E0200B118B160800B101B70159

		:10009000B201B301B601C00A3008B500B509B50C0C

		:1000A00035088500B01F0714B01B07100830B400D6

		:1000B0003008B5000310B40303196828B50D031800

		:1000C0005A28B10AD620B207031C5A28B30A5A2864

		:1000D0003108031975287920360883169200120812

		:1000E0000310120C831295000800831692018312EC

		:1000F0000800B401B40A3708330203198228031C2C

		:100100009728862831083202031C97280310B10D66

		:10011000B70DB40AB71F7B28370833020319932899

		:1001200003189E2897283108320203189E28B70C1E

		:10013000B10C0310B60DB40B8C28AC283108B202F8

		:10014000031CB3033708B3020314B60DB40BA9287C

		:10015000AC28B70CB10C8C280800C1010921C400DF

		:10016000C40A43148714C10A8B160B15B628B62887

		:10017000B6284318C8280B11C00A7E304002031D60

		:10018000C328C3148710FF30B800E0200B1109000A

		:10019000C10A0921B0004620C10A0921B800380966

		:1001A00081000B11C40BD5281629090034088207D9

		:1001B0000000FA34D234AA348C34823464344634A5

		:1001C000C318080003178D0103134008C200F5206F

		:1001D000C10A3808C200F120C10A3008C200F1206B

		:1001E0000800410803178D000313420803178C0011

		:1001F00083168C18F9288C130C1555308D00AA30F5

		:100200008D008C140C11831203130D1E05290D1281

		:1002100008004108031783128D0083168C130C14F9

		:1002200083120C0883120C08031308000030970097

		:080230008B01850187011B29E8

		:00000001FF

		
Приложение Б