close

Вход

Забыли?

вход по аккаунту

?

Zapiska

код для вставкиСкачать
Министерство образования и науки Российской Федерации
Государственное образовательное учреждение
высшего профессионального образования
МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ
Кафедра Вычислительные Машины, Системы и Сети
Курсовой проект по дисциплине
"Микропроцессорные системы"
Тема:
"Разработка микропроцессорной системы для управления объектом"
Выполнил: Суховерхий В.А.
группа А-07-06
Руководители проекта: Гольцов А. Г.
Москва, 2014
СОДЕРЖАНИЕ
ВВЕДЕНИЕ4
1. РАЗРАБОТКА АППАРАТНЫХ СРЕДСТВ5
1.1.Разработка структурной схемы МПС5
1.2.Составление карты распределения адресного пространства7
1.3.Разработка микропроцессорного блока MPM9
1.4.Разработка блока внешней памяти MEM13
1.5.Разработка блока ввода - вывода IOU15
1.6.Разработка блока индикации LED19
1.7.Разработка блока управления CPAN25
1.8.Расчет электрического сопряжения МПС29
1.9.Расчет аппаратных затрат31
1.10.Расчет конденсаторов для повышения помехоустойчивости31
1.11.Расчет потребляемой мощности32
1.12.Временные диаграммы для режима ввода значений X1 - X434
2. РАЗРАБОТКА ПРОГРАММНОЙ ЧАСТИ37
2.1. Организация программы37
2.2. Разработка алгоритма37
2.3. Обработка прерываний от внешних источников42
2.4. Разработка программы модуля ввода-вывода43
ЗАКЛЮЧЕНИЕ46
СПИСОК ЛИТЕРАТУРЫ47
Приложение А. Техническое задание46
Приложение Б. Схема электрическая принципиальная49
Приложение В. Перечень элементов51
Приложение Г. Описание микропроцессора AT89С5254
Приложение Д. Описание микросхемы ПЗУ M27C64A65
Приложение Е. Описание микросхемы ОЗУ M48Z0872
Приложение Ж. Описание микросхемы ЦАП AD739077
Приложение И. Описание микросхемы источника опорного напряжения LM414084
Приложение К. Описание микросхемы генератора тактовых импульсов DS1099DA88
Приложение Л. Листинг программы узла MPM 92
Приложение М. Описание микропроцессора PIC16F74107
Приложение Н. Листинг программы узла аналого-цифрового преобразователя113
Приложение П. Схема электрическая структурная117
ВВЕДЕНИЕ
Целью курсового проектирования является приобретение навыков разработки микропроцессорных систем (МПС) на примере проектирования микропроцессорной системы для управления некоторым объектом. Техническое задание на проект приведено в Приложение А. На рис. 1 представлена схема взаимодействия МПС с объектом управления, здесь MPU - микропроцессорная система, OU - объект управления. Рис. 1. Взаимодействие МПС и объекта управления
Микропроцессорная система принимает информацию об объекте управления в виде входных сигналов X1 - X7 от внешних аналоговых и цифровых датчиков, вырабатывает управляющие воздействия (цифровые - Y1, Y2, Y3 и аналоговый Y4) в соответствии с законом управления и подает их на исполнительный механизм. Также в MPU от OU поступают сигналы прерывания от датчика аварийной сигнализации и от датчика напряжения питания (INT0 и INT1). Курсовой проект состоит из двух частей: разработка аппаратных средств МПС (расчет электрического сопряжения компонентов, построение структурной и принципиальной электрических схем, расчет аппаратных затрат и т.д.) и разработка алгоритмов и программных модулей на языке Ассемблера. Принципиальная электрическая схема приводится в Приложении Б. Структурная электрическая схема приводится в Приложении П. Перечень элементов используемых в МПС приводится в Приложении В. Основой микропроцессорной системы является микроконтроллер АТ89С52, характеристики которого приведены в Приложении Г. 1. РАЗРАБОТКА АППАРАТНЫХ СРЕДСТВ
1.1. Разработка структурной схемы МПС
Структурная схема МПС (рис. 2) состоит из микропроцессорного блока (МРМ), блока внешней памяти (MEM), состоящего из оперативного запоминающего устройства (RAM) и постоянного запоминающего устройства с ультрафиолетовым стиранием (EPROM), блока ввода-вывода (IOU), блока управления (CPAN) и блока индикации (LED). Для связи всех устройств МПС предусмотрены шины BA и BD адреса и данных, а также шина управления ВС. Рассмотрим перечисленные модули.
Микропроцессорный блок MPM Этот блок является центральным модулем МПС и построен на основе микроконтроллера АТ89С52. Микропроцессорный блок предназначен для обработки внешних сигналов X1-X4, внешних сигналов прерывания , и прерывания INT2 от нажатия на одну из двух командных клавиш, сигналов данных, выработки сигналов адреса и управления.
Блок внешней памяти MEM
Данный блок состоит из двух блоков NVSRAM (ОЗУ) и EPROM (ПЗУ с ультрафиолетовым стиранием). Он предназначен для хранения информации о системе (текущее состояние регистров микроконтроллера) в случае отказа основного источника питания и для хранения команд в случае расширения управляющей программы. Блок ввода-вывода IOU
Этот блок предназначен для преобразования входных аналоговых сигналов X5, X6, X7 в цифровые значения и цифрового кода Q4 в аналоговую форму Y4, формирования сигнала Y1, а также для выработки сигнала звуковой аварийной сигнализации. Значение Q4 передается от микроконтроллера по интерфейсу SPI.
Рис. 2. Структурная схема микропроцессорной системы
Блок управления CPAN
Этот блок управляет работой МПС. Включает клавиатуру и схемы управления ею. Помимо кода символа от клавиатуры, который формируется сигналами адреса и данных, блок CPAN вырабатывает сигнал сброса микроконтроллера и сигнал прерывания INT2. Блок индикации LED
Блок индикации отображает информацию о состоянии МПС. Этот блок содержит средства отображения значений Х1, ..., Х4, Q4, которые передаются по шине данных, и звуковой аварийной сигнализации. 1.2. Составление карты распределения адресного пространства
Используемая в проекте микроконтроллер АТ89С52 содержит внутреннюю память команд ёмкостью 8 Кбайт (ПЗУ) и память данных емкостью 256 байт (ОЗУ). Для размещения программного обеспечения, даже с учетом необходимого резерва, памяти ПЗУ микроконтроллера вполне достаточно. Но, в большей степени для учебных целей, а также в случае значительного расширения программного обеспечения, будем использовать только внешнее ПЗУ. Для этого на вход микроконтроллера подается уровень логического нуля. Выберем ПЗУ емкостью 8 Кбайт, тогда для адресации потребуется 13 адресных линий. Таким образом, диапазон адресов памяти программ будет с 0000H по 1FFFH, при обращении к которой будет формироваться активный низкий уровень сигнала . С помощью него будет происходить выбор микросхемы ПЗУ. По сигналу RESET микроконтроллер переходит на команду по адресу 0000Н, и эта команда должна осуществлять переход на блок начальной инициализации.
Для обеспечения резерва памяти данных нужно поставить внешний блок ОЗУ. Это внешнее ОЗУ выберем энергонезависимым и с емкостью 8 Кбайт, тогда для адресации потребуется 13 адресных линий. Таким образом, диапазон адресов памяти данных во внешнем блоке ОЗУ будет с 0000H по 1FFFH. Обращение к внешнему и внутреннему блокам ОЗУ осуществляется по разным командам (mov и movx соответственно), поэтому допускается перекрытие их адресов. Так же допускает перекрытие адресного пространства ОЗУ и ПЗУ, так как их выбор происходит по разным управляющим сигналам.
Остальное адресное пространство останется в резерве или будет использовано для адресации периферийных устройств. Сигналы выборки устройств будут дешифрироваться из трех разрядов адреса A13, A14 и A15. Дешифратор активируется при условии появления сигнала чтения или записи. Блок памяти EPROM должен выбираться при условии, что сигнал =0. Распределение адресов при обращении к внешним устройствам (ВУ) показано в табл. 2.
Таблица 1
Таблица распределения адресов блока памяти
Адрес устройстваКодировкаДвоичная16-ричнаяA15A14A13A12A11A10A9 - A0Начальный адрес внешнего ПЗУ00000000000hКонечный адрес внешнего
ПЗУ00011111FFFhНачальный адрес внешнего ОЗУ00000000000hКонечный адрес внешнего ОЗУ00011111FFFh Таблица 2 Адресация внешних устройств
Адресуемое ВУАдресные сигналыАдресА15А14А13А12A11A10Регистр для записи сигналов X1-X4001xxx2000hТаймера010xxx4000h- счетчик 001000x4000h- счетчик 101001x4800h- управляющее слово01011x5800hРегистр для чтения X50110016400hРегистр для чтения X60110106800hРегистр для чтения X70111007000hРегистр индикации100xxx8000hРегистр выбора индикатора и выдачи кода X1-X4 на светодиоды101xxxA000hРегистр для перебора столбцов клавиатуры110xxxC000hРегистр для считывания строк клавиатуры111xxxE000h 1.3. Разработка микропроцессорного блока MPM
Схема электрическая принципиальная данного блока приведена на рис. 3.
1.3.1. Состав микропроцессорного блока В состав микропроцессорного блока MPM входят:
- микроконтроллер АТ89С52 фирмы Atmel (DD3 на рис.3);
- микросхема дешифратора KР1554ИД7 (DD4 на рис.3), для получения сигналов выбора внешних устройств;
- микросхема регистра КР1554ИР22 (DD2 на рис.3) для записи младшего байта адреса;
- регистр КР1554ИР23 (DD1 на рис.3) для записи сигналов X1-X4 от двоичных датчиков;
- 2 элемента НЕ КР1554ЛН1 (DD4.1, DD4.2 на рис.3) для инверсии управляющего сигнала;
- элемент 2И КР1554ЛИ1(DD8.1 на рис.3) для формирования сигнала выбора дешифратора;
- 3 элемента 2И-НЕ КР1554ЛА3 (DD9.1, DD9.2, DD9.3 на рис.3) для формирования сигналов выбора регистров для получения значений X5, X6, X7.
1.3.2. Обращение к памяти
Цикл обращения к внешней памяти выполняется за два машинных такта микроконтроллера. На выходах порта Р0 формируются разделенные во времени младший байт адреса и данные, на выходах порта Р2 - старший байт адреса. Поскольку во время второго такта на выходе порта Р0 формируются данные, адрес будет потерян. Чтобы этого не произошло, необходимо сохранить адрес в буферном регистре. Для записи младшего байта служит стробирующий сигнал ALE, вырабатываемый микроконтроллером.
Рис. 3. Схема электрическая принципиальная микропроцессорного блока MPM
В качестве буферного 8-разрядного регистра выберем микросхему КР1554ИР22. В данной МПС нет необходимости переводить линии адреса на выходе регистра в третье состояние, так как микроконтроллер - единственное устройство, управляющее шиной адреса, поэтому на вход EZ регистра подадим уровень логического нуля.
1.3.3. Обработка прерываний
MПС осуществляет приём и обработку внешних сигналов прерываний и , которые поступают на входы и микроконтроллера и обрабатываются внутренними обработчиками прерываний. Так как микроконтроллер содержит только 2 внутренних обработчика внешних сигналов прерываний, то сигнал прерывания INT2 от управляющих клавиш на клавиатуре поступает на вход внутреннего счетчика микроконтроллера (вход T0) и инициализирует его переполнение, что приводит к прерыванию и, соответственно, его обработке. В режиме 0 в регистр счетчика должно быть предварительно записано значение FFH.
1.3.4. Регистр для записи сигналов X1-X4
Поскольку выходов микроконтроллера недостаточно, воспользуемся регистром для формирования дополнительного порта. На четыре разряда этого порта будем подавать сигналы X1-X4. Необходимо взять регистр с третьим состоянием, поскольку его выводы соединены с общей шиной данных. Выберем микросхему КР1554ИР23. Данный регистр срабатывает по фронту сигнала. Поэтому на вход EZ регистра подадим прямой сигнал выборки с дешифратора, а на вход С - инвертированный.
1.3.5. Организация шины управления ВС
Выбор всех внешних устройств МПС производится на основе таблиц распределения адресов. Для обращения к внешнему ПЗУ используется сигнал , формируемый микроконтроллером при выборке команды. Выбор внешнего устройства будет происходить сигналами А13, А14 и А15 подаваемых на дешифратор, который будет активироваться только при активировании сигнала или . В качестве дешифратора выберем микросхему KР1554ИД7.
Сброс микроконтроллера осуществляется посредством сигнала SBRST от блока управления подаваемого на вход RST микроконтроллера, а также с помощью встроенного сторожевого таймера. Назначение всех выводов портов микроконтроллера приведено в табл. 3.
Таблица 3
Назначение выводов портов микроконтроллера
№ вывода портаНазвание сигналаНазначениеВход/
выходP0.0-P0.7ВD (0-7)/
BA (0-7)Выдача младшего байта адреса. Ввод/вывод байта данныхвход/
выходP2.0-P2.7BA (8-15)Выдача старшего байта адресавыходP1.0не задействованP1.1Y2Выдача управляющего сигнала Y2выходP1.2Q1Сигнал начала счета счетчика 1 внешнего таймеравыходP1.3Сигнал сброса ЦАПвыходP1.4не задействованвыходP1.5SDIСигнал загрузки данных в ЦАПвыходP1.6Y3Выдача управляющего сигнала Y3выходP1.7Синхросигнал ЦАПвходP3.0не задействованвыходP3.1не задействованвыходP3.2Вход прерывания INT0входP3.3Вход прерывания INT1входP3.4INT2Вход прерывания INT2входP3.5CEСигнал начала счета счетчика 2 внешнего таймеравыходP3.6Сигнал записи выходP3.7Сигнал чтения выход 1.3.6. Тактовый генератор
Допустимая частота синхронизации микроконтроллера лежит в пределах от 0 до 33 МГц. Выберем частоту синхронизации микроконтроллера равную 5 МГц. Используем в качестве ZQ1 кварцевый резонатор HC-49S -5 МГц. В цепь резонатора дополнительно включаются конденсаторы С1 и С2, емкостью 30 пФ каждый. Выберем в качестве С1, С2 конденсатор К10-9-25-30 пФ  5%.
Период тактовой частоты генератора:
Т = 1/fT = 1/5 МГц = 200 нс,
где fT - частота микроконтроллера. Тогда длительность одного машинного цикла равна:
ТCY = N* Т = 12*200 = 2.4 мкс,
где N - это число периодов сигнала тактового генератора в машинном цикле.
1.4. Разработка блока внешней памяти MEM 1.4.1. Разработка блока ПЗУ
Схема электрическая принципиальная ПЗУ приведена на рис. 4.
В соответствии с заданием емкость памяти в МПС должна быть выбрана с запасом в 10-20 раз, учитывающим возможные изменения алгоритма управления. Выберем в качестве БИС ПЗУ программ микросхему M27C64A [4] с организацией 8К слов x 8 разрядов, представляющую собой РПЗУ с ультрафиолетовым стиранием. Микросхема M27C64A может работать в режимах хранения, считывания, стирания и программирования. Блок запоминающего устройства проектируется с учётом только режимов хранения и считывания. В связи с этим вся необходимая информация должна быть занесена в память M27C64A [4] заблаговременно с помощью программатора.
Для обеспечения режимов хранения и считывания на вход VCC и VPP подаётся напряжение питания UCC. На вход подается так же UCC , поскольку режим программирования не используется. Выбор микросхемы и считывание будет происходить по сигналу , который поступает на входы и . После прихода сигнала на выходах Q0 - Q7 появляются данные. В остальное время информационные выходы микросхемы находятся в третьем состоянии.
Адресные входы А0 - А12 микросхемы подключаются к линиям BA0 - BA12 шины адреса соответственно. Выходы данных Q0 - Q7 подключаются к линиям BD0 - BD7 шины данных соответственно. Рис. 4. Схема электрическая принципиальная блока EPROM
1.4.2. Разработка блока ОЗУ
Схема электрическая принципиальная ОЗУ приведена на рис. 5.
Рис. 5. Схема электрическая принципиальная блока RAM
Основной задачей ОЗУ является сохранение состояния регистров CPU при отказе основного источника питания. Поэтому ОЗУ необходимо выбирать энергонезависимым. Для построения блока RAM используем микросхему М48Z08 [4] фирмы STMicroelectronics с временем доступа в 100 нс. Микросхема представляет собой статическое ОЗУ с встроенным источником питания CAPHAT (литиевая батарейка), имеет ёмкость 8К слов  8 разрядов, достаточную для хранения всех данных с требуемым запасом.
Также достоинства микросхемы - это низкое потребление и наличие специального режима управления при отключении основного источника питания. Данный режим обеспечивает автоматический перевод в режим не выбора и защиту от записи при напряжении 4,5 В < VPDF < 4,75 В. Число циклов чтения не ограничено.
Адресные входы А0 - А12 микросхемы подключаются к линиям BA0 - BA12 шины адреса соответственно. Входы/выходы данных DQ0 - DQ7 подключаются к линиям BD0 - BD7 шины данных соответственно.
На вход выбора микросхемы поступает сигнал . Запись осуществляется по сигналу с выхода микроконтроллера, а чтение по сигналу . При отсутствии обращения к ОЗУ выходы микросхемы находятся в третьем состоянии. Линии шины данных замкнуты на питание через подтягивающие регистры, встроенные в корпус микроконтроллера, как указано в технической документации.
1.5. Разработка блока ввода - вывода IOU Принципиальная электрическая схема блока ввода/вывода IOU представлена на рис. 6.
Рис. 6. Схема электрическая принципиальная блока ввода-вывода IOU
1.5.1. Состав блока интерфейсных устройств IOU
В состав данного блока входят:
- микросхема таймера КР580ВИ53 [1] (DD13 на рис.6), предназначенная для выработки управляющего внешнего сигнала Y1, а также сигнала аварийной сигнализации ALARM; - микросхема ЦАП AD7390 [3] (DD19 на рис.6) для преобразования значения Q4 в аналоговый сигнал Y4;
- источник опорного напряжения LM4140 [3] (DD18 на рис.6) для подачи на вход ЦАП величины опорного напряжения;
- микросхема генератора тактовых импульсов DS1099DA [3] (DD20 на рис.6) для синхронизации таймера;
- микроконтроллер PIC16F74 (DD14 на рис.6), в качестве узла АЦП;
- регистры КР1554ИР23 [1] (DD15, DD16, DD17 на рис.6) для хранения оцифрованных значений X5, X6, X7.
1.5.2. Описание работы блока ввода-вывода и подключения микросхем В качестве узла АЦП используется микроконтроллер PIC16F74. Аналоговые сигналы X5, X6, X7 заведем на входы P0.0, P0.1 и P0.2 соответственно. На порт P0.3 подается опорное напряжение. Оцифрованные данные будут поступать из микроконтроллера PIC16F74 в регистры, из которых при необходимости микроконтроллер AT89C52 будет считывать преобразованные значения X5, X6, X7. Выберем частоту синхронизации микроконтроллера PIC16F74 равную 5 МГц. Используем в качестве ZQ2 кварцевый резонатор HC-49S -5 МГц. В цепь резонатора дополнительно включаются конденсаторы С5 и С6, емкостью 30 пФ каждый. Выберем в качестве С5, С6 конденсатор К10-9-25-30 пФ  5%.
Цифро-аналоговый преобразователь служит для формирования аналогового сигнала Y4 и работает от внешнего источника напряжения. ЦАП взаимодействует с микроконтроллером через интерфейс SPI. Используются два входа: SDI - вход данных, CLK - вход для подачи синхросигнала. Интерфейс SPI реализован в микроконтроллере AT89С52 на портах P1.5 и P1.7. В инструкции производителя советуют также подключать к входу VDD два параллельно соединенных между собой фильтрующих конденсатора. В качестве конденсаторов С9 и С10 возьмем конденсаторы К10-17-25В - 0,1 мкФ  10% и К50-35-16В - 10 мкФ20% соответственно.
Источник опорного напряжения формирует напряжений 1,024В. Входы Vin и Enable подключены к напряжению питания через резистор R20. Согласно документации производителя, к входу Vref подключим конденсатор C4. В качестве конденсатора С4 возьмем конденсатор К10-17А Н90 - 1.0мкФ (-20+80)%. Вход GND подключим к земле. С выхода Vref подается опорное напряжение 1,024В, которое поступает на вход Ref микросхемы ЦАП и порт P0.3 микропроцессора PIC16F74. Еще одним элементом данного блока является программируемый таймер. Микросхема формирует сигналы с различными временными параметрами. Выбор микросхемы производится низким уровнем сигнала подаваемого на вход с дешифратора. Загрузка данных производится по 8-разрядной шине данных. Внутри микросхема организована как три счётчика - канала, каждый из которых работает независимо от другого и программируется отдельно. Для адресации внутренних регистров микросхемы используются разряды A11 и А12 с шины адреса ВА. Входы CEi служат для разрешения счета. На вход СЕ0 первого счетчика, который служит для формирования сигнала Y1, поступает сигнал разрешения с порта Р1.2 микроконтроллера, на вход СЕ1 второго счетчика, необходимого для формирования сигнала аварийной сигнализации ALARM, - с порта Р3.5. Операции записи или считывания определяются входами и , соединенные с соответствующими выходами микроконтроллера. На вход Сi каждого из счетчиков поступают тактовые сигналы с генератора тактовых импульсов. Частота генератора постоянна и составляет 1.048МГц. Частота выходов генератора программируется на заводе занесением в ПЗУ генератора делителя частоты. Делители частот задаются независимо для каждого выхода. Мы используем генератор DS1099DA, последние две буквы в обозначении говорят о том, что частота выхода OUT0 - 0.131 МГц, а выхода OUT1 - 1.048 МГц. Поскольку выход OUT1 не используется, подключим к UCC, на вход подадим уровень логического нуля. На вход VCC подадим напряжение питания, вход GND подключим к земле. В инструкции производителя советуют также подключать к входу VCC два параллельно соединенных между собой фильтрующих конденсатора. В качестве конденсаторов С7 и С8 (на рис. 8) возьмем конденсаторы К10-17-25В - 0,1 мкФ  10% и К10-17-25В - 0,01 мкФ  10% соответственно.
1.6. Разработка блока индикации LED 1.6.1. Состав блока индикации LED
Индикаторная часть служит для отображения звуковой аварийной сигнализации, вывода на светодиодные индикаторы X1, X2, X3, X4 и вывода значения функции Q4 в десятичной форме. Принципиальная электрическая схема блока индикации представлена на рис. 7. В состав данного блока входят: - регистр индикации КР1554ИР23 [1] (DD6 на рис. 7), который сохраняет и подает код цифры на семисегментные индикаторы;
- регистр КР1554ИР23 [1] (DD7 на рис. 7), который осуществляет функции выбора семисегментного индикатора и одновременно выдает код X1, ..., X4 на светодиоды;
- семисегментные индикаторы АЛС312Б (HG1-HG4 на рис. 7) для вывода информации из микроконтроллера;
- светодиоды VD1-VD4 для вывода кода X1, ..., X4. Используем светодиоды АЛ112Д [5];
- транзисторы KT501 [5] (VT1 - VT4); - 2 элемента НЕ КР1554ЛН1 [2] (DD4.3, DD4.4 на рис.7) для инверсии управляющих сигналов.
Рис. 7. Схема электрическая принципиальная блока индикации LED
1.6.2. Описание работы блока индикации и подключения микросхем
Для индикации значений входных сигналов X1, X2, X3, X4, а также для реализации звуковой аварийной сигнализации используем
светодиоды АЛ112Д (VD1-VD4) со следующими характеристиками:
- красный цвет свечения;
- сила света не менее 150 мкКд;
- максимально допустимая температура корпуса светодиода - 70 °С;
- прямое падение напряжения на светодиоде при номинальном прямом токе Uпр ном = 2 В;
- номинальный прямой ток светодиода Iпр ном = 10мА;
- максимально допустимый прямой ток через светодиод Iпр max = 12мА.
Значения X1, X2, X3, X4 подаются с выходов 4 - 7 регистра DD7. Сигнал управления аварийной сигнализацией подается с выхода таймера из блока IOU.
Номинальный прямой ток через диод составляет 10мА, чтобы обеспечить это условие, поставим резисторы R13 - R16. Выходное напряжение низкого уровня микросхемы КР1554ИР23 UOL.ИР23 ≤ 0.4 В .
Рассчитаем сопротивление резисторов R13 - R16 для диодов, управляемых с помощью регистра. Расчет будем производить на примере резистора R13.
Диод начинает светиться, когда на выходе регистра логический 0, в этом случае напряжение на участке цепи "светодиод VD1 - резистор R13" UR13-VD1 будет находиться в диапазоне:
UCC min - UOL.ИР23 max < UR13-VD1 < UCC max - UOL.ИР23 min; (6.1)
4.5 - 0.4 < UR13-VD1 < 5.5 - 0.1;
UR13-VD1 min = 4.1 B < UR13-VD1 <5.4 B = UR13-VD1 max,
где UR13-VD1.min - минимальное напряжение на участке цепи "светодиод VD1 - резистор R13", UR13-VD1 max - максимальное напряжение на участке цепи "светодиод VD1 - резистор R13". Тогда напряжение на резисторе R13 будет лежать в приделах: UR13 min = UR13-VD1 min - Uпр ном = 4.1 - 2 = 2.1 B; (6.2)
UR13 max = UR13-VD1 max - Uпр ном = 5.4 - 2 = 3.4 B, (6.3)
где UR13 min - минимальное напряжение на резисторе R13, UR13 max - максимальное напряжение на резисторе R13. Тогда сопротивление резистора найдем следующим образом:
R13≤ UR13 max/ Iпр ном = 3.4 / 0.01 = 340 Ом; (6.4)
R13≥ UR13 min/ Iпр ном = 2.1 / 0.01 = 210 Ом. (6.5)
Выберем резистор номиналом 330 Ом, тогда мощность рассеивания составит:
PR13 = U2R13 / R13 = 3.32 / 330 = 0.033 Вт. (6.6)
Проведя аналогичные расчеты для резистора R16, получим:
R16 ≤ 340 Ом; (6.7)
R16 ≥ 210 Ом. (6.8)
Возьмем в качестве R13-R16 резисторы С1-4 0.125 - 330 Ом  5%.
Для отображения значения Q4 используются четыре семисегментных индикатора с общими анодами HG1 - HG4. Количество индикаторов выбрано из расчета числа разрядов кода Q4. Так как в МПС выбран 10-разрядный АЦП, то число двоичных разрядов Q4 не может превысить 10, следовательно, максимальное значение Q4 в десятичной системе счисления равно: Q4 < 210 = 1024. Индикатор АЛС312Б имеет следующие характеристики:
- красный цвет свечения;
- сила света не менее 150 мкКд;
- постоянный прямой ток через один сегмент IIND = 10 мА;
- постоянный прямой ток через все сегменты IIND общ = 80 мА;
- предельный постоянный прямой ток через один сегмент IIND max = 11 мА;
- постоянное прямое напряжение при токе IIND = 10 мА UIND ≤ 2 В;
- температура окружающей среды от - 60 С до 70 С.
С целью экономии аппаратных средств для вывода данных используется режим динамического отображения. В любой момент времени данные высвечиваются только на одном индикаторе, а другие отключены. Так как переключение между индикаторами осуществляется с частотой в несколько десятков герц, нам кажется, что все они горят непрерывно. Переключение между индикаторами будем осуществлять программно с частотой 200 Гц.
За выбор семисегментного индикатора отвечает регистр DD6. Для этого на соответствующем выходе регистра должен быть низкий уровень напряжения (логический 0), так как транзисторы p-n-p типа. Транзистор KT501Б, который работает в ключевом режиме, имеет следующие характеристики:
- максимальный ток коллектора IК max = 300 мА;
- предельное напряжение между коллектором и эмиттером UКЭ max = 15 В;
- предельное напряжение между коллектором и базой UКБ max = 15 В;
- предельное напряжение между эмиттером и базой UЭБ max = 10 В;
- коэффициент  = 40  120;
- напряжение между коллектором и эмиттером в режиме насыщения UКЭ нас = 0.4 В.
При степени насыщения S = 2 ток базы равен:
IБ = S*Iк /  = S*IIND общ /  =2*80 / 40 = 4 мА. (6.9)
Резистор R1 обеспечивающий работу транзистора VT1 в режиме насыщения, в котором напряжение на базе транзистора должно быть меньше напряжения на его эмиттере UЭБ нас = 0,5 В. Исходя из максимального выходного тока низкого уровня регистра DD7 IOL.ИР23max = 86 мА можно рассчитать минимальное и максимальное значение резистора R1:
R1 ≥ (UCC max - UЭБ нас) /IOL.ИР23max = (5.5 - 0.5)/86*10-3 = 52 Ом. (6.10)
R1 ≤ (UCC max - UЭБ нас)/IБ = (5.5 - 0.5)/(4*10-3) = 1125 Ом. (6.11)
Выберем резистор R1 номиналом 910 Ом, тогда мощность рассеивания составит:
PR1 = (UCC - UЭБ нас)2 / R1 = (5.5 - 0.5)2 / 910 = 0.027 Вт. (6.12)
В качестве резисторов R1, R2, R3, R4 будем использовать резисторы С1-4 0.062 - 910 Ом  5% . Рассчитаем номиналы резисторов R6 - R12. Ток на одном входе светодиодного индикатора не должен превышать IINDmax = 11 мА. Расчет резисторов будем производить на примере R12.
При включенной индикации в любой момент времени включен лишь один индикатор. Током, протекающим через неактивный индикатор, можно пренебречь. Падение напряжения на резисторе R12 составляет:
UR12 = UCC max - UКЭ нас - UIND = 5.5 - 0.4 - 2 = 3.1 B. (6.13)
Тогда сопротивление резистора должно быть:
R12 ≥ UR12/ IINDmax = 3.1 / 11*10-3 = 282 Ом. (6.14)
Возьмем сопротивление номиналом 330 Ом, тогда рассеиваемая мощность равна:
PR12= U2R12 / R12 = 3.12 / 330 = 0.029 Вт. (6.15)
В качестве резисторов R6 - R12 будем использовать резисторы С1-4 0.062 - 330 Ом  5%. На управляющие входы индикаторов, отвечающие за индикатор точки, подадим логическую единицу. Для этого через резистор R5 подведем Ucc. Расчет номинала резистора R5 аналогичен расчету резисторов R6 - R12 без учета падения напряжения на транзисторе. В качестве резистора R5 будем использовать резистор С1-4 0.125 - 330 Ом  5%. 1.7. Разработка блока управления CPAN 1.7.1. Состав блока управления CPAN
Принципиальная электрическая схема блока управления представлена на рис. 8. В состав данного блока входят: - микросхема регистра клавиатуры КР1554ИР23 [2] (DD11 на рис.8), используемая для принятия части кода нажатой клавиши;
- микросхема КР1554ИР23 [2] (DD12 на рис.8), осуществляющая перебор столбцов клавиатуры, поочередно обнуляя значение напряжения на одном из своих выводов; - клавиатурная матрица 3x8 кнопок НА3.604 (SB2 - SB25 на рис. 8), а также кнопка сброса (SB1 на рис. 10);
- 2 элемента НЕ КР1554ЛН1 [2] (DD4.5, DD4.6 на рис.8) для инверсии сигналов управления;
- 2 элемента 2ИЛИ КР1554ЛЛ1[2] и элемент 2И-НЕ КР1554ЛА3 [2] (DD10.1, DD10.2 и DD9.1 на рис.8) для формирования сигнала прерывания INT2.
1.7.2. Описание работы блока управления и подключения микросхем
Сначала рассчитаем резисторы и конденсаторы цепей кнопки сброса, которая генерирует сигнал SBRST для сброса микроконтроллера АТ89S8252. Коммутируемое напряжение кнопки 220 В, максимально допустимый ток коммутации: IНА3max = 4 А. Для сброса АТ89S8252 нужно удерживать высокий уровень сигнала SBRST в течение двух машинных циклов, это время равно:
ТSBR = 2* ТCY = 2*2.4 = 4.8 мкс. (7.1)
Уровень сигнала при этом, согласно документации должен быть:
UIH.RST.min = 0.7 *UCC.min = 0.7*4.5 = 3.15 В (7.2)
UIH.RST.max = UCC.max + 0.5 = 5.5 + 0.5 = 6 (7.3)
Рис. 8. Схема электрическая принципиальная блока управления CPAN
Обеспечим этот уровень и длительность RC-цепочкой С3-R19. Таким образом, получаем: ТSBR = R19*C3*ln(UCC.max / UIH.RST.min ) ≥ 4.8 мкс; (7.4)
R19*C3 ≥ (4.8*10-6) / ln(UCC.max / UIH.RST.min ); (7.5)
R19*C3 ≥ (4.8*10-6) / ln(5.5 / 3.15 );
R19*C3 ≥ 8.61 мкс.
В качестве конденсатора C3 возьмем К10-17А-М47-1000пФ  20%. Тогда сопротивление R19 будет равно:
R19 ≥ 8.61*10-6 / C3 = 8.61*10-6 / 1*10-9 = 8610 Ом = 8610 Ом (7.6)
В качестве R19 будем использовать резистор С1- 4 0.062 - 10 кОм  5%.
При замыкании кнопки сброса, вследствие слишком большого тока может возникать искрение, из-за чего могут окислиться контакты. Для ограничения этого тока поставим резистор R18. При этом необходимо обеспечить минимальное значение напряжения логической единицы на входе RST процессора:
R18 ≥ (UCC.max - UIH.RST.min )/ IНА3max = (5.5 - 3.15) / 4 = 0.587 Ом (7.8)
Возьмем резистор R24 номиналом 100 Ом. Тогда ток протекающий через него:
IR18 = (UCC.max - UIH.RST.min ) / R18 = 5.52 / 100 = 55 мА. (7.9)
В качестве R18 будем использовать резистор С1-4 1 - 100 Ом  5%.
Клавиатурная часть образует матрицу 3 строки  8 столбцов и состоит из 24 кнопок SB2-SB25, в их числе 16 клавиш шестнадцатеричного кода и три командные клавиши: "МЕНЮ", "ВВОД", "ПУСК".
Будем менять содержимое регистра DD12 так, чтобы поочередно на одном из выходов был логический 0, а на остальных выходах логическая 1. Нулевой уровень на выходе активизирует соответствующий столбец матрицы. При нажатии кнопки регистр DD11 считывает 0 на той строке, где была нажата клавиша. В результате по двум двоичным комбинациям на регистрах DD11 и DD12 мы можем однозначно определить нажатую кнопку. При этом управление регистром DD12 осуществляется сигналом , а для управления регистром DD11 сигналом , переводящий выходы регистра в третье состояние, когда к нему нет обращения. Если оператором нажата одна из командных клавиш "ВВОД" или "МЕНЮ", то должен сформироваться сигнал прерывания INT2. Пусть этим двум командным клавишам соответствуют кнопки SB23 и SB24, тогда сигнал будет формироваться по следующей формуле:
, (7.10)
где и - логический 0 в 7-ом и 8-ом столбцах клавиатурной матрицы соответственно, - логический 0 в 3-ей строке клавиатурной матрицы.
Резисторы R26-R28 являются подтягивающими и создают напряжение высокого логического уровня на входах регистра DD11, когда ни одна из кнопок строки не нажата. Определим номинал резисторов R21-R23. Для обеспечения логической единицы на входе DD11 необходимо:
UIH.DD11.min = UCC min - UR21 ≥ 2.4 В; (7.11)
R21 ≤ (UCC min - UIH.DD15.min )/ IIH.DD11; (7.12)
R21 ≤ (4.5 - 2.4 ) / 20*10-6; R21 ≤ 105 кОм. Минимальное значение сопротивления R21 определяется из того условия, что ток, идущий через диоды VD5 - VD12 в случае установления на выходе регистра DD12 логического нуля, не должен превысить максимально допустимого. Выберем в качестве диодов VD5 - VD12 германиевые импульсные диоды Д312.
Для них максимальное значение прямого тока равно Iпр.max = 50 мА. При этом учтем худший случай, когда одновременно нажаты все кнопки одной строки (притом нажаты 2 командные клавиши "ВВОД" и "МЕНЮ"):
Iпр.max = 3*(IR21 + IIL.DD11 ) + IIL.DD10.1 + IIL.DD10.2; (7.13)
R21 ≥ UCC max / IR21; (7.14)
R21 ≥ 3*UCC max / (Iпр.max -3*IIL.DD11 - IIL.DD10.1 - IIL.DD10.2 ); (7.15)
R21 ≥ 3*5.5/(50*10-3 - 3*0.2*10-3 - 0.1*10-3 - 0.1*10-3);
R21 ≥ 335 Ом.
Возьмем сопротивление номиналом 22 кОм, тогда рассеиваемая мощность равна:
PR21 = U2СС / R26 = 5.52 / 22*103 = 0.25 мВт. (7.16)
Расчет резисторов R22,R23 аналогичен. В качестве резисторов R21 - R23 будем использовать резисторы С1-4 0.062 - 22 кОм  5%. 1.8. Расчет электрического сопряжения МПС
Для правильной работы всей системы и каждого ее элемента в частности необходимо проверить электрическое сопряжение. Под электрическим сопряжением микросхем системы будем понимать выполнение следующих соотношений для каждого выхода любой микросхемы МПС:
IOL  IIL + IOLL ; (8.1)
IOH  IIH + IOLH ; (8.2)
CLlim  CI + CO + CM , (8.3)
где: К - число входов других элементов, подключенных к данному выходу; L - число выходов других элементов, подключенных к данному выходу; IIL, IIH, IOL, IOH - входные и выходные токи элементов для состояний 0 и 1; CI, CO, CLlim, CM - емкости входа и выхода элемента, допустимая емкость нагрузки, подключаемой к выходу, и емкость монтажа; IOLL, IOLH - токи утечки на выходах низкого и высокого уровней. При невыполнении этих условий необходимо использовать другие элементы в системе или воспользоваться буферными повторителями для увеличения нагрузочной способности. Согласно техническому заданию, необходимо проверить электрическое сопряжение адресных цепей. Поскольку к адресным цепям выходы элементов периферийных устройств не подключаются, то будут отсутствовать токи утечек от невыбранных БИС IOLH, IOLL, а из выходных емкостей БИС останется только выходная емкость самого элемента. Учитывая вышесказанное, формулы 1.1-1.3 упростятся до:
IOL  IIL ; (8.4)
IOH  IIH ; (8.5)
CLlim  CI + CO + CM , (8.6)
К цепям адреса относятся:
- цепи сигналов BA0 - BA7: DD2 - DS1, DS2;
- цепи сигналов BA8, BA9: DD3 - DS1, DS2;
- цепи сигналов BA10: DD3 - DS1, DS2, DD9.1;
- цепи сигналов BA11, BA12: DD3 - DS1, DS2, DD9.1, DD13;
По формулам 8.4-8.6 рассчитаем сопряжение:
Для DD2 - DS1, DS2:
IOL.DD2 = 86мА ≥ IIL.DS1+IIL.DS2 = 10мкА+1мкА = 11мкА
IOH.DD2 = 75мА ≥ IIH.DS1+IIH.DS2 = 10мкА+1мкА = 11мкА
CLlim(DD2)= 500 пФ ≥ CI(DS1)+ CI(DS2)+CO(DD2)+CM=4,5+6+10+20=40,5 пФ;
Для DD3 - DS1, DS2:
IOL.DD3 = 86мА ≥ IIL.DS1+IIL.DS2 = 10мкА+1мкА = 11мкА
IOH.DD3 = 75мА ≥ IIH.DS1+IIH.DS2 = 10мкА+1мкА = 11мкА
CLlim(DD3)= 80 пФ ≥ CI(DS1)+ CI(DS2)+CO(DD3)+CM=4,5+6+10+20=40,5 пФ;
Для DD3 - DS1, DS2, DD9.1, DD13:
IOL.DD3 = 26мА ≥ IIL.DS1+IIL.DS2+IIL.DD9.1+IIL.DD13 = = 10мкА+1мкА+1мкА+10мкА = 22мкА
IOH.DD3 =60мкА ≥ IIH.DS1+IIH.DS2+IIH.DD9.1+IIH.DD13 = = 10мкА+1мкА+1мкА+10мкА=22мкА
CLlim(DD3)= 80 пФ ≥ CI(DS1)+ CI(DS2)+ CI(DD9)+ CI(DD13)+CO(DD3)+CM =
= 4,5+6+10+6+10+20=56,5 пФ;
Для сигнала BA10 так же будет удовлетворяться условие, так как линия нагружена даже меньше, чем BA11, BA12. Электрическое сопряжение по адресным цепям обеспечивается.
1.9. Расчет аппаратных затрат
За единицу сложности аппаратных затрат принимается 16-выводной корпус. Список оборудования приведен в табл. 4. Если корпус имеет большее число внешних выводов: 24, 28, 40 или 48, то его сложность оценивается с помощью коэффициента перевода, значение которого равно соответственно 2, 3, 5 или 6.
Таблица 4
Используемые в МПС микросхемы
МикросхемаОбозначение на схемеКоличествоЧисло контактовКоэффициент переводаВсегоКР1554ИР23DD1, DD6, DD7, DD11, DD12, DD15, DD16 , DD178201.512КР580ВИ53DD1312422АТ89S8252DD314055КР1554ЛН1DD411411КР1554ЛА3DD911411ADR540BDD18130.50.5DS1099DADD20180.50.5КР1554ИР22DD21201.51.5KР1554ИД7DD511611КР1554ЛЛ1DD1011411PIC16F74DD1414055AD7390DD19180.50.5КР1533ЛИ1DD811411M27C64A DS112833M48Z08DS212833Итого:2238 В общей сложности МПС содержит 22 микросхемы, аппаратные затраты эквивалентны 38 условным корпусам.
1.10. Расчет конденсаторов для повышения помехоустойчивости
Для устранения помех высокой частоты устанавливают фильтры, состоящие из конденсаторов малой емкости, а для устранения помех низкой частоты - фильтры низких частот, состоящие из конденсаторов большой емкости. Выберем конденсаторы для проектируемой МПС из расчета:
- для блокирования низкочастотных помех устанавливается электролитический конденсатор емкостью в расчете не менее 1 мкФ на одну микросхему;
- для блокирования высокочастотных помех один конденсатор на группу не более чем 10 микросхем, из расчета 0.01 - 0.1 мкФ на микросхему.
Конденсаторы для блокирования высокочастотных помех устанавливаются по всей площади печатной платы равномерно относительно микросхем, конденсаторы для блокирования низкочастотных помех устанавливаются как можно ближе к контактам разъемов МПС.
Всего имеем 22 корпуса, но поскольку для генератора тактовых импульсов DS1099DA и ЦАП AD7390 средства помехоустойчивости уже включены в соответствии с типовыми схемами , то расчет будем производить для 20 корпусов. В качестве фильтра низких частот установим три конденсатора К10-17-25В - 0,15 мкФ  20 % (С12, С13, С14, на электрической принципиальной схеме) из расчета один конденсатор на 6- 7 корпусов. В качестве фильтра низких частот поставим электролитический конденсатор К50-35-16В - 33 мкФ20% (С11 на электрической принципиальной схеме). 1.11. Расчет потребляемой мощности
Мощность, потребляемая МПС, будет включать в себя мощности всех микросхем входящих в состав МПС, а также мощности, выделяемые на резисторах. Расчет мощности модулей производится по формулам:
,(11.1)
,(11.2)
,(11.3)
,(11.4)
,(11.5)
где PCC.S - потребляемая мощность в статическом режиме, PCC.D1 - потребляемая мощность в динамическом режиме, PCC.D2 - потребляемая мощность, связанная со сквозными токами, UCC - напряжение питания, ICC - ток потребления, CL - емкость нагрузки, СO - выходная емкость элемента (если выходная емкость элемента неизвестна, возьмем ее значение равным 15 пФ), CI - суммарная входная емкость элементов нагрузки, СМ- монтажная емкость, TCY - время цикла вывода данных с элемента.
Таблица 5
Потребляемая мощность устройств МПС
Микросхема/ цепьОбозначение на схемеКоличествоПотребляемыеТок, мАМощность, мВтКР1554ИР23DD1, DD15, DD16, DD1750,1350,135КР1554ИР23DD6, DD710,1250,125КР1554ИР23DD1110,1260,126КР1554ИР23DD1210,1270,127КР580ВИ53DD131120660АТ89S8252DD3125137,5КР1554ЛН1DD410,040,22КР1554ЛА3DD910,040,22ADR540BDD1811582,5DS1099DADD2010,321,76КР1554ИР22DD210,080,44KР1554ИД7DD910,040,22КР1554ЛЛ1DD1010,040,22PIC16F74DD14120110AD7390DD1910,10,55КР1533ЛИ1DD810,040,22M27C64A DS1130165M48Z08DS2180440Ucc - R134404Ucc - R14108Ucc - R2130,75Ucc - R20166UCC - R5 130Итого2208 1.12. Временные диаграммы для режима ввода значений X1 - X4
Ввод значений X1-X4 производятся через регистр DD1, отображенный на адресное пространство. Операция чтения из памяти выполняется за два машинных цикла микроконтроллера. Формирование циклов записи производится с помощью команды
MOVX @DPTR, A
где А - адрес регистра DD1, откуда будем считывать данные, DPTR - 16-разрядный регистр , указатель памяти. Временные диаграммы чтения данных выглядят следующим образом (рис. 9):
Рис. 9. Цикл записи во внешнюю память данных
Сигнал ALE вырабатывается два раза в каждом машинном цикле. В начале второго машинного цикла первый сигнал ALE пропускается, поскольку в регистре необходимо сохранить младший байт адреса. Каждый машинный цикл состоит из 6 фаз или 12 тактов. Для того чтобы продемонстрировать чтение значений X1-X4 достаточно показать на диаграммах промежуток времени с середины первого машинного цикла, до середины второго. За первые два такта первого машинного цикла (на диаграммах не показано) осуществляется чтение кода операции. В середине первого цикла выставляется адрес операнда на выводах портов Р0 и Р2, причем младший байт адреса записывается в регистр по сигналу ALE. После того, как был выдан младший байт адреса, подается сигнал чтения и через порт P0 происходит ввод данных в микроконтроллер. Временные параметры для режима чтения
Таблица 6
Обозначение временного интервалаЗначениеМикроконтроллерРегистрВремя при идеальном срабатыванию по тактамЕди-ница изме-ренияminmaxminmaxtW(ALE)Длительность сигнала ALE360400нсtН(А-ALE)Время от поступления адреса до окончания сигнала ALE175200нсДлительность сигнала чтения1100151200нсВремя от окончания сигнала ALE до сигнала чтения550650600нсtV(А-ALE)Время от окончания сигнала ALE до окончания адреса175400нсВремя от окончания сигнала чтения до начала сигнала ALE175225200нс
После того как во втором машинном цикле активируется сигнал чтения, через дешифратор на вход и C регистра установятся сигналы низкого и высокого уровня соответственно. Задержка выдачи данных на регистре будет в итоге складываться из задержки распространения элементов DD8.1, DD5 и DD4.
Из временных диаграмм, представленных на рис. 9 и 10 видно, что цикл чтения значений X1-X4 происходит успешно. Рис. 10. Временные диаграммы чтения значений X1-X4
2. РАЗРАБОТКА ПРОГРАММНОЙ ЧАСТИ
2.1. Организация программы
Программное обеспечение МПС представляет собой программу для микроконтроллера AT89C52. Программа организована следующим образом: - описание констант и переменных, используемых в программе;
- основной цикл программы; - описание блоков основного текста программы;
- описание обработчиков прерываний;
- описание процедур, используемых в программе.
2.2. Разработка алгоритма
На рис. 11 представлена схема алгоритма управления объектом.
2.2.1. Инициализация АТ89C52 и микросхем МПС
Реализация данного блока основана на вызове процедуры INIC.
При инициализации МПС необходимо выполнить следующие действия: - запретить все аппаратные прерывания на время инициализации; - произвести инициализацию микроконтроллера;
- произвести инициализацию таймера КР580ВИ53 [1]; - установить высокий уровень на выходах регистра выбора индикатора, путем записи в регистр кода 0FFh;
- установить в 0 два старших разряда регистра для перебора строк клавиатуры для того, чтобы до начала опроса клавиатуры приходило прерывание от 2ух командных клавиш;
- разрешить аппаратные прерывания.
Рис. 11. Схема алгоритма управления объектом
Для начала произведем инициализацию таймера WATCHDOG (встроенный сторожевой таймер). Для этого необходимо занести в регистр управления сторожевого таймера WCON управляющее слово, которое разрешит его работу и задаст время реакции 1024 мс, т.е. если МПС не отвечает на команды в течение 1024 мс, то вырабатывается внутренний сигнал сброса микроконтроллера. Также необходимо настроить внутренние таймеры микроконтроллера. Настраиваем таймер/счетчик 0 для работы в качестве счетчика в режиме 2 (автоматическая перезагрузка при переполнении) , таймер/счетчик 1 для работы в качестве таймера в режиме 1 (16-разрядный таймер) , таймер 2 для работы в режиме 1 (16-разрядный таймер).
В регистр TH0 таймера/счетчика 0 необходимо загрузить значение FFh, таким образом, при поступлении сигнала на вход счетчика, будет происходить его переполнение, и вырабатываться прерывание. Таймер 2 будет служить для опроса клавиатуры, вывода на светодиодные индикаторы значения Q4, а также отсчета 0.5 секунд. Поскольку опрос клавиатуры и вывод на индикаторы будем производиться с частотой 200 Гц, то нужно загрузить в таймер значение, необходимое для счета 5 мс.
Инициализацией внешнего таймера КР580ВИ53 [1] является выбор режима работы его счетчиков. Загрузка числа отсчетов будет производиться непосредственно в блоке, в котором необходимо начать счет, поскольку процедура может вызываться несколько раз и нам необходимо каждый раз снова устанавливать значения.
Канал 0 внешнего таймера настраиваем в режиме работы 1 (ждущий мультивибратор), канал 1 внешнего таймера настраиваем в режиме работы 3 (генератор меандра).
2.2.2. Ввод цифровых сигналов X1 - X4, вычисление Q1 и формирование Y1 Реализация данного блока основана на вызове процедуры CALC_Q1. Схема алгоритма формирования управляющего сигнала представлена на рис. 12.
Двоичные сигналы X1-X4 подаются на вход внешнего регистра. Считывание сигналов необходимо производить с адреса 2000h. После считывания данных сигналов нужно вычислить функцию Q1= Х1 *Х3 + Х2 + Х4.
Если данная функция равна логической единице, то необходимо выработать сигнал Y1. Длительность данного сигнала равна Т1=40 мс, при этом его рабочий уровень высокий. Рис. 12. Схема алгоритма формирования сигнала Y1
2.2.3. Ввод X5 - X7
Реализация данного блока основана на вызове процедуры ADC.
Напряжения X5, X6 и X7 преобразуются в цифровую форму N5, N6 и N7 с помощью микроконтроллера PIC16F74 и записываются в регистры.
Считывание данных в главный микроконтроллер происходит по адресам 6400h, 6800h и 7000h для N5, N6 и N7 соответственно.
2.2.4. Вычисление Q2, сравнение его с Q0 и формирование управляющего сигнала
Реализация данного блока основана на вызове процедуры CALC_Q2. Схема алгоритма формирования управляющего сигнала представлена на рис. 13.
После того, как сформированы массивы N5 и N6, вычисляем функцию , где Q2I = N5I/2 + N6I + K. Затем полученное значение Q2 необходимо сравнить с константой Q0, находящейся в ПЗУ. ,
где n - разрядность АЦП.
Если Q2<Q0, то необходимо выработать сигнал высокого уровня Y2 длительностью T2= 30 мс. Если Q2>=Q0, то нужно выработать пачку сигналов Y3 с периодом 1 мс и скважностью 2. Длительность пачки T3=60 мс. Рис. 13. Схема алгоритма формирования сигналов Y2 и Y3
2.2.5. Вычисление Q4, преобразование в напряжение Y4, преобразование Q4 для вывода на индикаторы
Реализация данного блока основана на вызове процедуры CALC_Q4. После получения N7 вычисляется функция .
Здесь А0 = 0,5 В. Данные в ЦАП поступают в последовательной форме в соответствии с протоколом SPI, поэтому необходимо сформировать подпрограммы передачи данных.
Далее Q4 преобразуется в форму необходимую для вывода на светодиодные индикаторы.
2.2.6. Обеспечение необходимого времени цикла, проверка на останов (блоки 6-8)
Необходимое время цикла определяется количеством прерываний от таймера 2. Поскольку время от начала счета таймера до его перезагрузки составляет 5мс, то для обеспечения длительности в 0.5 с необходимо, чтобы прерывание пришло 100 раз.
Проверка на останов определяется с помощью флага. По умолчанию этот флаг стоит в 1, и выполнение цикла программа будет повторяться до тех пор, пока флаг не будет сброшен в 0.
2.3. Обработка прерываний от внешних источников
Прерывание поступает от аварийного датчика. Программа обработки прерывания выполняет следующие действия:
1. Включает звуковую сигнализацию с частотой 500 Гц,
2. Выдает на индикацию цифровой код Q4,
3. Переводит МПС в состояние ожидания. Выход МПС из состояния ожидания обеспечивается нажатием клавиши СБРОС.
Прерывание поступает в случае отказа источника питания.
Программа обработки прерывания переписывает в энергонезависимое ОЗУ текущие значения регистров микроконтроллера.
Прерывание INT2 возникает в случае нажатия клавиш ВВОД или МЕНЮ пульта управления. Затем идет определение кода нажатой клавиши. В случае нажатия оператором клавиши ВВОД на светодиодных индикаторах выводиться текущее значение константы К. При необходимости можно ввести с клавиатуры новое значение константы. Новое значение константы также отображается на индикаторах. Возврат к работе МПС производится нажатием клавиши ПУСК.
Если же нажата клавиша МЕНЮ, то на индикатор выводится номер выполняемой в данный момент функции. Перебор функций МПС осуществляется повторным нажатием клавиши МЕНЮ, а переход к выбранной функции осуществляется нажатием клавиши ПУСК.
2.4. Разработка программы модуля ввода-вывода
В качестве модуля оцифровки сигналов X5, X6 и X7 используется МК PIC16F74. В микроконтроллер АТ89C52 оцифрованные данные должны передаваться параллельно. Для этого используются регистры DD15, DD16 и DD17, которые реализуют буферное устройство между модулем ввода-вывода и микроконтроллером АТ89C52.
Для оцифровки применяется встроенный в МК PIC16F74 АЦП. Аналоговые сигналы X5, X6, X7 подаются на входы A0, A1 и A2 микроконтроллера соответственно. Оцифрованные данные передаются в буфер через порт B.
Оцифровывание сигналов происходит в бесконечном цикле программы непрерывно. Программа начинает выполняться при включении питания установки и заканчивает либо при нажатии на кнопку сброса или отключении питания.
Программа начинается с назначения портов А0, А1 и А2 аналоговыми, а А3 назначается опорным напряжением для АЦП. После этого порты В и С микроконтроллера PIC16F74 устанавливаются на передачу данных, а порт А - на прием. После инициализации начинается главный цикл программы, в котором идет непрерывный процесс приема аналоговых сигналов, их оцифровка и передача в буферные регистры. За счет этого достигается постоянная актуальность данных в регистрах, из которых она считывается основным микропроцессорным модулем АТ89C52.
В основном цикле программа последовательно принимает сигналы X5, X6 и X7 и оцифровывает их. После завершения оцифровки происходит передача данных в соответствующие регистры D15, D16, D17. Данные передаются через порт B параллельно по 8 бит для каждого оцифрованного сигнала. Выбор регистра происходит сигналами с выходов C0, С1 и C2 микроконтроллера. Соответствие регистров и сигналов С0, С1, С2 МК PIC16F74 приведено в таблице 7.
Схема алгоритма оцифровки и передачи данных в регистры DD15-DD17 приведена на рис. 14.
Таблица 7 Адресация регистров в МК PIC16F74
РегистрСигналВыходы порта СC0C1C2DD15X5100DD16X6010DD17X7001 Считывание оцифрованных данных производится программой основного микропроцессора АТ89C52 в функции ADC. Выполнение одной команды в микроконтроллере АТ89C52 необходимо 12 машинных тактов, а на выполнение одной команды в МК PIC16F74 затрачивается 4 такта. Работают оба микроконтроллера на одинаковой частоте синхронизации 5МГц. Таким образом, Частота обновления данных в буфере между основным процессорным модулем и модулем ввода-вывода будет происходить чаще, чем считывание, что обеспечит актуальность информации.
Запись и считывание данных из буфера происходят асинхронно. Это возможно за счет использования регистров КР1554ИР23.
Рис.14. Схема алгоритма оцифровки и передачи данных ЗАКЛЮЧЕНИЕ
В результате проектирования была создана микропроцессорная система управления объектом, построенная на микроконтроллере АТ89C52, с использованием периферийных микросхем серий КР1554, а также зарубежных фирм Analog Devices и STMicroelectronics. Разработано программное обеспечение, в соответствии с техническим заданием.
МПС обрабатывает 4 цифровых сигнала X1 - X4 от двоичных датчиков объекта и 3 аналоговых сигнала X5 - X7 в соответствии с заданными алгоритмами, и выдает 3 управляющих двоичных сигнала Y1 - Y3 заданной длительности и аналоговый сигнал Y4. МПС обрабатывает прерывания от аварийного датчика , при отказе источника питания и от оператора INT2, реагируя на них по заданному алгоритму.
МПС управляется 25-кнопочным пультом управления, имеет семисегментные светодиодные индикаторы, а также светодиоды, для вывода необходимой информации.
Затраты оборудования: МПС содержит 22 различных микросхем, при этом аппаратные затраты эквивалентны 38 условным корпусам (под условным корпусом понимается 16-выводной корпус).
Максимальная потребляемая мощность составляет 2,2 Вт.
Благодаря заложенной при проектировании аппаратной избыточности возможно расширение числа внешних устройств. Также возможно расширение алгоритма работы МПС.
СПИСОК ЛИТЕРАТУРЫ
1. Боборыкин А.В., Липовецкий Г.П. Литвинский Г.В. Однокристалльные микроЭВМ. - М.:МИКАП, 1994. - 400с.
2. Петровский И.И., Прибыльский А.В., Троян А.А., Чувелев В.С. Логические ИС КР1533, КР1554. Справочник. - М.:БИНОМ, 1993г. - 497с.
3. Официальный сайт компании MAXIM.
http://www.maxim-ic.com/
4. Официальный сайт компании STMicroelectronics.
http://www.st.com/stonline/
5. Сайт Чип Индустрия.
http://www.chipindustry.ru/
Приложение А
Техническое Задание
Приложение Б
МПС. Схема электрическая принципиальная
Приложение В
МПС. Перечень элементов
Приложение Г
Описание микропроцессора AT89C52
Приложение Д
Описание микросхемы ПЗУ M27C64A
Приложение Е
Описание микросхемы ОЗУ M48Z08
Микросхема M48Z08 представляет собой статическое ОЗУ со встроенным источником питания (литиевая батарейка САРНАТ), которая автоматически включается при отказе основного источника питания микросхемы, емкостью 64К бит с организацией 64К8. Данная микросхема обладает следующими характеристиками: время доступа 100 нс, времена циклов записи и считывания одинаковые, число циклов записи данных не ограничено, обеспечение сохранности записанных в ОЗУ данных в течение 11 лет, низкое потребление, специальный режим управления при отключенном основном источнике напряжения. Данный режим обеспечивает автоматический перевод микросхемы в режим невыбора и защиту от записи при напряжении питания 4,50 В <VPDF < 4,75 В.
Сигналы микросхемы:
- А0-А12 - адресные входы;
- DQ0-DQ7 - входы/выходы данных;
- - выбор микросхемы;
- - разрешение выхода;
- - разрешение записи;
- - напряжение питания;
- - земля.
Таблица Ж.1
Предельные режимы эксплуатации в рабочем диапазоне температур
ПараметрыЗначения параметровМин.макс.Диапазон температур, C-4085Напряжение питания, В-0,37Входное/выходное напряжение, В-0,37Выходной ток, мА-20Рассеиваемая мощность, W- 1
Таблица Ж.2
Статические параметры в режиме считывания в рабочем диапазоне температур
ПараметрыЗначения параметровМин.макс.Напряжение питания, UCC, В4,55,5Ток потребления в режиме считывания, ICC, мА-80Ток потребления в режиме хранения, ICCS, мА-3Входное напряжение, В
логического 0, UIL
логической 1, UIH
-0.3
2.2
0.8
UCC +0.3Выходное напряжение, В
логического 0, UOL
логической 1, UOH
-
2.4
0.4
-Выходной ток, мА
логического 0, IOL
логической 1, IOH
-
-
2.1
-1Ток утечки, мкА
по входу, ILI
по выходу, ILO
-
-
1
5
Таблица Ж.3
Динамические параметры в рабочем диапазоне температур
оОбозна-чениеПараметрЗначения параметрамин.макс.Режим считыванияtAVAV Время цикла чтения, нс100-tAVQV Время выборки данных относительно адреса, нс-100tELQV Время выборки данных относительно , нс-100tGLQV Время выборки данных относительно , нс-50tELQX Время снятия 3-го состояния относительно , нс10-tGLQX Время снятия 3-го состояния относительно , нс5-tEHQZ Время запрещения выходных данных после , нс-50tGHQZ Время запрещения выходных данных после , нс-40tAXQX Время распространения сигнала от А к DQ , нс5-Режим записиtAVAV Время цикла записи, нс100-tAVWL Время предустановки адреса относительно , нс0-tAVEL Время предустановки адреса относительно , нс0-tWLWH Длительность сигнала , нс80-tELEH Длительность сигнала , нс80-tWHAX Время предустановки высокого уровня относительно адреса, нс10-tEHAX Время предустановки высокого уровня относительно адреса, нс10-tDVWH Время предустановки данных относительно фронта , нс50-tDVEH Время предустановки данных относительно фронта , нс30-tWHDX Время удержания данных относительно фронта , нс5-tEHDX Время удержания данных относительно фронта , нс5-tWLQZ Время освобождения шины данных после подачи , нс50tAVWH Время предустановки адреса относительно фронта , нс80-tAVEH Время предустановки адреса относительно фронта , нс80-tWHQX Задержка использования шины относительно фронта , нс10-Емкостные параметрыCIВходная ёмкость, пФ-10CIOВыходная ёмкость, пФ-10CLЁмкость нагрузки, пФ-500 Временная диаграмма цикла чтения
Временная диаграмма цикла записи по сигналу Временная диаграмма цикла записи по сигналу Приложение Ж
Описание микросхемы ЦАП AD7390
Приложение И
Описание микросхемы источника опорного напряжения LM4140
Приложение К
Описание микросхемы генератора тактовых импульсов DS1099DA
Приложение Л
Листинг программы узла главного микропроцессорного модуля
;---------------------------------------------------------------------------------
;Описание констант и переменных, используемых в программе
;---------------------------------------------------------------------------------
BITVARSEGMENTBIT
;Константы, для удобства работы с портом Р1.
Y2EQUP1.1
Q1EQUP1.2
C_CLREQUP1.3
C_SSEQUP1.4
C_SDIEQUP1.5
Y3EQUP1.6
C_SCLKEQUP1.7
;Константы, для удобства работы с портом Р3.
CEEQUP3.5
;Адреса внешних устройств.
ADDR_RGINEQU2000h;регистр для ввода значений X1 - X4
ADDR_CT0EQU4000h;канал 0 внешнего таймера
ADDR_CT1EQU4800h;канал 1 внешнего таймера
ADDR_RUSEQU5800h;управляющее слово внешнего таймера
ADDR_X5EQU6400h;X5
ADDR_X6EQU68000h;X6
ADDR_X7EQU70000h;X7
ADDR_RGINDEQU80000h;регистр индикации
ADDR_RGNEQU0A000h;регистр выбора индикатора и ;выдачи кода X1-X4 на светодиоды
ADDR_RGSCEQU0C000h;регистр для перебора столбцов клавиатуры
ADDR_RGRDEQU0E000h;регистр для записи строк клавиатуры
;Управляющие слова внешних устройств.
CW_TIMER0EQU00110010b;режим 1 канала 0 внешнего таймера
CW_TIMER1EQU01110110b;режим 3 канала 1 внешнего таймера
;"Клавишные" константы.
MENU_KEYEQU 23
VVOD_KEYEQU22
PUSK_KEYEQU21
;Остальные константы.
SIZEMEQU10;кол-во элементов массивов X5 и X6
Q0EQU2048
A0EQU500
DSEGAT 0h
STACK:DS 20 ;задаем глубину стека
;Используемые переменные.
K: DS 1 ;код уставки
X1X4:DS 1;значения X1-X4
Q2: DS 2
Q4:DS 2
CHH: DS 1 ;переменные для счетчиков
CHL: DS 1
POZ:DS 1;смещение относительно массива с кодами позиций
ADRNUM:DS1 ;адрес выводимого числа
ADRNUM2:DS1
N7:DS2;число N7
COL:DS1;смещение в массиве KEY_MASS для выбора столбца
KEY:DS1;код нажатой клавиши
NUMF:DS1;номер функции
;Массивы
MASS: DS 4 ;массив с числами (4 - поскольку 4 знакоместа)
MASS2: DS 4 MASS_N5:DS 20;массив чисел N5 (10 двухбайтных чисел)
MASS_N6:DS20;массив чисел N6 (10 двухбайтных чисел)
;флаги
RSEGBITVAR
IS_Y2:DBIT1
IS_CONT:DBIT 1
IS_VYVOD:DBIT1
IS_KEYBOARD:DBIT 1
IS_V_KEYBOARD:DBIT 1
IS_KEYDOWN:DBIT 1
CSEG AT 0h
ORG 50h
;массив с кодами знаков от 0 до F
NUM_MASS: DB 00111111b, 00000110b, 01011011b, 01001111b, 01100110b, 01101101b, 01111101b, 00000111b, 01111111b, 01101111b,
01110111b, 01111111b, 00111001b, 00111111b, 01111001b, 01110001b
;массив с кодами позиций
POZ_MASS: DB 01111111b,10111111b,11011111b,11101111b,11111111b
;массив для перебора столбцов
KEY_MASS: DB 01111111b, 10111111b, 11011111b, 11101111b, 11110111b, 11111011b, 11111101b, 11111110b
CALLINIC
JMPMAIN
ORG03h ;обработчик внешнего прерывания INT0 (аварийный датчик)
JMPINT00;переход к обработке прерывания
ORG13h;обработчик внешнего прерывания INT1 (сбой питания)
JMP INT11;переход к обработке прерывания
ORG0Bh;обработчик прерывания от таймера 0;(прерывание от клавиатуры)
JMP INT2;переход к обработке прерывания
ORG1Bh;обработчик прерывания от таймера 1
;(формирования сигналов Y2, Y3)
JMP Y2Y3;переход к обработке прерывания
ORG2Bh;обработчик прерывания от таймера 2
JMPIND;(Если пришло прерывание от аварийного датчика, то ;вывод на индикаторы. Если пришло прерывание от ;клавиатуры, то и опрос клавиатуры. Подсчет кол-ва итераций.)
;---------------------------------------------------------------------------------
;ВВОД И ОБРАБОТКА ИНФОРМАЦИИ.
;---------------------------------------------------------------------------------
MAIN:
CLRQ1
CLRCE
SETB WCON.1
MOV A,NUMF
CJNEA,#1h,Callq2
CALLCALC_Q1
Callq2:
CJNEA, #2h,Callq3
CALLADC
CALLCALC_Q2
Callq3:
CALLADC
CALLCALC_Q4
;---------------------------------------------------------------------------------
;БЛОК ВЫРАБОТКИ ТРЕБУЕМОГО ВРЕМЕНИ ЦИКЛА
;---------------------------------------------------------------------------------;содержимое регистра R5 инкрементируется с периодом 5 мс
;за время цикла управления (500 мс) содержимое R5 ;изменится от 0 до 100, ;100=64h
CJNER5,#64h,$;ждем конца цикла управления
MOV R5,#0;обнуление R5
;---------------------------------------------------------------------------------
;ПРОВЕРКА НА ОСТАНОВ
;---------------------------------------------------------------------------------
JBIS_CONT,MAIN ;если стоит флаг продолжения - повторяем цикл
;---------------------------------------------------------------------------------
;ИНИЦИАЛИЗАЦИЯ AT89C52 И МИКРОСХЕМ МПС
;---------------------------------------------------------------------------------
INIC:
ORG150h
MOV SP,#STACK-1 ;создаем стек глубиной 20 байт
MOVIE,01111111b;разрешения каждого прерывания в ;отдельности, в ЕА будет 0 - запрет всех прерываний
MOVPOZ,#0 ;начальное смещение относительно массива с кодами позиций = 0
MOV ADRNUM,#MASS;начальный адрес выводимого числа указывает ;на первый элемент в массиве MOVADRNUM2,#MASS2 SETBHBEN;устанавливаем в 1 HBEN
MOVR5,#0;будем вести подсчет итераций для формирования 0.5 с
MOVCOL,#0 ;соответствует последнему столбцу
SETBIS_CONT;по умолчанию цикл будет повторятся
MOV SPCR, 01010000b;установка SPI
SETB C_SS;отключение сигнала выбора ЦАП
;Установка в 1 разряды регистра выбора индикатора и ;выдачи сигналов X1-X4
MOVDPTR,#ADDR_RGN;адрес регистра
MOVA,0FFH;записываем 1 во все его разряды
MOVX@DPTR,A MOV TMOD,#00011110b;настраиваем таймер/счетчик0 для работы в качестве ;счетчика в режиме2, таймер/счетчик1 для работы в ;качестве таймера в режиме 1
MOV TH0,#0FFh;запись значения в таймер Т0
SETBTR0;установка в 1
;выводим Q4 и опрашиваем клавиатуру с частотой 200 Гц
;5 мс = 2.4 мкс * 2083 - период вывода Q4
;2083 - число инкриментирований таймера до ;переполнения
;2083 = 823h, FFFFh - 823h + 7 = F7E3h
;7h учитывает временные затраты на выполнение команд ;(7 машинных ;циклов)
MOVTH2,#0F7h;записываем старший байт
MOVTL2,#0E3h;записываем младший байт
SETBTR2;запускаем таймер 2
MOV DPTR,#ADDR_RUS;запись управляющих слов во внешний таймер
MOV A,#CW_TIMER0;канал 0
MOVX@DPTR,A;
MOVA,#CW_TIMER1;канал 1
MOVX@DPTR,A;
;Ввод кода уставки. Uk = 0.024 В LSB = 0.001 В
;K = Uk/LSB = 24
MOVK,#9 ;Установка в 0 двух старших разрядов регистра для перебора строк клавиатуры ;(для того чтобы до начала опроса клавиатуры приходило прерываине от 2ух ;командных клавиш).
MOVDPTR,#ADDR_RGSC;адрес регистра
MOVA,00111111b;записываем необходимое значение
MOVX@DPTR,A MOV WCON,#01000011B ;период сторожевого таймера 1024 мс, запуск
SETBEA;разрешение всех прерываний
RET ;---------------------------------------------------------------------------------
; ВВОД ЦИФРОВЫХ СИГНАЛОВ Х1 - Х4, ВЫЧИСЛЕНИЕ Q1 И ФОРМИРОВАНИЕ Y1
;---------------------------------------------------------------------------------
CALC_Q1:
MOVA,#1;номер выполняемой функции
MOVNUMF,A
;вводим значения из регистра
MOVDPTR,#ADDR_RGIN ;адрес регистра для ввода значений X1 - X4
MOVX A,@DPTR;запись значений в аккумулятор
;запомним значения X1 - X4 для вывода на светодиоды
MOVX1X4,A
MOVC,ACC.2;в С записываем X1
ANLC,ACC.4;и X3, результат в С
ORLC,ACC.3;или X2, результат в С
ORLC,ACC.1;или X4, результат в С
JNCNOTQ1;если результат равен 0, то сигнал не формируется
CLRQ1;на случай, если таймер уже работал и ;бит был установлен в 1
;Таймер работает с частотой 0,131 МГц. Необходимая ;длительность
;сигнала - 40мс. Загружаемое число = 40*131= 1478h
MOVDPTR,#ADDR_CT0;адрес регистра счетчика 0
MOVA,#78h;заносим младший байт
MOVX@DPTR,A
MOVA,#14h;заносим старший байт
MOVX@DPTR,A
SETBQ1;запуск таймера
NOTQ1:
RET
;---------------------------------------------------------------------------------
; ВВОД X5 - Х7
;---------------------------------------------------------------------------------
ADC:
MOV R7,#SIZEM ;заносим кол-во эл-ов массива Х5
MOVR6,#1;для проверки, сформирован ли массив X5
MOVR0,#MASS_N5;в R0 адрес массива N5
;Цикл считывания данных
ADC_CYCLE1:
; Считываем данные с регистра
MOV DPTR,#ADDR_X5;записываем адрес регистра
MOVX A,@DPTR ;считывание
MOV R2,A ;младший байт N5 записываем в R2
MOV @R0,A;младший байт записываем в массив
INC R0;переход к следующей позиции в массиве
MOV @R0,0;старший байт - 0
INC R0
DJNZ R7, ADC_CYCLE1
MOVR0,#MASS_N6;в R0 адрес массива N5
MOV R7,#SIZEM ;заносим кол-во эл-ов массива Х5
;Цикл считывания данных
ADC_CYCLE2:
;Считываем данные с регистра
MOV DPTR,#ADDR_X6;записываем адрес регистра
MOVX A,@DPTR ;считывание
MOV R2,A ;младший байт N6 записываем в R2
MOV @R0,A;младший байт записываем в массив
INC R0;переход к следующей позиции в массиве
DJNZ R7, ADC_CYCLE2
MOV DPTR,#ADDR_X7;записываем адрес регистра
MOVX A,@DPTR ;считывание
MOV R0,#N7
MOV R0,A ;младший байт N7 записываем в R2
RET
;---------------------------------------------------------------------------------
; ВЫЧИСЛЕНИЕ Q2, СРАВНЕНИЕ ЕГО С Q0 И ФОРМИРОВАНИЕ УПРАВЛЯЮЩЕГО СИГНАЛА
;---------------------------------------------------------------------------------
CALC_Q2:
MOVA,#2;номер выполняемой функции
MOVNUMF,A
CLR A
;нахождение суммы чисел массива 1
MOV R1,# MASS_N5 ;в R1 адрес массива N6
MOV R2,# SIZEM ;в R2 кол-во эл-ов массива N6
CALL SUMMAS ;вызов процедуры суммирования чисел массива
MOV A,R7 MOV R0,A
MOV A,R6
MOV R4,A ;старший байт суммы чисел массива N5 будет в ;R4, младший - в R0 CLR A
MOV R7,A
MOV R6,A ;обнуляем регистры R7 и R6
;нахождение суммы чисел массива 2
MOV R1,# MASS_N6 ;в R1 адрес массива N5
MOV R2,# SIZEM ;в R2 кол-во эл-ов массива N5
CALL SUMMAS ;вызов процедуры суммирования чисел массива
;деление на 2 массива 2
MOV A,#2
MOV R2,A ;в R2 число, на которое делим
CALL DIVISION;вызов процедуры деления
;сложение первого массива,деленного на 2, и ; второго массива
MOVA,R0
ADDC A,R7
MOV R7,A
MOV A,R4
ADDCA,R6
MOV R6,A ;младший байт результата в r7, старший в r6
;деление на кол-во элементов в массиве
MOV A,#SIZEM
MOV R2,A ;в R2 число, на которое делим
CALL DIVISION;вызов процедуры деления
;прибавление K
MOV A,R7
ADD A,#LOW(K)
MOV Q2+1,A
MOV A,R6
ADDC A,#HIGH(K)
MOV Q2,A
;сравнения Q2 и Q0 и выработка соответствующего ;воздействия
MOV A,#HIGH(Q0) ;сравнение путем побайтового вычитания ;и анализа появления знака
SUBB A,Q2;вычитаем старшие байты
JB ACC.7, OBRABOTKA_Y3
MOV A,#LOW(Q0)
SUBB A,Q2+1;вычитаем младшие байты
JB ACC.7, OBRABOTKA_Y3
OBRABOTKA_Y2:
SETBIS_Y2;установка флага, что выработка сигнала Y2
;40 мс = 2.4 мкс * 16667 - длительность сигнала Y2
;16667 - число инкриментирований таймера до ;переполнения
;16667 = 411Bh, FFFFh - 411Bh + 6 = BEEAh
MOV TL1,#0EAh
MOV TH1,#0BEh;запись значения в таймер Т1
SETB Y2;устанавливаем в 1 соответствующий порт
SETBTR1;установка в 1 (запуск счета)
JNB TCON.7,$;проверка переполнения регистра TH1 ;(когда переполнится, начнется обработка прерывания, ;а потом уже переход на следующую команду)
CLR TF1;сброс признака переполнения
RET
OBRABOTKA_Y3:
CLRIS_Y2;сброс флага, что выработка сигнала Y2
MOVR7,#10
JMPNOT_OBR_Y3
OBR_Y3:
JNB TCON.7,$;проверка переполнения регистра TH1 SETB Y3;устанавливаем в 1 соответствующий порт
NOT_OBR_Y3:
;(когда переполнится, начнется обработка прерывания, ;а потом уже переход на следующую команду)
;40 мс = 2.4 мкс * 209 - пол периода ;209 - число инкриментирований таймера до ;переполнения
;209 = 0D1h, FFFFh - 0D1h + 6 = FF34h
MOV TL1,#34h
MOV TH1,#0FFh;запись значения в таймер Т1
SETB Y3;устанавливаем в 1 соответствующий порт
SETBTR1;установка в 1 (запуск счета)
JNB TCON.7,$;проверка переполнения регистра TH1 ;(когда переполнится, начнется обработка прерывания, ;а потом уже переход на следующую команду)
DJNZR7,OBR_Y3
RET
;---------------------------------------------------------------------------------
; ВЫЧИСЛЕНИЕ Q4, ПРЕОБРАЗОВАНИЕ В НАПРЯЖЕНИЕ Y4, ПРЕОБРАЗОВАНИЕ Q4 ДЛЯ ; ВЫВОДА НА ИНДИКАТОРЫ
;---------------------------------------------------------------------------------
CALC_Q4:
MOVA,#3;номер выполняемой функции
MOVNUMF,A
;вычисление Q4=A0+N7/4, результат Q4 - старший байт, Q4+1 - младший байт
MOVR4,N7+1;передаем R4 младший байт N7
MOV R5,N7;передаем R5 старший байт N7
MOV R0,#2
;деление N7/4
DIV4:
CLR C
MOV A,R5
RRC A;деление на 4 - сдвиг на 2 разряда
MOV R5,A
MOV A,R4
RRC A
MOV R4,A
DJNZ R0,DIV4
;сложение A0+N7/4
MOV A,#LOW(A0)
ADD A,R4
MOV Q4+1,A
MOV A,#HIGH(A0)
ADDCA,R5
MOV Q4,A
RET
;Преобразование сигнала с помощью ЦАП CLR C_SS;начало передачи
MOV A,Q4 ;заносим в А старший байт Q4
ANL A,#00000011B;Обнуляем старшие биты, т.к. АЦП - 10 р. MOV SPDR, A
MOV A,Q4+1 ;заносим младший байт в А
MOV SPDR, A
SETB C_SS;окончание передачи
PEREKODIROVKA:
MOVR2,Q4+1 ;R2 - младший байт, MOV R3,Q4;R3 - старший байт
MOV R7,#0h
;Начинаем выделение цифр из полученного слова
M0: ;определение старшего разряда, путем вычитания 1000
MOV A,R2
MOV R4,A
SUBB A,#TT1;вычитаем младший байт тысячи из старшего байта числа
MOV R2,A
MOV A,R3
MOV R5,A
SUBB A,#TT2 ;вычитание старшего разряда тысячи из старшего байта ;числа
MOV R3,A
INC R7
JNB ACC.7, M0 ;вычитаем, пока число не станет отрицательным и ;считаем число вычитаний, которое записываем в R7
DEC R7 ;уменьшаем R7 т.к. там один лишний раз вычли
MOV A,R7
MOV MASS+3,A ;сохраняем R7
MOV R7,#0h ;обнуляем R7
M1: ;выделяем вторую цифру путем вычитания 100 ;из остатка вычитания в М1 (он в R4,R5)
CLR C
MOV A,R4
MOV R2,A
SUBB A,#100
MOV R4,A
MOV A,R5
SUBB A,#0
MOV R5,A
INC R7
JNB ACC.7,M1 ;анализируем старший бит результата на 1 (если;выполняется, то значит рез-ат отрицательный, готово)
DECR7
MOVA,R7
MOV MASS+2,A
MOV A,R2;остаток M1 лежит в R2 - 1байт
MOV B,#10;последние две цифры получаем делением на 10
DIV AB
MOV MASS+1,A;сохраняем предпоследнюю цифру
MOV MASS,b;сохраняем последнюю цифру
RET
;-------------------------------------------------------------------
;ОБРАБОТЧИКИ ПРЕРЫВАНИЙ
;-------------------------------------------------------------------
;Обработка прерывания от таймера 1.
Y2Y3:
JB IS_Y2,INT_Y2;проверяем, какой сигнал вырабатывается
CLRY3;сбрасываем в 0 соответствующий порт
CLR TF1;сброс признака переполнения
;40 мс = 2.4 мкс * 209 - пол периода ;209 - число инкриментирований таймера до ;переполнения
;209 = 0D1h, FFFFh - 0D1h + 6 = FF34h
MOV TL1,#34h
MOV TH1,#0FFh;запись значения в таймер Т1
SETBTR1;установка в 1 (запуск счета)
CLRET1;разрешаем обработку прерываний от таймера 2
RETI
INT_Y2:
CLRY2;сбрасываем сигнал Y2
RETI
;Обработка прерываний от таймера 2.
IND:
;выводим Q4 и опрашиваем клавиатуру с частотой ;200 Гц
;5 мс = 2.4 мкс * 2083 - период вывода Q4
;2083 - число инкриментирований таймера до ;переполнения
;2083 = 823h, FFFFh - 823h + 7 = F7E3h
;7h учитывает временные затраты на выполнение команд ;(7 машинных ;циклов)
MOVTH2,#0F7h;записываем старший байт
MOVTL2,#0E3h;записываем младший байт
SETBTR2;запускаем таймер 2
JNBIS_VYVOD,NO_VYVOD
JNBIS_V_KEYBOARD,NO_V_K ;если вывод вызван из обработчика ;прерывания от клавиатуры, то необходимы другие ;параметры процедуры
MOVR6,ADRNUM2;параметры, необходимые в процедуре
MOVR7,#MASS2
MOVR2,#X1X42
JMPTOCALL
NO_V_K:
MOVR6,ADRNUM;параметры, необходимые в процедуре
MOVR7,#MASS
MOVR2,X1X4
TOCALL:
CALL VYVOD
NO_VYVOD:
JNBIS_KEYBOARD,NO_KEYBOARD
CALL KEYBOARD
NO_KEYBOARD:
SETB WCON.1 ;сброс счета сторожевого таймера на начало
INCR5;увеличиваем счетчик для формирования 0.5 с RETI
;Обработка прерывания от аварийного датчика.
INT00:
CLRIS_V_KEYBOARD;если был вывод, запущенный из обработчика ;прерывания с клавиатуры, то запрещаем этот вывод
MOVIE,10101000b;запрет всех прерываний, кроме прерывания от ;таймера 2 и таймера 1
SETBIS_VYVOD ;тем самым начинаем вывод значений на ;индикаторы и светодиоды
;Вывод сигнала аварийной звуковой сигнализации
;Таймер работает с частотой 0,131 МГц. Необходимый ;период сигнала - 500мс. ;Загружаемое число = 500*131=65500 = FFDCh MOVDPTR,#ADDR_CT1;адрес регистра счетчика 0
MOVA,#0DCh;заносим младший байт
MOVX@DPTR,A
MOVA,#0FFh;заносим старший байт
MOVX@DPTR,A
SETBCE;запуск таймера
ALARM: JMP ALARM
;выход из подпрограммы аварийного прерывания только ;по сбросу RETI
;Обработка прерывания от источника питания.
INT11:
CLREA;запрет всех прерываний
PUSH ACC;cохраняем аккумулятор в стек
PUSH 00h;cохраняем регистр R0 в стек PUSH 01h;cохраняем регистр R1 в стек
;Cохраняем регистры специальных функций. MOV R0, 0F0h;адрес регистра с самым старшим адресом (B)
MOV R1, 0F0h;адрес во внешнем ОЗУ
SAVE_SFR:
MOV A, @R0;в аккумулятор заносим регистры, начиная с регистра В
MOVX @R1, A;заносим регистр из аккумулятора во внешнее ;энергонезависимое ОЗУ по тому же адресу
DEC R0;уменьшаем адрес внешнего ОЗУ
DEC R1;уменьшаем адрес копируемого регистра
CJNE R1,#7Fh,SAVE_SFR;проверка: все ли SFR сохранены
;Сохраняем четыре банка регистров R0 - R7.
MOV R0, 1Fh;адрес регистра R7 из 3 банка регистров
MOV R1, 1Fh;адрес во внешнем ОЗУ
SAVE_RX:
MOV A, @R0 ;в аккумулятор заносим регистры, начиная с R7 (банк 3)
MOVX @R1, A;заносим регистр из аккумулятора во внешнее ;энергонезависимое ОЗУ по тому же адресу
DEC R0;уменьшаем адрес внешнего ОЗУ
DJNZ R1, SAVE_Rx;уменьшаем адрес копируемого регистра
;Сохраняем аккумулятор, а также R0 и R1 (банк 0).
;В ОЗУ сохранены не те значения A, R0 и R1, т.к. они ;менялись в подпрограмме
PUSH DPL
PUSHDPH
POP 01h;извлекаем R1 из стека MOV A, R1;помещаем R1 в аккумулятор
MOV DPTR, #1;задаем в DPTR адрес R1 во внешнем ОЗУ
MOVX @DPTR, A;сохраняем R1
POP 00h;извлекаем R0 из стека
MOV A, R0;помещаем R0 в аккумулятор
MOV DPTR, #0;задаем в DPTR адрес R0 во внешнем ОЗУ
MOVX @DPTR, A;сохраняем R0
POP ACC;извлекаем аккумулятор из стека
MOV DPTR, #0E0h;задаем адрес аккумулятора во внешней памяти
MOVX @R1, A;сохраняем аккумулятор во внешнее ОЗУ
POP DPH
POP DPL
SETBSCON.1 ;переход в режим микропотребления
RETI
;Обработка прерывания от клавиатуры.
INT2:
CLREX1;запрещаем прерывание от клавиатуры;(поскольку начнется опрос клавиатуры)
SETBIS_KEYBOARD;запускаем опрос клавиатуры
JNBIS_KEYDOWN,$;ждем пока определится код нажатой клавиши
CLRIS_KEYDOWN;убираем флаг
MOVA,KEY;проверяем, нажата ли клавиша МЕНЮ
CJNEA,#MENU_KEY,VVOD;если нажата, переходим к обработке
JMPMENU
;если не нажата, значит, нажата клавиша ввода,
;поскольку прерывание может прийти от 1ой из 2ух ;клавиш
VVOD: ;Подготовим код уставки для вывода.
MOVA,#0
MOVMASS2+3,A
MOVMASS2+2,A
MOVA,K
ANL A,#11110000B;обнуляем младшую тетраду
SWAP A;меняем местами тетрады аккумулятора
MOVMASS2+1,A
MOVA,K
ANL A,#00001111B;обнуляем старшую тетраду
MOVMASS2,A
SETBIS_V_KEYBOARD;устанавливаем флаг, что происходит ;вывод, вызванный в обработчике прерывания от ;клавиатуры
SETBIS_VYVOD;разрешаем вывод
;Ввод нового кода уставки.
READ_K1:
JNBIS_KEYDOWN,READ_K1 ;ждем пока определится код нажатой клавиши
CLRIS_KEYDOWN ;убираем флаг
MOVA,KEY
CJNEA,#PUSK_KEY,NO_K;проверяем, нажата ли клавиша ПУСК, ;если да, то ввод уставки делаться не будет, ;конец обработки прерывания
JMP ENDINT2
NO_K:
JBACC.4,READ_K1 ;проверяем, является ли введенная клавиша числом
;от 0h до Fh (если не является, то А.4 будет = 1)
MOVMASS2+1,A
SWAP A;меняем местами тетрады аккумулятора
MOVK,A;старший байт новой уставки
MOVA,#0
MOVMASS2,A
READ_K2:
JNBIS_KEYDOWN,$;ждем пока определится код нажатой клавиши
CLRIS_KEYDOWN;убираем флаг
MOVA,KEY
JBACC.4,READ_K2 ;проверяем, является ли введенная клавиша числом ;от 0h до Fh (если не является, то А.4 будет = 1)
MOVMASS2,A
MOVA,K
ADDA,KEY;новая уставка
CJNEA,#PUSK_KEY,$;ждем нажатия клавиши ПУСК JMPENDINT2;на завершение обработки
MENU:
;Подготовим номер выполняемой ф-ии для вывода.
MOVA,#0
MOVMASS2+3,A
MOVMASS2+2,A
MOVMASS2+1,A
MOVA,NUMF
MOVMASS2,A
SETBIS_V_KEYBOARD;устанавливаем флаг, что происходит ;вывод, вызванный в обработчике прерывания от ;клавиатуры
SETBIS_VYVOD;разрешаем вывод
PUSK_WAIT:
JNBIS_KEYDOWN,READ_K1 ;ждем пока определится код нажатой клавиши
CLRIS_KEYDOWN ;убираем флаг
MOVA,KEY
CJNEA,#PUSK_KEY,NO_K2;проверяем, нажата ли клавиша ПУСК, ;если да, то переходим к выполнению выбранной ф-ии
JMP PUSK
NO_K2:
CJNEA,#MENU_KEY,PUSK_WAIT;проверяем, нажата ли клавиша МЕНЮ
;если не ПУСК и не МЕНЮ, то ждем нажатия другой ;клавиши
MOVA,NUMF;в А - номер выполняемой ф-ии
INCA;переходим к следующей ф-ии
CJNEA,#4,NOT_4 ;если А = 3, то номеру ф-ии присваиваем 1, ;поскольку всего функций 3
MOVA,#1
NOT_4: MOVNUMF,A;новый номер выполняемой ф-ии
MOVMASS2,A;меняем в массиве, для того, чтобы ;выводился новый номер ф-ии
JMPPUSK_WAIT;возвращаемся к ожиданию ввода клавиши
;повторения цикла до тех пор, пока не будет нажата ;клавиша ПУСК
PUSK:;нажата клавиша ПУСК
MOVA,NUMF;в А - номер ф-ии, которую надо выполнить
ENDINT2:
CLRIS_KEYBOARD;убираем опрос клавиатуры
CLRIS_VYVOD;убираем вывод на индикаторы
;Гасим табло индикаторов.
MOVA,#0FFh;все 1 (ничего не выбрано)
MOV DPTR,#ADDR_RGN;заносим адрес регистра
MOVX@DPTR,A ;вывод кода позиции и значений x1-x4
CLRIS_V_KEYBOARD;убираем флаг, что вывод вызван в ;обработчике прерывания от клавиатуры
;Установка в 0 двух старших разрядов регистра для ;перебора строк клавиатуры (для того чтобы до начала
;опроса клавиатуры приходило прерывание от 2ух ;командных клавиш).
MOVDPTR,#ADDR_RGSC;адрес регистра
MOVA,00111111b;записываем необходимое значение
MOVX@DPTR,A SETBEX1;разрешаем прерывание от клавиатуры
RETI
;---------------------------------------------------------------------------------
; ОПИСАНИЕ ПРОЦЕДУР, ИСПОЛЬЗУЕМЫХ В ПРОГРАММЕ
;---------------------------------------------------------------------------------
;Процедура вывода значения Q1 на светодиодные ;индикаторы, а также значений на светодиоды.
VYVOD:
MOV R1,POZ
MOVA,R6;ADRNUM
MOVR0,A
CJNER1,#5,NPOZ;если смещение относительно массива с кодами
MOVR1,#0;позиций равно 5, то устанавливаем в 0 MOVA,R7;#MASS
MOVR0,A;возвращаемся к первому числу массива
NPOZ: MOV A,#POZ_MASS ;в аккумуляторе базовый адрес масcива с ;кодами позиций
MOV DPH,#0
MOVDPL,R1 ;в DPTR номер позиции
MOVC A,@A+DPTR ;в Acc код позиции
MOVA,R2;X1X4
MOVR4,A;в R4 значения X1-X4
XRL A,R4;добавляем к коду позиции значения, ;выводимые на светодиоды
MOV DPTR,#ADDR_RGN;заносим адрес регистра
MOVX@DPTR,A ;вывод кода позиции и значений x1-x4
MOV A,@R0
MOV R3,A ;в R3 - номер в массиве с кодами цифр
MOV A,#NUM_MASS ;в аккумуляторе базовый адрес масcива с кодами цифр
MOVDPH,#0
MOVDPL,R3 ;в DPTR номер числа в массиве MOVC A,@A+DPTR ;в Acc код позиции
MOV DPTR,#ADDR_RGIND ;заносим адрес регистра
MOVX @DPTR,A ;вывод кода цифры в RG3
INC R1 ;переходим к следующей позиции
INC R0 ;переходим к следующей позиции в массиве с числами
MOVPOZ,R1;переписываем значения из регистров в MOVADRNUM,R0;переменные
RET
;Процедура инверсии.
INVERT:
MOVA,R7 ;в аккумуляторе младший байт числа
CPLA ;инвертируем байт
ADD A,#1 ;увеличиваем младший байт на 1
MOV R7,A ;сохраняем назад в r7
MOV A,R6 ;в аккумуляторе старший байт CPL A ;инвертируем байт
ADDC A,#0 ;если был перенос, то это учитываем
MOV R6,A ;сохраняем назад в r6
RET
;Процедура деления.
DIVISION:
;проверка на положительность/отрицательность числа
;если число отрицательное, то инвертируем
MOV A,R6
JNB ACC.7,DEL ;сравниваем 7ой бит старшего байта, если 0, ;пропускаем инвертирование
MOV A,#1
MOVR3,A ;если произошло инвертирование, то в r3 - 1 (флаг)
CALL INVERT DEL:
MOV A,R7
SUBB A,R2 ;вычитаем число, на которое делим
MOV R7,A ;сохраняем значение в r7
JC DEL1 ;если был заём, то переходим на метку
DEL4:
MOV A,CHL ADD A,#1
MOV CHL,A ;увеличение счетчика chl находящегося в памяти на 1
JNC DEL2;если не было переноса, то счетчик chh не
;инкрементируем
INC CHH ;инкремент счетчика chh CLR C ;сброс в 0 признака переноса DEL2:
JMP DEL ;повтор цикла
DEL1:
MOV A,R6
CJNE A,#0,DEL3 ;если старший байт числа =0, то деление закончено
;в противном случае переходим на метку del3
JMP ENDDEL
DEL3:
DECR6 ;уменьшаем значение старшего байта
JMP DEL4 ;на метку del4 (для увеличения счетчика) ENDDEL:
MOV A,CHL
MOV R7,A
MOV A,CHH
MOV R6,A ;переписываем из счетчиков в регистры
CLR A
MOV CHL,A
MOV CHH,A ;обнуляем счетчики
;обратное инвертирование, если нужно
MOV A,R3
CJNEA,#1,INV ;если была инверсия, инвертируем обратно
DEC R3;обнуляем r0 (так как была 1)
CALL INVERT INV:
CLR C ;обнуляем флаг заёма
RET
;Процедура суммирование чисел массива.
SUMMAS:
ADD1:
INC R1 ;переходим к младшему байту числа
MOV A,R7 ;в аккумуляторе сумма старших байтов чисел
ADD A,@R1 ;суммируем младший байт с аккумулятором
MOV R7,A ;сохраняем значение в r7 DEC R1 ;переходим к старшему байту числа
MOV A,R6 ;в аккумуляторе сумма младших байтов чисел ADDC A,@R1 ;суммируем старший байт числа с аккумулятором с ;учетом переноса
MOV R6,A ;сохраняем значение в r6
MOV A,R1
ADD A,#2
MOV R1,A ;переходим к следующему элементу массива
DJNZ R2,ADD1 ;пока не достигнем конца массива, повторяем цикл
RET
;Процедура опроса клавиатуры.
KEYBOARD: MOVR1,COL
CJNER1,#8,NCOL;если дошли до первого столбца,
MOVR1,#0;то переходим к последнему NCOL:
MOV A,#KEY_MASS ;записываем адрес массива для перебора столбцов
MOV DPH,#0
MOV DPL,COL ;в DPTR номер столбца (если 0 - последний столбец) MOVCA,@A+DPTR;в Асс код для выбора столбца
MOV DPTR,#ADDR_RGSC;записываем адрес регистра для перебора ;столбцов клавиатуры
MOVX@DPTR,A;записываем код в регистр, тем самым выбирая столбец MOV DPTR,#ADDR_RGRD ;записываем адрес регистра для записи строк клавиатуры
MOVXA,@DPTR;читаем из регистра ;PUSH A;сохраняем в стеке считанный код
CJNEA,#00000111B,OBRABOTKA;смотрим, было ли нажатие
;Нажатия не было
INCR1;переходим к следующему столбцу
MOVCOL,R1;переписываем значения из регистра в переменную
RET
OBRABOTKA:
MOV R2,#0;обнуляем регистр R2
CJNEA,#00000011B,O1
MOVR2,#24;3-ая строка, умножаем на кол-во столбцов
JMPO2
O1: CJNEA,#00000101B,O2
MOVR2,#16;2-ая строка, умножаем на кол-во столбцов
JMPO2
O2: MOVR2,#8;1-ая строка, умножаем на кол-во столбцов
MOVA,R2
CLRC;обнулим знак заёма
SUBBA,COL
SUBBA,#1;поскольку коды клавиш начинаются с 0
MOVKEY,A;в KEY - код нажатой клавиши
MOVCOL,#0 ;будем сканировать клавиатуру начиная с ;последнего столбца
SETBIS_KEYDOWN ;если была нажата клавиша (и обработана),
;то фиксируем это
RET
END
Приложение М
Описание микропроцессора PIC16F74
Приложение Н
Листинг программы узла аналого-цифрового преобразователя
#include <P16C74B.INC>
org5
BSFSTATUS,RP0;Переходим в 1-ый банк
MOVLWb'00000011';назначить порты A.0, A.1, A.2 аналоговыми
MOVWFADCON1;A.3 - опорное напряжение
MOVLW0x00
MOVWFTRISB;Устанавливаем порт Б на передачу
MOVLW0x07
MOVWFTRISC;Устанавливаем порт С на передачу
MOVLW0xFF
MOVWFTRISA;Устанавливаем порт A на прием
BCFSTATUS,RP0;Возвращаемся во 0-ой банк
CLRFPORTC; снять все
main
MOVLWb'10000001';Настраиваем АЦП на оцифровку X5
MOVWFADCON0
BSFADCON0,GO_DONE;запуск преобразования
wait1
BTFSCADCON0,GO_DONE ;ожидание завершения
gotowait1;преобразования
MOVFADRES, W
MOVWFPORTB;выдача значения N5 в порт B
BSFPORTС,0;подача сигнала С на регистр BCFPORTС,0;Снятие выбора регистра X5
MOVLWb'10001001';Настраиваем АЦП на оцифровку X6
MOVWFADCON0
BSFADCON0,GO_DONE;запуск преобразования
wait2
BTFSCADCON0,GO_DONE ;ожидание завершения
gotowait2;преобразования
MOVFADRES, W
MOVWFPORTB;выдача значения N6 в порт B
BSFPORTС,1;подача сигнала С на регистр BCFPORTС,1;Снятие выбора регистра X6
MOVLWb'10010001';Настраиваем АЦП на оцифровку X7
MOVWFADCON0
BSFADCON0,GO_DONE;запуск преобразования
wait3
BTFSCADCON0,GO_DONE ;ожидание завершения
gotowait3;преобразования
MOVFADRES, W
MOVWFPORTB;выдача значения N7 в порт B
BSFPORTС,2;подача сигнала С на регистр BCFPORTС,2;Снятие выбора регистра X7
gotomain
END
Приложение П
МПС. Схема электрическая структурная
31
2
51
Документ
Категория
Рефераты
Просмотров
211
Размер файла
10 776 Кб
Теги
zapiska
1/--страниц
Пожаловаться на содержимое документа