Проектирование микропроцессорной системы
МИНИСТЕРСТВО
ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
УЧРЕЖДЕНИЕ
ОБРАЗОВАНИЯ
ГОМЕЛЬСКИЙ
ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П. О. СУХОГО
Факультет
автоматизированных и информационных систем
Кафедра
«Промышленная электроника»
РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ
ЗАПИСКА
к
курсовому проекту
по
дисциплине «Микропроцессорная техника»
на
тему «Проектирование микропроцессорной
системы»
Исполнитель:
студент гр. ПС-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 x
8-bit внутренних ячеек памяти
• 32
программируемых входа/выхода
• два 16-ти
битных таймера/счетчика
• 6
источников прерываний
• низкое энергопотребление
Для обеспечения
генерации тактовой частоты к выводам XTAL1 и XTAL2 подключен
кварцевый резонатор ZQ1. Частота
резонатора выбирается
из условия =
и в нашем случае равна 18 МГц .
Конденсаторы С2,С3
служат для облегчения запуска внутреннего генератора. Цепочка С1,R9 обеспечивает сброс МК при подаче электропитания. По [2] выбираем
конденсаторы:
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 имеют
внутренние “подтягивающие” резисторы.
По справочнику [2]
выберем резисторы:
-R8: МЛТ - 0.125 -
4,7 кОм ±5%;
R9:
МЛТ - 0.125 - 8,2 кОм ±5%;
По [6] выберем
кварцевый резонатор ZQ1:
HC-49/U_180
Рис.
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
Назначение выводов:
-4, 15-18 -
цифровые выходы, 4 - (МЗР), 15 - (СЗР);
5 - () - выход
состояния;
- () - вход
чтения;
- () - вход выбора
микросхемы;
- (CLK) - вход тактирования;
- (GD) - цифровая
общая шина (цифровая земля);
- () - напряжение
источника питания;
- () - опорное
напряжение;
- (BOFS) - вход
смещения характеристики;
- (AI) -
аналоговый вход;
- (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
|
Соединение
|
0
|
0
|
Y=X1
|
0
|
1
|
Y=X2
|
1
|
0
|
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 пф
|
.3 Схема ввода
управляющих сигналов
В проектируемой МКС имеются 3
управляющих сигнала Y1, Y2, Y3. Эти сигналы представляют собой одиночные импульсы ТТЛ -
уровней, поступающие на исполнительные устройства МКС. Управляющие сигналы
снимаются с портов МК. Однако следует учитывать, что нагрузочная способность
портов P1, P2, P3 мала. Емкость нагрузки не должна превышать 150 пФ. Для
увеличения нагрузочной способности линий портов МК следует использовать
усилительные элементы. Это обычно микросхемы, имеющие выходы с открытым
коллектором.
На рис. 3.3.1 приведена схема
формирования управляющих сигналов МКС. В ней используется инвертор К155ЛН3. При
сигнале на входе уровня логической 1 на выходе будет логический 0, т. е. такая
схема требует инверсных входных сигналов для управления. По
справочнику [2] выбираем резисторы R1-R3:
МЛТ- 0.125 - 200 Ом ±5%;
Рис.
3.3.1 Схема вывода управляющего сигнала Y1.
,3,5,9,11,13 - входы;
,4,6,8,10,12 - выходы;
- общий;
- напряжение питания;
Рис. 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. Схема подключения светодиодов индикации
По справочнику [3] выбираем диоды VD1-VD8:
АЛ307Б
2.5 Схема подключения линейного дисплея и клавиатуры
Семисегментные индикаторы (ССИ) широко
используются для отображения цифровой и буквенной информации. Семь отображающих
элементов ССИ позволяют высвечивать десятичные и шестнадцатиричные цифры,
некоторые буквы русского и латинского алфавитов, а также некоторые специальные
знаки.
На рис. 3.5.1 приведена схема подключения
четырехразрядного дисплея на семисегментных светодиодных индикаторах при
статическом управлении. Дисплей предназначен для отображения только десятичных
цифр. Для отображения информации будем использовать программную перекодировку.
Индикатор HG1 отображает
младшую десятичную цифру, а HG4
- старшую. Коды для индикаторов HG1
и HG4 непосредственно
снимаются с порта P0, а порт P2
управляет открытием и закрытие буферных регистров. . Однако для работы
элементов индикации нужно на входы регистров DD5
- DD9 подавать
инверсные значения данных с порта P0
микроконтроллера для их отображения на VD1
- VD8 и HG1
- HG4.
По справочнику [2] выбираем резисторы:
МЛТ- 0.125 - 240 Ом
±5%;
По справочнику [7] выбираем индикаторы:
HG1-HG4:
АЛС324Б
В разрабатываемой МКС на пульте
управления имеется простейшая клавиатура, состоящая из клавиш для переключения
аналоговых сигналов с целью отображения их на индикаторах дисплея, а также
переключателя (тумблера) для ввода режима работы МКС.
На рис. 3.5.2 приведена схема
подключения кодирующей клавиатуры, состоящей из переключателей с фиксацией, к
порту МК. Переключатели SA1-SA3 служат для выбора аналоговых сигналов U1-U3, а переключатель (тумблер) SA4- для выбора режима
работы МКС: “Работа-Пульт”. Особенностью переключателей SA1-SA3 является то, что они
взаимозависимы, т.е. в любой момент времени может быть замкнут только один из
них. Для подключения используем дополнительный регистр.
микропроцессор
управление программный микроконтроллер
Рис.3.5.1
Схема подключения индикаторов при использовании программной перекодировки
Рис. 3.5.2 Схема подключения
переключателей к регистру
По
справочнику [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.
Схема сопряжения МК с интерфейсом ИРПС.
По справочнику [2] выбираем резисторы:
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 ; Ввод
из
P0P3.5 ; Закрыть буферы
DD4ACC.7, COUNT ; Переход,
если
SA4 разомкнут
(Работа)
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 до 65535. Максимальное
время задержки будет 65536* 0,67 мкс=43910 мкс, что значительно меньше
требуемой 0,55с. Поэтому на таймере T/C0
реализуем задержку на 25 мс, а в регистре общего назначения (РОН) будем накапливать
количество переполнений таймера с целью получения требуемой задержки в 0,55с.
Для получения задержки 25 мс в регистры таймера TH0,TL0
первоначально необходимо загрузить число 43910 - 25000 = 18910 = DE49H.
Количество переполнений таймера для отсчета времени 0,75 с будет:
750 мс / 25 мс = 22. Для счета переполнений будем использовать регистр R0
1-го банка РОН.
;************************************************************
; INIT
- подпрограмма инициализации МКС
;************************************************************
INIT:
ANL
P1, #11111000B
; Вывести Y1 = Y2
= Y3 = 0
MOV
P0, #0 ;
Вывести нули в порт P0 (погасить
; VD1-VD8)
ANL
P2,#11100000
; Закрыть триггеры регистров 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 будет:
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
- разряды
|
24H
|
X5
|
X4
|
X3
|
X2
|
X1
|
Y1
|
0
|
0
|
|
Для формирования одиночного управляющего
импульса 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, #11111000B
; Обнулить 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 ß C, /24H.5 ;
C ß 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: RET
Подпрограмма ANALOG
выполняет ввод и обработку аналоговой информации - напряжений U1,U2,
и U3, поступающих в
МКС от датчиков. Первый блок БСА - это подпрограмма OPROS,
которая производит ввод аналоговых сигналов U1
- U3, их
преобразование в цифровые коды W1
- W3 и размещение в
памяти данных МК. В результате выполнения подпрограммы OPROS
в ПД в ячейках с адресами 30H
- 37H будет следующая
информация:
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
- разряды
|
32H
|
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
Для выполнения арифметических операций умножения
и деления используется подпрограммы:
;
**************************************************************
|
;
---------------------------- M16_8 ---------------------------------------------------------
|
;
Подпрограмма умножения целых двоичных чисел без знака; формата 16´8=24.
; Входные параметры: (R4,R3) - СТБ,МЛБ множимого, (R2) - множитель. ;
Выходные параметры: (R5,R4,R3)
- СТБ,СРБ,МЛБ произведения.
|
;****************************************************************
|
M16_8:
|
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
|
|
|
;
--------------------------------- D16_8
---------------------------------------------
|
;
Подпрограмма деления целых двоичных чисел без знака ; формата 16:8=(8,8). ;
Входные параметры: (R4,R3) - СТБ,МЛБ делимого, (R2) - делитель. ; Выходные
параметры: (R3) - частное, (R4) - остаток.
|
D16_8:
|
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,
будем использовать подпрограмму M16_8
- умножения двухбайтного числа на однобайтное. В общем случае результат
(произведение) должен быть трехбайтным двоичным числом, которое размещается в
регистрах 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
будет
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
- разряды
|
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 M16_8
; Подпрограмма умножения,
; результат: 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 ;
МлБ разностиA,
R7 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 D16_8
; Подпрограмма деления
; результат - (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,#1A,
@A+DPTR
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_Y2: SETB P1.1 ; Вывести Y2=1 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, #00111111B
; Регистр R2 - код для выбора
; 1-го канала
коммутатора DA1
MOV
P1, R2
; Вывод в P1 - выбор канала
коммутатора
CALL
ADCONV ; Подпрограмма
АЦ-преобразования,
в А -код АЦП
MOV
@R0, A
; Пересылка кода АЦП в ПД
INC
R0
MOV
R2, #01111111B
; Регистр R2 - код для выбора
; 2-го канала
коммутатора DA1
MOV
P1, R2
; Вывод в P1 - выбор канала
коммутатора
CALL
ADCONV ; Подпрограмма
АЦ-преобразования,
в А -код АЦП
MOV
@R0, A
; Пересылка кода АЦП в ПД
INC
R0
MOV
R2, #10111111B
; Регистр 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 P1.4 P1.5 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 ACC.7, KEY; Переход,
если
SA4 замкнут
(“Пульт”)
; Переключатель SA4
разомкнут ( положение “Работа”)
MOV
P0, #0FFH
; Вывод единиц в порт P0
ORL
P2, #00011111B
; Открыть триггеры регистров DD5
- DD9,
; погасить элементы
индикации
ANL
P2, #11100000B
; Защелкивание триггеров регистров
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
|
00
|
SA2
|
XXXX1101
|
01
|
SA3
|
XXXX1011
|
02
|
Унитарный код с входов регистра DD4
пересылается в аккумулятор (блоки 1 - 4), а затем сдвигается вправо до
появления нуля во флаге переноса C.
Количество сдвигов накапливается в регистре R7.
При выходе из подпрограммы в нем будет позиционный двоичный код замкнутого
переключателя. Для корректной работы подпрограммы необходимо, чтобы соблюдалось
условие:
всегда имеется только один замкнутый контакт, т.е. контакты переключателей SA1
- SA3 должны быть
взаимозависимы.
;*************************************************************
; IDNKEY
- подпрограмма идентификации замкнутого переключателя ;SA1-SA3
; Выходной
параметр: регистр R7 -
позиционный код переключателя
;*************************************************************
IDNKEY: MOV
P0, #0FFH
; Настроить порт P0 на ввод
CLR
P3.5 ;
Открыть выходные буферы DD4
MOV
A, P0 ; Ввод
из
P0 P3.5
; Закрыть буферы DD4
ANL
A,#00000111B
; Выделить разряды 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
*2,56 В ---- 00FF.
(4.2)
Откуда получим:
(4.3)
Все входящие в формулу (3.5) числа
надо преобразовать в дробные в формате с фиксированной запятой [10].
Имеем:
, (4.4)
где условно обозначено: ,YYYY - дробное
число в формате с фиксированной запятой в двоично-десятичном коде.
Вычисление кода Ui
производится по формуле (4.4). Для выполнения арифметических операций с
дробными числами в формате с фиксированной запятой (ФЗ) используются готовые
подпрограммы. Деление дробных двоичных чисел с ФЗ ,Wi / ,00FF выполняется
подпрограммой с именем D16_16F. Для ее
работы необходимо загрузить в регистры R2 и R3 старший и
младший байты (СтБ и МлБ) кода Wi (делимое), а в регистры R4 и R5 - СтБ и
МлБ числа 00FF (делитель).
Эта операция выполняется в блоке 1 БСА. Результатом деления (блок 2) будет
дробное двоичное число с ФЗ в регистрах R6,R7 - СтБ, МлБ
частного. В блоке 3 частное пересылается для временного хранения в регистр DPTR.
В блоке 4 посредством подпрограммы с
именем C10_16AF
производится преобразование дробного двоично-десятичного числа ,1024 в дробное
двоичное число с ФЗ, которое размещается в регистрах R3,R4.
В блоке 6 производится умножение
полученных в блоках 2 и 4 дробных двоичных чисел с помощью подпрограммы M16_16F. Результат
умножения будет находиться в регистрах R7,R6.
В блоке 7 посредством подпрограммы с
именем C16_10F
производится преобразование дробного двоичного числа в дробное
двоично-десятичное число, которое разместится в регистрах R2,R3 в виде:
Здесь обозначено: Р1 - 1-й
(старший) разряд десятичной дроби, Р4 -
4-й (младший) разряд дроби.
;*************************************************************
; CALC
- подпрограмма вычисления кода сигналов U1-U3
для вывода на
; дисплей
; Входные
параметры: (R2, R3)
- СтБ, МлБ кода АЦП
; Выходные
параметры: (R2, R3)
- двоично-десятичное число
; с Ф3 формата (,P1P2P3P4)
;*************************************************************
MOV
R5, #FFH
; делитель
CALL
D16_16F
; Подпрограмма деления: в (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_16F
; Подпрограмма умножения
;двоичных чисел с
Ф3, результат: R7, R6
- СтБ, МлБ произведения
; Преобразование
двоичного числа с Ф3 в двоично-десятичное
CALL
C16_10F
;
Подпрограмма преобразования,
;результат:
в регистрах R2, R3
- двоично-десятичное число
; формата ,P1P2P3P4
RET
;
--------------------------------- D16_16F------------------------------------------
|
;
Подпрограмма деления дробных двоичных чисел без знака с ФЗ ; формата
16:16=16. ; Входные параметры: (R2,R3) - СТБ,МЛБ делимого, ; (R4,R5) -
СТБ,МЛБ делителя. ; Выходные параметры: (R6,R7) - СТБ,МЛБ частного. ;
Используется подпрограмма D16_16.
|
D16_16F:
|
CALL D16_16
|
;
|
(R6,R7)
- частное
|
|
RET
|
|
|
;
--------------------------------- D16_16
-------------------------------------------
|
;
Подпрограмма деления целых двоичных чисел без знака ; формата 16:16 (делимое
меньше делителя). ; Входные параметры: (R2,R3) - СТБ и МЛБ делимого (ДМ), ;
(R4,R5) - СТБ и МЛБ делителя (ДЛ). ; Выходные параметры: (R6,R7) - СТБ и МЛБ
частного (ЧСТ), ; (R2,R3) - СТБ и МЛБ остатка (ОСТ).
|
;
Используются регистры 0-го банка
|
D16_16:
|
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
|
|
|
;
-------------------------------
С10_16AF
------------------------------------------
|
;
Подпрограмма преобразования дробного двоично-десятичного ; беззнакового
числа с ФЗ формата 4*4 в двоичное число с ФЗ ;формата 16. ; Входные
параметры: (R3,R2)
- двоично-десятичное число ; ( ,Р1Р2Р3Р4). ; Выходные параметры: (R3,R4)
- СТБ,МЛБ двоичного числа. ; Используется подпрограмма С10_16А.
|
KL:
|
EQU 22H
|
;
|
Ячейка
для временного хранения
|
;
Двоичное преобразование числа (0,Р1Р2Р3Р4)*10*4
|
С10_16F:
|
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
|
|
|
;
---------------------------------
М16_16F
-----------------------------------------
|
|
;
Подпрограмма умножения дробных двоичных чисел без знака ; с фиксированной
запятой формата 16´16=16. ; Входные параметры:
(R7,R6) - СТБ,МЛБ множителя, ; (R5,R4) - СТБ,МЛБ множимого. ; Выходные
параметры: (R7,R6) - СТБ,МЛБ произведения. ; Используется подпрограмма
М16_16.
|
|
М16_16F:
|
CALL
М16_16
|
;
|
(R7,R6)
- произведение
|
|
|
RET
|
|
|
|
;
--------------------------- С16_10F
----------------------------------------------
|
;
Подпрограмма преобразования дробного двоичного беззнакового ;числа с ФЗ
формата 16 в двоично-десятичное число формата 4´4.
; Входные параметры: (R7,R6) - СТБ,МЛБ двоичного числа. ; Выходные параметры:
(R2,R3) - двоично-десятичное число ;( ,Р1Р2Р3Р4). ; Используется
подпрограмма M16_10F.
|
VREM:
|
EQU
20H
|
;
|
Адрес
ПД для временного хранения
|
С16_10F:
|
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 дисплея можно
изобразить в виде:
;*************************************************************
; DISPLAY
- подпрограмма вывода на индикаторы дисплея при
; программной
перекодировке
; Входные параметры:
регистры R2,R3
- двоично-десятичное число
; с ФЗ формата
,Р1Р2Р3Р4
;*************************************************************
DISPLAY:
MOV A,
R3 ; Пересылка МлБ
кода в аккумулятор
ANL
A, #00001111B
; Маскировать старшую тетраду
; (СтТ)
аккумулятора
CALL
CROSSCOD ; Подпрограмма
перекодировки,
; в аккумуляторе -
семисегментный код цифры разряда Р4
; десятичной дроби
CPL
A ; Инвертировать
аккумулятор
MOV
P0, A
SETB
P2.1 ; Открыть
триггеры регистра DD6
-
; вывод на
индикатор HG1
CLR
P2.1 ; Защелкивание
триггеров регистра DD6
MOV
A, R3
; Пересылка МлБ кода в аккумулятор
SWAP
A ; Обмен тетрад в
аккумуляторе
CALL
CROSSCOD ; Подпрограмма
перекодировки, в
; аккумуляторе -
семисегментный код цифры разряда Р3
; десятичной дроби
CPL
A ; Инвертировать
аккумулятор
MOV
P0, A
SETB
P2.2 ; Открыть
триггеры регистра DD7
-
; вывод на
индикатор HG2
CLR
P2.2 ; Защелкивание
триггеров регистра DD7
MOV
A, R2
; Пересылка СтБ кода в аккумулятор
ANL
A,#00001111B
; Маскировать СтТ аккумулятора
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,#00001111B
; маскировать СтТ аккумулятора
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
устанавливаются аппаратно, но сбрасываться они должны программно.
В блоке 1 БСА производится сброс флага RI
приемника. Затем в блоке 2 проверяется готовность передатчика путем опроса его
флага TI. Если он
готов к передаче, то флаг TI
сбрасывается и в регистр SBUF
пересылается байт из ячейки ПД с адресом 24H,
где находятся данные о сигналах X1
- X5 и Y1
- Y3 (блоки 3 и 4).
Затем в интерфейс передаются 3 байта данных из массива DATA_W,
где находятся коды W1 - W3
АЦП (блоки 5 - 10 БСА). Регистр R7
используется в качестве счетчика байтов. Текст программы передачи данных:
;************************************************************
; TRANSMIT
- подпрограмма передачи данных в интерфейс
;************************************************************: CLR
RI ; Сбросить
флаг
RI1: JNB
TI,WAIT1 ;
Ожидание готовности передатчика
CLR
TI ; Сбросить
флаг готовности
MOV
SBUF, 24H
; Передать байт в интерфейс
MOV
R0, #DATA_W;
Начальный адрес массива
MOV
R7, #3 ; Счетчик
байтов
WAIT2: JNB TI,
WAIT2 ; Ожидание
готовности передатчика
CLR
TI SBUF, @R0 R0 R7,
WAIT2 ; Цикл передачи
восьми байтов
RET
Для формирования управляющих сигналов Y1,
Y2, Y3
в программу работы МК необходимо ввести временные задержки различной
длительности. Так как оба таймера МК заняты, то для реализации временных
задержек используем метод программных циклов. Для задержки длительностью t1
= 76 мкс используем подпрограмму DEL,
которая вызывается командой CALL
DEL, ее текст:
DEL: MOV
R7, #N: DJNZ R7, LOOP
В описании команд МК51 указывается, за сколько
машинных циклов (МЦ) выполняется каждая команда: MOV
R7,#N
- 1 МЦ, DJNZ - 2 МЦ, RET
- 2 МЦ, CALL - 2 МЦ.
Время машинного цикла связано с
тактовой частотой работы МК
соотношением:
. (4.5)
При МГц имеем:
мкс.
Время задержки
(4.6)
При мкс имеем
.
Для реализации задержки
длительностью =15 мс и =45 мс
используем подпрограмму с двумя вложенными циклами:
DELAY: MOV R6,
#EXTR: MOV R7, #INTR: DJNZ R7, LOOP1 ;
Внутренний
цикл R6,
LOOP2 ; Внешний
цикл
Необходимо определить значение
констант INTR и EXTR, задающих
времена, соответственно, и . Можно
записать для времени внутреннего цикла:
. (4.7)
Примем мкс, тогда
.
Для времени внешнего цикла
(4.8)
При
При
Окончательно подпрограммы временных
задержек будут иметь следующий вид:
;*************************************************************
; DEL76MKS
- подпрограмма задержки на 76мкс
;*************************************************************
DEL76MKS: MOV R7,
#36: DJNZ R7, LOOP
;*************************************************************
; DEL15MS
- подпрограмма задержки на 15 мс
;**********************************************************
DEL15MS: MOV R6,
#37: MOV R7, #200: DJNZ R6, LOOP1 R6,
LOOP2
;*************************************************************
; DEL45MS
- подпрограмма задержки на 45 мс
;*************************************************************
DEL45MS: MOV
R6, #112: MOV R7, #200: DJNZ R7,
LOOP1 R6,
LOOP2
RET
Заключение
В выполненном курсовом проекте была разработана
принципиальная электрическая схема микропроцессорной системы контроля и
управления некоторым технологическим объектом. Схема строилась на базе
микроконтроллера AT89C51.
Основной задачей системы ставился ввод аналоговых и цифровых сигналов,
последующая обработка и выдача управляющего воздействия на контролируемый
объект.
Из данного отчета видно, что основной объем
работы заняла разработка программного обеспечения для МК. В первую очередь это
связано с тем, что программы писались на ассемблере, на котором даже самые элементарные
действия могут требовать трудоемкого кода. Однако это оправдано тем, что
программы на ассемблере занимают очень мало памяти.
Список
литературы
1. Интегральные
микросхемы и их зарубежные аналоги: Справочник. / Нефедов А.В. Т. 9.-М.: ИП
РадиоСофт, 1999.- 512 с.
2. Резисторы,
конденсаторы, трансформаторы, дроссели, коммутационные устройства РЭА:
Справочник/ Н.Н. Акимов и др. Мн.: Беларусь, 1994.
. Полупроводниковые
приборы: (диоды и транзисторы) / Галкин В.И., Прохоренко В.А. -Мн.: Беларусь,
1979.
. Цифровые
и аналоговые интегральные микросхемы: Справочник / C.
В. Якубовский и др.- М.: Радио и связь, 1989.
. Популярные
цифровые микросхемы: Справочник. / Шило В.Л. М.: Радио и Связь, 1987.
6. <http://www.dalkon.ru/>
7. http://radiol12.ru/