Помощь в написании студенческих работ
Антистрессовый сервис

Проектирование микропроцессорной системы

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

МКС передает информацию центральному компьютеру только после получения от него запроса. Запрос вызывает прерывание выполняемой программы и переход на подпрограмму передачи данных в интерфейс. Прерывания от интерфейса разрешаются только в режиме «Работа» МКС после ввода и обработки цифровой и аналоговой информации в очередном цикле опроса Топр. Запросом является любой байт информации, который МК… Читать ещё >

Проектирование микропроцессорной системы (реферат, курсовая, диплом, контрольная)

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П. О. СУХОГО Факультет автоматизированных и информационных систем Кафедра «Промышленная электроника»

РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту по дисциплине «Микропроцессорная техника«

на тему «Проектирование микропроцессорной системы»

Исполнитель: студент гр. ПС-41

Осипенко Д.В.

Руководитель: доцент Шуликов В.И.

Гомель 2012

Классический метод наблюдения за длительными процессами — применение самопишущих приборов, которые регистрируют измеряемую величину на каком-либо носителе (обычно на бумажной координатной ленте). Альтернативой такому подходу является применение цифровых систем сбора данных на базе микропроцессоров или однокристальных микро ЭВМ для контроля и записи (хранения) измеряемой величины.

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

резкое сокращение расходных материалов (например, чернил и бумаги),

уменьшение массогабаритных показателей,

возможность наблюдения большого числа сигналов одним многоканальным микроконтроллером,

отсутствие в микроконтроллере подвижных механических частей,

почти неограниченные возможности по обработке измеряемого сигнала (например, допусковый контроль предельных значений, ведение статистики, определение динамических параметров сигнала, уплотнение и `упаковка' сигнала для передачи его по каналу связи с недостаточной пропускной способностью и т. д.),

возможность полной автоматизации процесса измерений.

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

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

1. Разработка структурной схемы МКС

Рис. 2.1. Структура МКС

Аналоговый коммутатор: микросхема КР590КН3 для ввода цифровых и аналоговых сигналов. Она является коммутатором (аналоговым мультиплексором) аналоговых входных сигналов U1-U3. Переключение входных каналов коммутатора выполняется цифровыми сигналами уровней ТТЛ, подаваемых на адресные входы А1 и А0. МК выдает адрес для выбора канала коммутатора, а также сигнал для запуска АЦП.

АЦП: аналогово-цифровой преобразователь К572 ПВ3; необходим, чтобы преобразовать аналоговые показания с датчиков в понятный микроконтроллеру вид (в двоичный код). Микросхема представляет собой 8-разрядный АЦП последовательного приближения, выполненный по технологии КМОП.

Микроконтроллер: микроконтроллер AT89C51, который производит обработку получаемой информации, вычисляет необходимые функции f () и g (), пересылает при необходимости информацию на ПК, выводит данные на семисегментные дисплеи. МК имеет 2 таймера Т/С0 и Т/С1. Таймер Т/С0 используется для отсчета времени Топр, а таймер Т/С1 используется для задания требуемой скорости обмена 9600 бит/с по интерфейсу ИРПС.

Интерфейс: интерфейс ИРПС, через который происходит передача информации с микроконтроллера в центральный компьютер.

Пульт оператора: включает в себя дисплей на семисегментных индикаторах, на которых отображаются значения Uх в десятичном коде; светодиоды, отображающие значения X1, X2,X3,X4,X5,Y1,Y2,Y3, переключатель для выбора аналоговых каналов; переключатель режима работы МКС кнопку «Сброс», при нажатии на которую производится сброс МК.

ФС: формирователи одиночных импульсов с усилением по току для управления каким-либо объектом.

Модуль сопряжения: служит для преобразования сигналов последовательного интерфейса TxD (передаваемые данные) и RxD (принимаемые данные) вырабатываемых последовательным портом (УАПП) микроконтроллера в сигналы интерфейса ИРПС.

2. Разработка принципиальной схемы МКС

2.1 Схема подключения микроконтроллера

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

На рис. 3.1 приведена типовая схема подключения микроконтроллера AT89C51. Его технические характеристики:

* 4 кБайта встроенной программируемой памяти (до 1000 циклов записи перезаписи)

* рабочий диапахон частот от 0 до 24 МГц

* 128×8-bit внутренних ячеек памяти

* 32 программируемых входа/выхода

* два 16-ти битных таймера/счетчика

* 6 источников прерываний

* низкое энергопотребление Для обеспечения генерации тактовой частоты к выводам XTAL1 и XTAL2 подключен кварцевый резонатор ZQ1. Частота резонатора выбирается из условия = и в нашем случае равна 18 МГц .

Конденсаторы С2, С3 служат для облегчения запуска внутреннего генератора. Цепочка С1, R9 обеспечивает сброс МК при подаче электропитания. По выбираем конденсаторы:

C1: К42−4 -160 В — 10 мкФ 10%;

C2: К10−42 -50 В — 20 пФ 10%;

C3: К10−42 -50 В — 20 пФ 10%;

C4: К42П-5 -40 В — 0,1 мкФ 10%;

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

К выводам порта Р0 присоединены «подтягивающие» резисторы R1-R8, которые обеспечивают ток для входов микросхем ТТЛ, подключенных к этому порту, при высоком логическом уровне, когда все линии Р0 находятся в z-состоянии. Порты Р1, Р2,Р3 имеют внутренние «подтягивающие» резисторы.

По справочнику выберем резисторы:

R1-R8: МЛТ — 0.125 — 4,7 кОм 5%;

R9: МЛТ — 0.125 — 8,2 кОм 5%;

По выберем кварцевый резонатор ZQ1: HC-49/U180

Рис. 3.1. Схема подключения микроконтроллера с внутренней памятью программ.

2.2 Схема ввода цифровых и аналоговых сигналов

В качестве АЦП используется схема К572ПВ3. Микросхема представляет собой 8-разрядный АЦП последовательного приближения, выполненный по технологии КМОП. Конденсатор С1 и резистор R1 задают частоту генератора.

Рис. 3.2.1 Схема включения АЦП К572ПВ3

В этой схеме:

длина цифрового слова (число разрядов) на выходе АЦП равно длине слова 8-разрядных микропроцессоров, наиболее широко применяемых на практике;

управление его работой осуществляется непосредственно сигналами от микропроцессора с минимальными аппаратными и программными затратами;

временные характеристики АЦП хорошо согласуются с временными характеристиками 8-разрядных микропроцессоров;

цифровые выходы АЦП допускают прямое подключение ко входам портов и к шине данных микропроцессорной системы.

Условное графическое обозначение АЦП К572ПВ3 приведено на рис. 3.2.2

Рис. 3.2.2 Условное обозначение БИС К572ПВ3

Назначение выводов:

1−4, 15−18 — цифровые выходы, 4 — (МЗР), 15 — (СЗР);

5 — () — выход состояния;

6 — () — вход чтения;

7 — () — вход выбора микросхемы;

8 — (CLK) — вход тактирования;

9 — (GD) — цифровая общая шина (цифровая земля);

10 — () — напряжение источника питания;

11 — () — опорное напряжение;

12 — (BOFS) — вход смещения характеристики;

13 — (AI) — аналоговый вход;

14 — (GA) — аналоговая общая шина (аналоговая земля).

Основные электрические параметры Напряжение источника питания …5 В Ток потребления … … …4 mA

Нелинейность …0.5 ед. МЗР Дифференциальная нелинейность …0.75 ед. МЗР Абсолютная погрешность преобразования в конечной точке шкалы 4ед. МЗР Время преобразования…7.5 мкс Опорное напряжение …-10 В Число разрядов…8

Помимо времени преобразования БИС характеризуется и другими динамическими показателями: временем установления АЦП в начальное состояние (2 мкс), временем задержки считывания данных (120 нс), временем задержки сброса данных (80 нс) (в скобках указаны типовые значения перечисленных показателей).

Состояние выходов АЦП К572ПВ3 в различных режимах работы Таблица1

Режимы

Состояние входов АЦП

Состояние выходов

Функциональное состояние АЦП

D7-D0

Статическая память с произвольной выборкой (СОЗУ)

L

L

L

H

L

L

L

H

X

H

H

H

H

X

L

L

L

Z

Zданные данныеZ

Z

Z

Z

Z

Начало преобразования Считывание данных Сброс Отсутствие выборки Промежуточ. преобраз-я То же Запрещенное

Медленная память

L

L

L

L

H

L

L

Zданные данныеZ

Z

Z

Считывание данных Сброс, начало преобраз-я Промежуточ. преобраз-я Запрещенное

Память со считыванием

H

L

L

H

H

L

L

H

H

L

H

H

Z

X

Z

Zданные ДанныеZ

Z

Отсутствие выборки Начало преобразования Преобразование Считывание данных Сброс Отсутствие выборки

На рис. 3.2.3 приведена функциональная схема ввода цифровых и аналоговых сигналов. Микросхема DA1 КР590КН3 является коммутатором аналоговых входных сигналов U1-U3. Переключение входных каналов коммутатора выполняется цифровыми сигналами уровней ТТЛ, подаваемых на адресные входы А1 и А0. Таблица истинности коммутатора имеет вид:

А1

А0

Соединение

Y=X1

Y=X2

Y=X3

Рис. 3.2.3 Схема ввода цифровых и аналоговых.

Операционный усилитель DA2 включен по схеме повторителя и служит для устранения влияния низкоомного входа АЦП на коммутатор.

Выход состояния аналоговой обработки цифровые входные сигналы Х1-Х5 подаются на входы DD3. Выходы регистров DD2 и DD3 соединены с выводами порта Р0 МК. Управление выходными буферами регистров осуществляется от линий Р3.3 и Р3.4. При Р3.3=1, Р3.4=1 выходы регистров DD2, DD3 находятся в z-состоянии и они отключены от выводов порта Р0. Переключение каналов коммутатора производят сигналы с линий Р1.6, Р1.7 микроконтроллера.

Параметры мультиплексора:

КР590КН3

Tвкл

300 нс

Uком

15 В

Iком

20 мА

Uвх0

0,8 В

Uвх1

4 В

Cвх

10 пф

2.3 Схема ввода управляющих сигналов

В проектируемой МКС имеются 3 управляющих сигнала Y1, Y2, Y3. Эти сигналы представляют собой одиночные импульсы ТТЛ — уровней, поступающие на исполнительные устройства МКС. Управляющие сигналы снимаются с портов МК. Однако следует учитывать, что нагрузочная способность портов P1, P2, P3 мала. Емкость нагрузки не должна превышать 150 пФ. Для увеличения нагрузочной способности линий портов МК следует использовать усилительные элементы. Это обычно микросхемы, имеющие выходы с открытым коллектором.

На рис. 3.3.1 приведена схема формирования управляющих сигналов МКС. В ней используется инвертор К155ЛН3. При сигнале на входе уровня логической 1 на выходе будет логический 0, т. е. такая схема требует инверсных входных сигналов для управления. По справочнику выбираем резисторы R1-R3: МЛТ- 0.125 — 200 Ом 5%;

Рис. 3.3.1 Схема вывода управляющего сигнала Y1.

1,3,5,9,11,13 — входы;

2,4,6,8,10,12 — выходы;

7 — общий;

14 — напряжение питания;

Рис. 3.3.2 Условное графическое обозначение К155ЛН3

2.4 Схема подключения светодиодных индикаторов

В проектируемой МКС на пульте управления имеются светодиоды для индикации значений входных сигналов X1, X2, X3, X4, X5 и управляющих Y1, Y2, Y3. На рис. 3.4 приведена схема подключения светодиодов индикации. Если С = 1, то триггеры регистра «прозрачны», и их выходы повторяют сигналы на входах. При С = 0 триггеры «защелкиваются», т. е. запоминают состояния входов в этот момент. После этого сигналы на входах регистра DD5 могут иметь произвольное значение. Это обстоятельство позволяет использовать порт Р0 для выполнения других функций, например, для ввода данных из АЦП.

Регистр КР1533ИР33 имеет довольно мощные выходы: ток низкого логического уровня 20 мА, а ток высокого уровня 100 мкА. Поэтому можно непосредственно управлять светодиодами без использования инверторов, но на входы регистра необходимо подавать также сигналы низкого уровня, т. е. логические 0.

Рис. 3.4. Схема подключения светодиодов индикации По справочнику выбираем диоды VD1-VD8: АЛ307Б

2.5 Схема подключения линейного дисплея и клавиатуры

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

На рис. 3.5.1 приведена схема подключения четырехразрядного дисплея на семисегментных светодиодных индикаторах при статическом управлении. Дисплей предназначен для отображения только десятичных цифр. Для отображения информации будем использовать программную перекодировку. Индикатор HG1 отображает младшую десятичную цифру, а HG4 — старшую. Коды для индикаторов HG1 и HG4 непосредственно снимаются с порта P0, а порт P2 управляет открытием и закрытие буферных регистров.. Однако для работы элементов индикации нужно на входы регистров DD5 — DD9 подавать инверсные значения данных с порта P0 микроконтроллера для их отображения на VD1 — VD8 и HG1 — HG4.

По справочнику выбираем резисторы:

МЛТ- 0.125 — 240 Ом 5%;

По справочнику выбираем индикаторы:

HG1-HG4: АЛС324Б В разрабатываемой МКС на пульте управления имеется простейшая клавиатура, состоящая из клавиш для переключения аналоговых сигналов с целью отображения их на индикаторах дисплея, а также переключателя (тумблера) для ввода режима работы МКС.

На рис. 3.5.2 приведена схема подключения кодирующей клавиатуры, состоящей из переключателей с фиксацией, к порту МК. Переключатели SA1-SA3 служат для выбора аналоговых сигналов U1-U3, а переключатель (тумблер) SA4- для выбора режима работы МКС: «Работа-Пульт». Особенностью переключателей SA1-SA3 является то, что они взаимозависимы, т. е. в любой момент времени может быть замкнут только один из них. Для подключения используем дополнительный регистр.

микропроцессор управление программный микроконтроллер

Рис. 3.5.1 Схема подключения индикаторов при использовании программной перекодировки Рис. 3.5.2 Схема подключения переключателей к регистру

По справочнику выбираем резисторы R1-R4:

МЛТ- 0.125 — 4700 Ом 5%;

2.6 Схема сопряжения с последовательным интерфейсом

Разрабатываемая микроконтроллерная система должна иметь связь с внешним удаленным компьютером через последовательный интерфейс ИРПС. По запросу внешнего компьютера МК должен передавать данные о сигналах X1-Y3 и коды аналоговых сигналов U1-U3, получаемых с помощью АЦП. Обычно для связи МКС с внешним компьютером используют программный метод управления передачей, так как это позволяет уменьшить число линий связи. В этом случае интерфейс должен обеспечить двустороннюю передачу, т. е. от компьютера к МК (запрос) и от МК к компьютеру (передача данных).

При сопряжении МК со стандартным последовательным интерфейсом необходимо решить следующие проблемы:

· согласование уровней сигналов интерфейса с уровнями ТТЛ МК;

· поддержание стандартной скорости приемо-передачи;

· поддержание стандартных форматов посылки;

· поддержание стандартных протоколов обмена;

На рис. 3.6 приведена схема сопряжения с интерфейсом ИРПС (токовая петля 20 мА). Принимаемые данные (импульсы тока 20 мА в цепи +ПрД/-ПрД) преобразуются в уровни ТТЛ с помощью оптрона V1 и инвертора DD1. Оптрон также обеспечивает гальваническую развязку передатчика (компьютера) и приемника (МК). Передаваемые данные (импульсы тока 20 мА в цепи +ПД/-ПД) образуются из уровня ТТЛ с помощью инвертора DD2 и оптрона V2, который также обеспечивает гальваническую развязку передатчика (МК) и приемника (компьютера). Схема требует дополнительный источник питания Uп1 напряжением 12 В, гальванически не связанный с источником +5 В питания МК.

Рис. 3.6. Схема сопряжения МК с интерфейсом ИРПС.

По справочнику выбираем резисторы:

R1: МЛТ- 0.125 — 1000 Ом 5%;

R2: МЛТ- 0.125 — 1000 Ом 5%;

R3: МЛТ- 0.125 — 100 Ом 5%;

R4: МЛТ- 0.125 — 100 Ом 5%;

Инверторы возьмем со схемы К155ЛН3 из пункта 3.3.

3. Разработка программного обеспечения работы МКС

Алгоритм работы МКС приведен на рис. 4.1. По нему составим блок-схему алгоритма (БСА) главной программы работы МКС, которая будет иметь символическое имя CONTROL. Из нее видно, что главная программа состоит из нескольких подпрограмм, которые вызываются по мере надобности. Такое построение упрощает структуру программы, делает ее более наглядной. Кроме того, использование подпрограмм упрощает разработку и отладку всей программы работы МКС.

Текст главной программы на языке Ассемблера для МК51 имеет следующий вид:

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

; CONTROL — главная программа работы МКС

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

DATA_W: EQU 30H; Начальный адрес массива в ПД для

; хранения кодов АЦП

ORG 0000H; Начальный адрес программы

CONTROL: JMP MAIN; Переход на основную программу

ORG 000BH; Вектор прерывания от Т/С0

CALL TIMER; Подпрограмма отсчета времени Топр

RETI

ORG 0023H; Вектор прерывания от УАПП

CALL TRANSMIT; Подпрограмма передачи данных в

; интерфейс

RETI

ORG 0030H; Таблица констант

ADR_K1: DW XXXXH; Константа К1

ADR_Q: DW XXXXH; Константа q

ORG 0050H; Основная программа

MAIN: MOV SP, #70H; Определить стек

CALL INIT; Подпрограмма инициализации МКС

AGAIN: CALL DIGIT; Подпрограмма ввода и обработки

; цифровой информации

CALL ANALOG; Подпрограмма ввода и обработки

; аналоговой информации

SETB ES; Разрешить прерывание от УАПП

SETB PS; Присвоить прерыванию от УАПП

; высший приоритет

; Опрос состояния переключателя SA4 «Работа/Пульт»

MOV P0, #0FFH; Настроить порт P0 на ввод

CLR P3.5; Открыть выходные буферы DD4

MOV A, P0; Ввод из P0

SETB P3.5; Закрыть буферы DD4

JB ACC.7, COUNT; Переход, если SA4 разомкнут (Работа)

CALL PULT; Подпрограмма обслуживания пульта

; управления

JMP AGAIN; Зацикливание программы

COUNT: JNB F0, COUNT; Цикл отсчета времени Tопр = 0,55с

CLR F0; Сбросить флаг окончания счета Tопр

CLR ES; Запретить прерывания от УАПП

JMP AGAIN; Зацикливание программы В программе определен массив ячеек памяти данных МК с начальным символическим адресом DATA_W для хранения кодов с выхода АЦП. Так как входных переменных 3 и используется 8-разрядный АЦП, то массив будет иметь 3 ячейки. В памяти программ, начиная с адреса 0030H, размещаются двухбайтные константы, которые будут использоваться при вычислениях функций. Значения констант условно обозначено XXXXH. Константы занимают в памяти две ячейки, например, по адресу ADR_K1 размещается младший байт (МлБ), а по следующему адресу ADR_K1+1 — старший байт (СтБ) константы. В главной программе используются 2 прерывания: от таймера Т/С0 и от УАПП. Флаг F0 используется для индикации окончания отсчета времени опроса Топр. Он устанавливается, когда истечет время Tопр = 0,55 с.

Подпрограмма INIT используется для инициализации МКС после включения электропитания. При сбросе МК все порты настраиваются на ввод, т. е. на их выводах будут высокие уровни (логические 1). Поэтому необходимо вывести P1.0 = P1.1 = P1.2 = 0 для установки начальных значений управляющих сигналов Y1 = Y2 = Y3 = 0. Необходимо также вывести нули в порт P0 для гашения светодиодов индикации VD1- VD8, так как после включения электропитания на выходах регистра DD5 могут быть случайные значения. Индикаторы дисплея HG1 — HG4 также будут погашены нулями из порта P0.

В подпрограмме инициализации необходимо настроить УАПП и таймеры Т/C0, T/C1 на заданные режимы работы. Для двустороннего обмена по интерфейсу ИРПС выбираем для УАПП режим 1. При использовании режима 1 передается через вывод P3.1 (TxD) или принимается из P3.0 (RxD) 10 бит информации старт-бит (логический 0), 8 бит данных и стоп-бит (логическая 1). Скорость приемо/передачи — величина переменная и задается таймером T/C1.

Управляющее слово, которое следует загрузить в регистр SCON, будет 52H .

Рис. 4.1 Блок-схема алгоритма работы МКС Скорость обмена УАПП задает таймер T/C1, который должен работать в режиме 2. Управляющее слово, которое нужно загрузить в регистр TMOD, будет 20H. Для получения заданной скорости обмена в регистр TH1 таймера T/С1 необходимо загрузить число, которое вычисляется из соотношения:

. (4.1)

При SMOD = 0, = 18 МГц и = 9600 бит/с получаем из формулы число FBH.

Для отсчета времени Топр будем использовать таймер T/С0 в 1-м режиме работы. Управляющее слово для этого режима равно 01H. Время машинного цикла связано с тактовой частотой работы МК соотношением:

. (4.2)

При МГц имеем:

мкс.

В 1-м режиме таймер — это 16-разрядный счетчик, который считает от 0 до 65 535. Максимальное время задержки будет 65 536* 0,67 мкс=43 910 мкс, что значительно меньше требуемой 0,55с. Поэтому на таймере T/C0 реализуем задержку на 25 мс, а в регистре общего назначения (РОН) будем накапливать количество переполнений таймера с целью получения требуемой задержки в 0,55с. Для получения задержки 25 мс в регистры таймера TH0, TL0 первоначально необходимо загрузить число 43 910 — 25 000 = 18 910 = DE49H. Количество переполнений таймера для отсчета времени 0,75 с будет 750 мс / 25 мс = 22. Для счета переполнений будем использовать регистр R0 1-го банка РОН.

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

; INIT — подпрограмма инициализации МКС

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

INIT: ANL P1, #1 111 1000B; Вывести Y1 = Y2 = Y3 = 0

MOV P0, #0; Вывести нули в порт P0 (погасить

; VD1-VD8)

ANL P2,#11 100 000; Закрыть триггеры регистров DD5-DD9

MOV SCON, #52H; Режим 1 для УАПП, двусторонний

; обмен

MOV TMOD, #20H; Режим 2 для T/С1

MOV TH1, #0FBH; Загрузить TH1 для скорости

; обмена 9600 бит/с

SETB TR1; Запустить T/С1

ORL TMOD, #01H; Режим 1 для T/С0

MOV TH0, #0DEH; Загрузить регистры T/С0

MOV TL0, #49H; для отсчета задержки 40 мс

MOV 08H, #0; Очистка регистра R0 в 1-м банке P0H

SETB TR0; Запустить T/С0

SETB EA; Общее разрешение прерываний

SETB ET0; Разрешить прерывание от T/С0

RET

Подпрограмма TIMER является обработчиком прерывания при переполнении таймера T/C0. Эта подпрограмма производит отсчет времени опроса Топр. При каждом вызове подпрограммы вследствие переполнения таймера (истекло 25 мс) инкрементируется регистр R0 в 1-м банке РОН. Если содержимое R0 станет равным 22, то это означает, что истекло время Топр = 0,55 с. После окончания отсчета времени 0,55 с подпрограмма TIMER устанавливает флаг F0 = 1, что является сигналом для главной программы CONTROL начать новый цикл опроса датчиков и выполнения других функций управления.

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

;TIMER — подпрограмма отсчета времени Tопр = 0,55 с

; Выходной параметр: F0 — флаг окончания отсчета времени

; Используется 1-й банк P0H

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

TIMER: CLR TR0; Остановить T/С0

SETB RS0; Перейти в 1-й банк P0H

INC R0

CJNE R0, #22,EXIT; Переход, если (R0)<22

SETB F0; Установить флаг F0 окончания cчета 0,55 c

MOV R0, #0; Очистить R0

EXIT: MOV TH0, #0DEH; Перезагрузить T/С0

MOV TL0, #49H

SETB TR0; Запустить T/С0

CLR RS0; Перейти в 0-й банк P0H

RET

Подпрограмма DIGIT выполняет обработку цифровых сигналов X1, X2,X3 X4, X5 поступающих в МКС от датчиков. Ввод цифровых сигналов осуществляется через регистр DD3. Перед вводом данных из DD3 необходимо настроить порт P0 МК на ввод, а затем открыть выходные буферы DD3 подачей на управляющий вход OE низкого уровня с линии P3.4 порта МК. После ввода данных в аккумулятор МК надо вновь закрыть выходные буферы DD3.

Ячейка ПД с адресом 24H используется в программе для хранения значений входных сигналов X1, X2,X3,X4,X5, а также для запоминания результата вычисления логической функции f () — управляющего сигнала Y1. Выбор этого адреса обусловлен тем, что эта ячейка, как и другие с адресами от 20H до 2FH, допускают обращение к отдельным битам с помощью команд SETB bit и CLR bit, что упрощает программирование. После выполнения подпрограммы DIGIT в ячейке 24H будет:

— разряды

24H

X5

X4

X3

X2

X1

Y1

Для формирования одиночного управляющего импульса Y1 длительностью t1 = 76 мкс используется подпрограмма задержки DEL76MKS, текст которой будет приведен ниже.

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

; DIGIT — подпрограмма ввода и обработки цифровой информации

; Используется ячейка ПД с адресом 24H для хранения значений

; X1, X2,X3,X4,X5,Y1

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

DIGIT: MOV P0, #0FFH; Настроить P0 на ввод

CLR P3.4; Открыть выходные буферы DD3

MOV A, P0; Ввод сигналов X1-X5

SETB P3.4; Закрыть буферы DD3

ANL A, #1 111 1000B; Обнулить 3 бита аккумулятора

MOV 24H, A; Переслать аккумулятор в ячейку 24H

MOV C, 24H.6; Переслать С X4

ANL C, 24H.7; С

CPL C; C

MOV 24H.0, C; Переслать 24H.0

MOV C, 24H.3; Переслать С X1

ANL C, 24H.4; C

ANL C, /24H.5; C

ORL C, 24H.0; C f () =

MOV 24H.2, C; Переслать результат в 24H.2 f ()

JNC EXIT; Переход, если С = f () = 0

SETB P1.0; Вывести Y1=1

CALL DEL76MKS; Подпрограмма задержки на 76мкс

CLR P1.0; Вывести Y1=0

EXIT: RET

Подпрограмма ANALOG выполняет ввод и обработку аналоговой информации — напряжений U1, U2, и U3, поступающих в МКС от датчиков. Первый блок БСА — это подпрограмма OPROS, которая производит ввод аналоговых сигналов U1 — U3, их преобразование в цифровые коды W1 — W3 и размещение в памяти данных МК. В результате выполнения подпрограммы OPROS в ПД в ячейках с адресами 30H — 37H будет следующая информация

— разряды

32H

x

x

x

x

x

x

x

x

W3

31H

x

x

x

x

x

x

x

x

W2

(DATA_W) 30H

x

x

x

x

x

x

x

x

W1

Здесь обозначено x — произвольное значение (0 или 1).

Сначала производится нахождение g ()=3*W1-K1+(W2+W3)/W4

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

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

; —————————————— M168 ————————————————————————————;

; Подпрограмма умножения целых двоичных чисел без знака; формата 168=24.

; Входные параметры: (R4,R3) — СТБ, МЛБ множимого, (R2) — множитель.

; Выходные параметры: (R5,R4,R3) — СТБ, СРБ, МЛБ произведения.

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

M168:

MOV A, R2

MOV B, R3

MUL AB

MOV R3, А

;

(R3) — МЛБ произведения

MOV R7, В

MOV A, R2

MOV B, R4

MUL AB

ADD A, R7

MOV R4, A

;

(R4) — СРБ произведения

MOV A, В

ADDC A, #0

MOV R5, A

;

(R5) — СТБ произведения

RET

; ————————————————- D168 ——————————————————————;

; Подпрограмма деления целых двоичных чисел без знака

; формата 16:8=(8,8).

; Входные параметры: (R4,R3) — СТБ, МЛБ делимого, (R2) — делитель.

; Выходные параметры: (R3) — частное, (R4) — остаток.

D168:

MOV В, #8

;

Счетчик циклов

; Сдвиг влево остатка и частного в R4, R3

CYCLE:

MOV A, R3

ADD A, R3

MOV R3, A

MOV A, R4

ADDC A, R4

;

(А) — СТБ остатка

JC PER1

;

Если переполнение остатка

; Вычитание делителя из остатка

SUBB A, R2

JNC PER2

;

Если разность > 0

; Разность < 0, восстановление остатка

ADD A, R2

;

MOV R4, А

JMP PER3

; Переполнение остатка, разряд частного = 1

PER1:

CLR C

SUBB A, R2

PER2:

MOV R4, A

INC R3

;

+1 в частное

PER3:

DJNZ В, CYCLE

;

Зацикливание

RET

Примечания

При выполнении операции умножения кода АЦП на постоянный коэффициент, например, 9*W1, будем использовать подпрограмму M168 — умножения двухбайтного числа на однобайтное. В общем случае результат (произведение) должен быть трехбайтным двоичным числом, которое размещается в регистрах R5, R4 и R3. Но так как у нас умножается однобайтное число, то входным и выходным параметром будет R3 и R4.

В блоке 3 БСА полученное значение функции g () сравнивается с двухбайтной константой Q, хранящейся в памяти программ по символическому адресу ADR_Q. Сравнение можно выполнить с помощью программы вычитания двухбайтных целых чисел g () — Q. Результат сравнения определяется значением флага переноса C микроконтроллера после вычитания старших байтов. Если C=1, то g () < Q. Если же С=0, то g () >=Q. В блоке 4 подпрограммы ANALOG производится анализ флага C, и в зависимости от его значения формируются одиночные импульсы Y1 или Y2 длительностью t1 и t2 на выводах P1.1 и P1.2 порта МК. Подпрограммы задержек DEL15MS на 15 мс и DEL45MS на 45 мс будут приведены ниже. После выполнения подпрограммы ANALOG в ячейке с адресом 24H будет

— разряды

24H

X5

X4

X3

X2

X1

Y1

Y2

Y3

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

; ANALOG — подпрограмма ввода и обработки аналоговой информации

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

ANALOG: CALL OPROS; Подпрограмма ввода аналоговых

; сигналовU1-U5, преобразования

;их в коды W1-W5 и запоминания в массиве DATA_W

; Вычисление {g()}

; Вычисление

MOV R3, DATA_W; Переслать в регистр R3 младший

; байт (МлБ) кода W1 (МлБ множимого)

MOV R4, #00H; Переслать в регистр R4 старший

; байт (СтБ) — нули (СтБ множимого)

MOV R2, #3 Множитель

CALL M168; Подпрограмма умножения,

; результат: R4-СтБ, R3-МлБ произведения

; Вычисление

MOV DPTR, #ADR_K1 Адрес МлБ константы K1

CLR A

MOVC A, @A+DPTR; В аккумуляторе — МлБ константы K1

MOV R6, A; В регистре R6 — МлБ константы K1

MOV A,#1

MOVC A, @A+DPTR; В аккумуляторе — СтБ константы K1

MOV R7, A; В регистре R7 — СтБ константы K1

MOV A, R3

SUBB A, R6; Вычитание младших байтов

MOV 25H, A; МлБ разности

MOV A, R7

ADDC A, R4; Вычитание старших байтов

MOV 26H, A; СтБ разности

; Вычисление /4

MOV R3, DATA_W+1; Переслать в регистр R3 байт кода W2

MOV A, DATA_W+2; Переслать в аккумулятор байт кода W3

ADD A, R3; сложить W2+W3

MOV R3, A; в R3-МлБ делимого

MOV R4,#00H; в R4-нули

MOV R2,4; в R2-делитель

CALL D168; Подпрограмма деления

; результат — (R3) — частное, (R4) — остаток.

; Вычисление g ()=3*W1-K1+()/4

MOV A, 25H; в аккумуляторе МлБ 3*W1-K1

ADD A, R3; Сложить МлБ

MOV 28H, A; в ячейке 28НМлБ g ()

MOV A, 26H; в аккумуляторе СтБ 3*W1-K1

ADD A, R4; Сложить СтБ

MOV 29H, A; в ячейке 29НСтБ g ()

; Вычисление g () — Q

MOV DPTR, #ADR_Q Адрес МлБ константы Q

CLR A

MOVC A, @A+DPTR

MOV R6, A; В регистре R6 — МлБ константы Q

MOV A,#1

MOVC A, @A+DPTR

MOV R7, A; В регистре R7 — СтБ константы Q

CLR C

MOV A, 28H

SUBB A, R6; Вычитание младших байтов

MOV A, 29H

SUBB A, R7; Вычитание старших байтов

JC FORM_Y2; Переход, если меньше (С=1)

SETB P1.2; Вывести Y3=1

SETB 24H.0; Запомнить Y3=1 в ячейке 24H

CALL DEL45MS; Подпрограмма задержки на 45 мс

CLR P1.2; Вывести Y3=0

RET

FORM_Y2: SETB P1.1; Вывести Y2=1

SETB 24H.1; Запомнить Y2=1 в ячейке 24H

CALL DEL15MS; Подпрограмма задержки на 15 мс

CLR P1.1; Вывести Y2=0

RET

Подпрограмма OPROS производит переключение аналоговых каналов коммутатора DA1, обслуживание АЦП и размещение в ПД в массиве DATA_W кодов W1, W2,W3. Она использует подпрограмму ADCONV — аналого-цифрового преобразования.

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

;OPROS — подпрограмма ввода аналоговых сигналов U1-U3.

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

OPROS: MOV R0, #DATA_W; Начальный адрес массива

;DATA_W

MOV R2, #11 1111B; Регистр R2 — код для выбора

; 1-го канала коммутатора DA1

MOV P1, R2; Вывод в P1 — выбор канала коммутатора

CALL ADCONV; Подпрограмма АЦ-преобразования,

в Акод АЦП

MOV @R0, A; Пересылка кода АЦП в ПД

INC R0

MOV R2, #111 1111B; Регистр R2 — код для выбора

; 2-го канала коммутатора DA1

MOV P1, R2; Вывод в P1 — выбор канала коммутатора

CALL ADCONV; Подпрограмма АЦ-преобразования,

в Акод АЦП

MOV @R0, A; Пересылка кода АЦП в ПД

INC R0

MOV R2, #1 011 1111B; Регистр R2 — код для выбора

; 3-го канала коммутатора DA1

MOV P1, R2; Вывод в P1 — выбор канала коммутатора

CALL ADCONV; Подпрограмма АЦ-преобразования,

в Акод АЦП

MOV @R0, A; Пересылка кода АЦП в ПД

INC R0

RET

Подпрограмма ADCONV выполняет обслуживание АЦП. Будем использовать АЦП в режиме памяти со считыванием.

Режим

D7-D0

Функциональное состояние АЦП

Память со считыванием

H

L

L

H

H

L

L

H

H

L

H

H

Z

X

Z

Zданные ДанныеZ

Z

Отсутствие выборки Начало преобразования Преобразование Считывание данных Сброс Отсутствие выборки

Для сброса АЦП К572ПВ3 на линиях P1.4 и P1.5 порта МК выводим 0->1. Затем для начала преобразования на этих портах выводим 1->0. После этого МК ожидает момента окончания преобразования кода АЦП, анализируя сигнал готовности данных на выводе, который поступает из регистра DD3 на линию P0.2 порта МК. Когда сигнал станет равным 1, производится ввод кода АЦП из регистра DD2 в аккумулятор МК.

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

; ADCONV — подпрограмма аналого-цифрового преобразования

; Выходной параметр: в регистре A — код АЦП

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

ADCONV: CLR P1.4; сброс АЦП

CLR P1.5

SETB P1.4

SETB P1.5

CLR P1.4; начало преобразования

CLR P1.5

MOV P0, #0FFH; Настроить порт P0 на ввод

CLR P3.4; Открыть выходные буферы DD3

TEST: JB P0.2, TEST; Цикл ожидания готовности данных АЦП

SETB P3.4; Закрыть буферы DD3

CLR P3.3; Открыть выходные буферы DD2

MOV A, P0; Ввод кода АЦП

SETB P3.3; Закрыть буферы DD2

RET

Подпрограмма PULT используется для обслуживания пульта управления. Она вызывается, если переключатель режима SA4 будет в положении «Пульт».

В блоке 3 подпрограммы PULT выводится информация на светодиоды индикации VD1 — VD8 из ячейки ПД с адресом 24H, где хранятся значения переменных X1-X5, Y1-Y3, которые преобразуем к виду Y1, Y2,Y3,X5,X4,X3,X2,X1. Так как были убраны инверторы, то выводить надо инвертированный код.

Блок 5 — это подпрограмма IDNKEY — идентификации замкнутых контактов переключателей аналоговых каналов SA1-SA3. Затем по коду переключателя в блоке 4 вычисляется адрес кода Wi из массива DATA_W, и в блоке 6 код Wi пересылается в регистр R3.

Блок 7 — это подпрограмма CALC, в которой вычисляется значение кода Ui для вывода на дисплей.

Блок 8 — это подпрограмма вывода на индикаторы дисплея.

В блоке 8 программа проверяет положение переключателя SA4 «Работа/Пульт» на пульте управления. Если SA4 замкнут, то продолжается программа обслуживания пульта управления. Если же SA4 разомкнут, то программа гасит светодиоды индикации и дисплей (блок 10) и запускает таймер T/C0 для отсчета времени Топр (блок 11). Затем происходит переход на блок 3 главной программы CONTROL.

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

; PULT — подпрограмма обслуживания пульта управления

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

PULT: CLR ES; Запретить прерывания

CLR ET0; от УАПП и Т/С0

CLR TR0; Остановить Т/С0

; Вывод информации X1-X5, Y1-Y3 на светодиоды VD1-VD8

MOV A, 24H; Переслать в аккумулятор содержимое ячейки 24H

; Приведение выхода порта к виду Y1, Y2,Y3,X5,X4,X3,X2,X1

RL A; Сдвиг аккумулятора влево

RL A

RL A

CPL A; инверсия аккумулятора

MOV P0, A; вывести в порт данные X1-X5, Y1-Y3

SETB P2.0; Открыть триггеры регистра DD5 — вывод

; на VD1 — VD8

CLR P2.0; Защелкивание триггеров регистра DD5

KEY: CALL INDKEY; Подпрограмма идентификации

;замкнутых SA1-SA3, в регистре R7-двоичный код

; SA1-SA3

; Вычисление адреса кода Wi АЦП по коду SA1-SA3

MOV A, R7

ADD A, R7; Удвоение кода переключателей

;SA1-SA3

MOV R7, A

MOV A, #DATA_W; Начальный адрес массива

;DATA_W

ADD A, R7

MOV R0, A; В регистре R0-адрес кода Wi

; Пересылка кода Wi в регистр R3

MOV A,@R0; Переслать в акк-р код Wi

MOV R3, A; В регистре R3 — код АЦП

CALL CALC; Подпрограмма вычисления кода

; Ui для вывода на HG1-HG4

CALL DISPLAY; Подпрограмма вывода кода Ui

;на HG1-HG4

; Проверка состояния переключателя SA4

MOV P0,#0FFH; Настроить порт P0 на ввод

CLR P3.5; Открыть выходные буферы DD4

MOV A, P0; Ввод из P0

SETB P3.5; Закрыть буферы DD4

JNB ACC.7, KEY; Переход, если SA4 замкнут («Пульт»)

; Переключатель SA4 разомкнут (положение «Работа»)

MOV P0, #0FFH; Вывод единиц в порт P0

ORL P2, #1 1111B; Открыть триггеры регистров DD5 — DD9,

; погасить элементы индикации

ANL P2, #1 110 0000B; Защелкивание триггеров регистров

MOV TH0,#0DEH; Загрузить Т/С0

MOV TL0,#49H

MOV 08H,#0; Очистить регистр R0 банка 1

CLR F0 Сбросить флаг окончания счета времени

SETB ET0; Разрешить прерывание от Т/С0

SETB TR0; Запустить Т/С0

RET

Определение номера замкнутого контакта переключателя SA1 — SA3 выполняет подпрограмма IDNKEY, которая присваивает ему позиционный двоичный код в соответствии с таблицей:

Коды для переключателей SA1-SA3

Замкнут

Унитарный код

Позиционный код, HEX

SA1

XXXX1110

SA2

XXXX1101

SA3

XXXX1011

Унитарный код с входов регистра DD4 пересылается в аккумулятор (блоки 1 — 4), а затем сдвигается вправо до появления нуля во флаге переноса C. Количество сдвигов накапливается в регистре R7. При выходе из подпрограммы в нем будет позиционный двоичный код замкнутого переключателя. Для корректной работы подпрограммы необходимо, чтобы соблюдалось условие всегда имеется только один замкнутый контакт, т. е. контакты переключателей SA1 — SA3 должны быть взаимозависимы.

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

; IDNKEY — подпрограмма идентификации замкнутого переключателя ;SA1-SA3

; Выходной параметр: регистр R7 — позиционный код переключателя

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

IDNKEY: MOV P0, #0FFH; Настроить порт P0 на ввод

CLR P3.5; Открыть выходные буферы DD4

MOV A, P0; Ввод из P0

SETB P3.5; Закрыть буферы DD4

ANL A,#111B; Выделить разряды D3-D0

MOV R7, #0; Счетчик сдвигов

SHIFT: RRC A; Сдвиг аккумулятора вправо

JNC EXIT; Выход, если C=0

INC R7

JMP SHIFT; Цикл сдвига

EXIT: RET

Подпрограмма CALC вычисляет коды, соответствующие аналоговым сигналам (напряжениям) U1 — U3, для последующего вывода на дисплей.

Для АЦП К572ПВ3 при 8-разрядном включении диапазон изменения выходного кода будет 0000H … 00FFH, что соответствует входному однополярному напряжению в диапазоне 0 … +2,56 В. Чтобы найти напряжение Ui, соответствующее коду АЦП Wi, составим пропорцию с учетом того, что сейчас входное напряжение нужно увеличить в 4 раза:

Ui В —— Wi

4*2,56 В —— 00FF. (4.2)

Откуда получим

(4.3)

Все входящие в формулу (3.5) числа надо преобразовать в дробные в формате с фиксированной запятой.

Имеем

(4.4)

где условно обозначено: ,YYYY — дробное число в формате с фиксированной запятой в двоично-десятичном коде.

Вычисление кода Ui производится по формуле (4.4). Для выполнения арифметических операций с дробными числами в формате с фиксированной запятой (ФЗ) используются готовые подпрограммы. Деление дробных двоичных чисел с ФЗ, Wi /, 00FF выполняется подпрограммой с именем D16_16 °F. Для ее работы необходимо загрузить в регистры R2 и R3 старший и младший байты (СтБ и МлБ) кода Wi (делимое), а в регистры R4 и R5 — СтБ и МлБ числа 00FF (делитель). Эта операция выполняется в блоке 1 БСА. Результатом деления (блок 2) будет дробное двоичное число с ФЗ в регистрах R6, R7 — СтБ, МлБ частного. В блоке 3 частное пересылается для временного хранения в регистр DPTR.

В блоке 4 посредством подпрограммы с именем C10_16AF производится преобразование дробного двоично-десятичного числа, 1024 в дробное двоичное число с ФЗ, которое размещается в регистрах R3, R4.

В блоке 6 производится умножение полученных в блоках 2 и 4 дробных двоичных чисел с помощью подпрограммы M16_16 °F. Результат умножения будет находиться в регистрах R7, R6.

В блоке 7 посредством подпрограммы с именем C16_10 °F производится преобразование дробного двоичного числа в дробное двоично-десятичное число, которое разместится в регистрах R2, R3 в виде

R2

R3

P1

P2

P3

P4

Здесь обозначено Р1 — 1-й (старший) разряд десятичной дроби, Р4 ;

4-й (младший) разряд дроби.

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

; CALC — подпрограмма вычисления кода сигналов U1-U3 для вывода на

; дисплей

; Входные параметры: (R2, R3) — СтБ, МлБ кода АЦП

; Выходные параметры: (R2, R3) — двоично-десятичное число

; с Ф3 формата (, P1P2P3P4)

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

CALC: MOV R4, #00H; Загрузить

MOV R5, #FFH; делитель

CALL D16_16 °F; Подпрограмма деления в (R6,R7)

; СтБ, МлБ результата

MOV DPH, R6; Запоминание результата деления

MOV DPL, R7; в регистре DPTR

; Преобразование двоично-десятичного числа с Ф3 0,1024 в двоичное

MOV R3, #10H

MOV R2, #24H

CALL C10_16AF; Подпрограмма преобразования

; результат в регистрах R3, R4 — СтБ, МлБ двоичного числа с Ф3

; Умножение двоичных чисел с Ф3

MOV R7, DPH; В регистрах

MOV R6, DPL; R7, R6 — множимое

MOV A, R3

MOV R5, A; В регистрах R5, R4 — множитель

CALL M16_16 °F; Подпрограмма умножения

;двоичных чисел с Ф3, результат: R7, R6 — СтБ, МлБ произведения

; Преобразование двоичного числа с Ф3 в двоично-десятичное

CALL C16_10 °F Подпрограмма преобразования,

;результат в регистрах R2, R3 — двоично-десятичное число

; формата, P1P2P3P4

RET

; ————————————————- D1616F————————————————————-;

; Подпрограмма деления дробных двоичных чисел без знака с ФЗ

; формата 16:16=16.

; Входные параметры: (R2,R3) — СТБ, МЛБ делимого,

; (R4,R5) — СТБ, МЛБ делителя.

; Выходные параметры: (R6,R7) — СТБ, МЛБ частного.

; Используется подпрограмма D1616.

D16_16 °F:

CALL D1616

;

(R6,R7) — частное

RET

; ————————————————- D1616 —————————————————————;

; Подпрограмма деления целых двоичных чисел без знака

; формата 16:16 (делимое меньше делителя).

; Входные параметры: (R2,R3) — СТБ и МЛБ делимого (ДМ),

; (R4,R5) — СТБ и МЛБ делителя (ДЛ).

; Выходные параметры: (R6,R7) — СТБ и МЛБ частного (ЧСТ),

; (R2,R3) — СТБ и МЛБ остатка (ОСТ).

; Используются регистры 0-го банка

D1616:

MOV В, #16

; Сдвиг частного (R6,R7) влево

LOOP:

MOV A, R7

ADD A, R7

MOV R7, A

MOV A, R6

ADDC A, R6

MOV R6, A

;

Сдвинутое частное (R6,R7)

; Сдвиг остатка (промежуточного делимого) (R2,R3) влево

MOV A, R3

ADD A, R3

MOV R3, A

MOV A, R2

ADDC A, R2

MOV R2, A

;

(R2,R3) — сдвинутый остаток

JC PER1

;

Если переполнение остатка (C=1)

; Cложение остатка с дополнительным кодом делителя

PUSH 03H

;

Сохранение МЛБ остатка — R3

PUSH 02H

;

Сохранение СТБ остатка — R2

MOV A, R3

ADD A, R5

MOV R3, A

MOV A, R2

ADDC A, R4

MOV R2, A

JNC PER2

;

Переход если сумма < 0

; Сумма > 0, в разряд частного записать 1

DEC SP

;

DEC SP

;

Баланс стека

MOV A, R7

ADD A, #1

MOV R7, A

MOV A, R6

ADDC A, #0

MOV R6, A

JMP PER3

; Переполнение остатка, в разряд частного записать 1

PER1:

MOV A, R3

ADD A, R5

MOV R3, A

;

МЛБ нового остатка

MOV A, R2

ADDC A, R4

MOV R2, A

;

СТБ нового остатка

MOV A, R7

ADD A, #1

MOV R7, A

MOV A, R6

ADDC A, #0

MOV R6, A

JMP PER3

; Сумма < 0, восстановление остатка

PER2:

POP 02H

;

(R2) — СТБ остатка

POP 03H

;

(R3) — МЛБ остатка

; Проверка конца цикла

PER3:

DJNZ В, LOOР

RET

; ———————————————- С1016AF ————————————————————-;

; Подпрограмма преобразования дробного двоично-десятичного

; беззнакового числа с ФЗ формата 4*4 в двоичное число с ФЗ

;формата 16.

; Входные параметры: (R3,R2) — двоично-десятичное число

;

(, Р1Р2Р3Р4).

; Выходные параметры: (R3,R4) — СТБ, МЛБ двоичного числа.

; Используется подпрограмма С10_16А.

KL:

EQU 22H

;

Ячейка для временного хранения

; Двоичное преобразование числа (0,Р1Р2Р3Р4)*10*4

С10_16 °F:

CALL С10_16А

;

(R7,R6) — двоичное число

; Деление двоичного целого числа на 10**4=2710Н

MOV R3, #27Н

MOV R2, #10Н

MOV R4, #0

MOV R5, #0

; Дополнение делителя

MOV A, R2

CPL A

ADD A, #1

MOV R2, A

MOV A, R3

CPL A

ADDC A, #0

MOV R3, A

MOV R1, #16

;

Счетчик циклов

; Сдвиг частного (R5,R4) и остатка (R7,R6) влево

RED:

MOV A, R4

ADD A, R4

MOV R4, A

MOV A, R5

ADDC A, R5

MOV R5, A

MOV A, R6

ADD A, R6

MOV R6, A

MOV A, R7

ADDC A, R7

MOV R7, A

JC MET1

;

Если переполнение остатка

; Сложение остатка с дополнительным кодом делителя

MOV R0, #KL

;

Сохранение

MOV A, R6

;

MOV @R0, A

;

INC R0

;

MOV A, R7

;

MOV @R0, A

;

MOV A, R2

;

остатка

ADD A, R6

MOV R6, A

MOV A, R3

ADDC A, R7

MOV R7, A

JNC MET2

; Сумма >0, разряд частного=1

DEC R0

MOV A, R4

ADD A, #1

MOV R4, A

MOV A, R5

ADDC A, #0

MOV R5, A

JMP MET3

; Переполнение остатка, разряд частного=1

MET1:

MOV A, R2

ADD A, R6

MOV R6, A

MOV A, R3

ADDC A, R7

MOV R7, A

MOV A, R4

ADD A, #1

MOV R4, A

MOV A, R5

ADDC A, #0

MOV R5, A

JMP MET3

;Сумма <0, восстановление остатка

MET2:

MOV A, @R0

MOV R7, A

DEC R0

MOV A, @R0

MOV R6, A

; Проверка конца цикла

MET3:

DJNZ R1, RED

RET

; ————————————————- М1616F ————————————————————;

; Подпрограмма умножения дробных двоичных чисел без знака

; с фиксированной запятой формата 1616=16.

; Входные параметры: (R7,R6) — СТБ, МЛБ множителя,

; (R5,R4) — СТБ, МЛБ множимого.

; Выходные параметры: (R7,R6) — СТБ, МЛБ произведения.

; Используется подпрограмма М1616.

М16_16 °F:

CALL М1616

;

(R7,R6) — произведение

RET

; —————————————- С16_10F ——————————————————————-;

; Подпрограмма преобразования дробного двоичного беззнакового ;числа с ФЗ формата 16 в двоично-десятичное число формата 44.

; Входные параметры: (R7,R6) — СТБ, МЛБ двоичного числа.

; Выходные параметры: (R2,R3) — двоично-десятичное число

;(, Р1Р2Р3Р4).

; Используется подпрограмма M16_10 °F.

VREM:

EQU 20H

;

Адрес ПД для временного хранения

С16_10 °F:

CLR F0

CALL М16_10F

PUSH ACC

;

Сохранение цифры Р1 (С.ц. Р1)

CALL М16_10F

PUSH ACC

;

С.ц. Р2

CALL М16_10F

PUSH ACC

;

С.ц. Р3

CALL М16_10F

PUSH ACC

;

С.ц. Р4

CALL М16_10F

MOV R7, A

;

(R7)=P5

; Упаковка цифр результата в регистры

POP ACC

;

Восстановление цифры Р4 (В.ц. Р4)

SWAP A

ORL A, R7

MOV R7, A

;

(R7)=P4P5

POP ACC

;

В.ц. Р3

MOV R6, A

POP ACC

;

В.ц. Р2

SWAP A

ORL A, R6

MOV R6, A

;

(R6)=P2P3

POP ACC

;

(A)=P1

MOV R5, A

;

Сохранение А

MOV A, R7

ANL A, #0FH

ADD A, #0FAH

MOV A, R5

SWAP A

MOV DPL, R0

MOV R0, #VREM

MOV @R0, A

MOV A, R6

SWAP A

XCHD A, @R0

MOV A, @R0

MOV R2, A

MOV A, R6

MOV @R0, A

MOV A, R7

SWAP A

XCHD A, @R0

SWAP A

MOV R3, A

MOV A, R7

SWAP A

MOV A, @R0

MOV A, R3

XCHD A, @R0

MOV R3, A

JNC CON

CLR A

ADDC A, R3

DA A

MOV R3, A

CLR A

ADDC A, R2

DA A

MOV R2, A

CON:

MOV R0, DPL

RET

Подпрограмма DISPLAY используется для вывода значений напряжений U1 — U3 на индикаторы HG1 — HG4 дисплея. Положение запятой соответствует умножению десятичной дроби формата, Р1Р2Р3Р4 на коэффициент 100, т. е. фактически на дисплей выводится значение Р1Р2, Р3Р4. Это соответствует значению Ui, определяемому формулой (4.4). Соответствие информации, находящейся в регистрах R2, R3 микроконтроллера и выведенной на индикаторы HG1 — HG4 дисплея можно изобразить в виде

R2

R3

P1

P2

P3

P4

HG4

HG3

HG2

HG1

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

; DISPLAY — подпрограмма вывода на индикаторы дисплея при

; программной перекодировке

; Входные параметры регистры R2, R3 — двоично-десятичное число

; с ФЗ формата, Р1Р2Р3Р4

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

DISPLAY: MOV A, R3; Пересылка МлБ кода в аккумулятор

ANL A, #1111B; Маскировать старшую тетраду

; (СтТ) аккумулятора

CALL CROSSCOD; Подпрограмма перекодировки,

; в аккумуляторе — семисегментный код цифры разряда Р4

; десятичной дроби

CPL A; Инвертировать аккумулятор

MOV P0, A

SETB P2.1; Открыть триггеры регистра DD6 ;

; вывод на индикатор HG1

CLR P2.1; Защелкивание триггеров регистра DD6

MOV A, R3; Пересылка МлБ кода в аккумулятор

SWAP A; Обмен тетрад в аккумуляторе

ANL A,#1111B; Маскировать СтТ аккумулятора

CALL CROSSCOD; Подпрограмма перекодировки, в

; аккумуляторе — семисегментный код цифры разряда Р3

; десятичной дроби

CPL A; Инвертировать аккумулятор

MOV P0, A

SETB P2.2; Открыть триггеры регистра DD7 ;

; вывод на индикатор HG2

CLR P2.2; Защелкивание триггеров регистра DD7

MOV A, R2; Пересылка СтБ кода в аккумулятор

ANL A,#1111B; Маскировать СтТ аккумулятора

CALL CROSSCOD; Подпрограмма перекодировки, в

; аккумуляторе — семисегментный код цифры разряда Р2

; десятичной дроби

SETB ACC.7; Установить запятую на индикаторе HG3

CPL A

SETB P2.3; Открыть триггеры регистра DD8 ;

; вывод на индикатор HG3

CLR P2.3; Защелкивание триггеров регистра DD8

MOV A, R2

SWAP A

ANL A,#1111B; маскировать СтТ аккумулятора

CALL CROSSCOD; подпрограмма перекодировки, в

; аккумуляторе — семисегментный код цифры разряда Р1

; десятичной дроби

CPL A

MOV P0, A

SETB P2.4; Открыть триггеры регистра DD9 ;

; вывод на индикатор HG4

CLR P2.4; Защелкивание триггеров регистра DD9

RET

В разрабатываемой МКС предусматривается связь системы с удаленным центральным компьютером по последовательному интерфейсу ИРПС. В микроконтроллерах семейства МК51 имеется последовательный порт, представляющий собой универсальный асинхронный приемопередатчик (УАПП), через который осуществляется прием и передача информации, представленной последовательным кодом (младшими разрядами вперед). В состав УАПП входят принимающий и передающий сдвигающие регистры, а также специальный буферный регистр SBUF приемопередатчика. Запись байта в регистр SBUF приводит к автоматической переписи байта в сдвигающий регистр передатчика и инициирует начало передачи байта. Последовательный порт может работать в 4-х режимах.

При использовании режима 1 передается через вывод P3.1 (TxD) или принимается из P3.0 (RxD) 10 бит информации старт-бит (логический 0), 8 бит данных и стоп-бит (логическая 1). Скорость приемо/передачи — величина переменная и задается таймером T/C1.

МКС передает информацию центральному компьютеру только после получения от него запроса. Запрос вызывает прерывание выполняемой программы и переход на подпрограмму передачи данных в интерфейс. Прерывания от интерфейса разрешаются только в режиме «Работа» МКС после ввода и обработки цифровой и аналоговой информации в очередном цикле опроса Топр. Запросом является любой байт информации, который МК принимает из интерфейса. Если этот байт успешно принят микроконтроллером, то УАПП устанавливает флаг запроса прерывания RI=1. Если прерывание разрешено (флаг ES=1), то происходит переход выполнения программы на адрес 0023H, и затем вызывается подпрограмма передачи данных в интерфейс TRANSMIT. Особенностью УАПП МК51 является то, что флаги запросов прерывания приемника RI и передатчика TI устанавливаются аппаратно, но сбрасываться они должны программно.

Показать весь текст
Заполнить форму текущей работой