Автор работы: Пользователь скрыл имя, 11 Марта 2015 в 20:19, курсовая работа
Микропроцессорные БИС относятся к новому классу микросхем, одной из особенностей которого является возможность программного управления работой БИС с помощью определенного набора команд. Эта особенность нашла отражение в программно-аппаратном принципе построения микропроцессорных систем (МС) - цифровых устройств или систем обработки данных, контроля и управления, построенных на базе одного или нескольких микропроцессоров (МП).
Также в ПЗУ присутствует подпрограмма реакции системы на падение напряжения питания.
При включении питания подводится напряжение ко всем микросхемам и элементам системы. Шина адреса формируется с помощью двух шинных формирователей DD3, DD4. Шинные формирователи передают информацию со входов на выход и предназначены для повышения нагрузочной способности шины адреса.
Системный контроллер DD6 предназначен для формирования шины данных, запоминания слова состояния МП и для формирования шины управления.
При подаче сигнала RST микропроцессор DD2 устанавливается в исходное состояние.
С помощью дешифратора DD7 производится выбор устройств: микросхема ОЗУ, микросхемы ПЗУ, ППИ, контролер прерываний. Выбор производится с помощью линий A15-A14 системной шины адреса.
Для выбора модуля ОЗУ необходимо рассчитать необходимы объем памяти для хранения показаний датчиков
Максимальный размер
На входы мультиплексора DA1 подаются линии A0 и A1 системной шины адреса, определяющие, какой датчик будет подключен в данный момент к АЦП DA2. Затем производится запуск АЦП, опрашивается сигнал АЦП BUSY через шину данных. По положительному переходу сигнала BUSY данные с выхода АЦП поступают в микропроцессор и переписываются в ОЗУ. Далее АЦП сбрасывается и затем опрашивается следующий датчик. [4]
К порту A ППИ DD12 подключены дискретные датчики. К порту B подключены светодиоды. Через порт С передаются данные в универсальный приемопередатчик.
Дисплей подключен к системной шине данных. Младший байт содержит информацию об изображаемом символе, а старший – его положение.
Микропроцессор запускает таймер DD14 и контролирует его работу через прерывание. После окончания счета вырабатывается сигнал прерывания IR0, который обрабатывает соответствующая программа обработки прерываний. [1]
На входы контроллера прерываний DD15 поступают запросы на прерывания. Самый высокий приоритет имеет запрос на прерывание от таймера. Более низкий приоритет имеют запросы на прерывание от универсального приемопередатчика. К остальным входам контроллера прерываний подключены кнопки.
Таймер DD16 используется в системе реагирования на зависание системы. Со второго выхода таймера сигнал подается на входы TxD и RxD приемопередатчика. Третий выход подается на динамик через транзистор VT1.
Универсальный приемопередатчик DD17 предназначен для осуществления передачи данных на верхний уровень.
Выбор порта или регистра управляющего слова ППИ осуществляется через линии A0, A1 системной шины адреса.
Резисторы R2-R9 служат для преобразования унифицированного токового сигнала 4…20 мА в напряжение 1…5В.
Генератор DD1 служит для формирования сигналов сброса системы и синхронизации. Для формирования сигнала синхронизации к его входам X1 и X2 подключен кварцевый резонатор.
Вследствие низкой нагрузочной способности микропроцессора и необходимости разделения шины адреса/данных в схеме микропроцессорной системы предусмотрены формирователь шины адреса и формирователь шины данных.
Формирователь шины адреса выполнен на двух микросхемах DD3, DD4. Формирователь работает следующим образом: в первый машинный такт каждого машинного цикла микропроцессор выдает сигнал логической единицы по линии ALE, который подается на входы STB микросхем DD3, DD4. По этому сигналу адресные биты шины адреса микропроцессора записываются, и на шине адреса микропроцессорной системы появляется адрес устройства, к которому в текущем или следующих машинных циклах будет обращаться процессор. При уровне логического нуля сигнала ALE DD3 и DD4 перейдут в режим хранения и на протяжении всего машинного цикла будут хранить на своих выходах адресные биты.
Формирователь шины данных выполнен на микросхемах DD5 DD6. Выбор микросхемы осуществляется низким уровнем сигнала ALE, направлением передачи данных управляет сигнал WR микропроцессора.
Дешифратор адреса функциональных блоков микропроцессорной системы выполнен на микросхеме DD11. Каждой комбинации входных сигналов А12 - А14 соответствует один из сигналов обращения к функциональным узлам. Система спроектирована таким образом, что обращение микропроцессора к функциональным узлам происходит как к ячейке памяти с определенным адресом.
Преобразователь сигналов токовых датчиков в сигналы напряжения построен на резисторе R2-R9, R18-R21.
ППИ DD12 работает в нулевом режиме.
Значения аналоговых датчиков считываются с аналого-цифрового преобразователя (АЦП) DA2. Считывание значения происходит по команде LDA.
Дешифратор адреса DD14 устанавливает в ноль девятый выход, который подается на вход CS аналого-цифрового преобразователя и выбирает микросхему АЦП. В результате такой комбинации управляющих сигналов АЦП начнет преобразование. Поскольку тактовая частота аналого-цифрового преобразователя 0.5 МГц, а микропроцессора 2МГц во время преобразования микропроцессор должен находиться в режиме ожидания. Это реализуется сигналом готовности данных (BUSY) АЦП. Во время преобразования аналого-цифровой преобразователь на входе READY микропроцессора держит сигнал уровня логической единицы и он находится в режиме ожидания до тех пор, пока данные не появятся на выходах D1..D8 АЦП.
Резистор R1 и R10 и конденсатор C1 соединены с выводами АЦП согласно типовой схеме включения выбранной микросхемы.
Мощность, потребляемая всей системой, определяется как сумма мощностей, которые потребляют все части системы.
Мощность, потребляемая микропроцессором
Генератор тактовых импульсов потребляет .
Мощность, потребляемая буферным регистром
где - ток потребления RG;
- питание RG.
Мощность, потребляемая шинным формирователем
где - ток потребления BD;
- питание BD.
Мощность, потребляемая ОЗУ
где - ток потребления ОЗУ;
- питание ОЗУ.
Мощность, потребляемая ПЗУ
где - ток потребления ПЗУ;
- питание ПЗУ.
Мощность, потребляемая дешифратором .
ППИ потребляет мощность .
Мощность, потребляемая индикатором .
Мощность, потребляемая таймером
Мощность, потребляемая контроллером прерываний
Мощность, потребляемая приемопередатчиком
где - ток потребления PCI;
- питание PCI.
Каждый светодиод потребляет
где - ток потребления VD;
- питание VD.
Мощность, выделяемая резисторами R2-R9, R18-R21 составляет 0,1 Вт.
Мощность, потребляемая всей системой:
Система потребляет мощность .
Заключение
Результатом курсовой работы является разработанная на основе микропроцессора КМ1810ВМ86 информационно-измерительная система по сбору данных с электрической подстанции. Система выполняет опрос аналоговых, дискретных и цифровых датчиков, запись информации в ОЗУ и передачу результатов замеров на верхний уровень управления, также позволяет выводить на дисплей значение необходимого датчика. В случае аварии звуковая сигнализация.
Разработанная система может быть расширена увеличением числа датчиков и может применяться на различных промышленных и гражданских объектах для ведения учета и сбора данных.
Список использованных источников
1 Батушев В. А. Микросхемы и их применение: Справочное пособие.-2-е изд., перераб. и доп. - М.: Радио и связь, 1983.- 272 с.
2 Интегральные микросхемы: Справочник. / Под ред. Тарабрина Б.В. - М.: Радио и связь 1983. - 120с.
3 Каган Б. М. Электронные вычислительные машины и системы. – М.: Энергоатомиздат, 1985. – 552с.
4 Коломбет Е. А. Микропроцессорные средства обработки аналоговых сигналов. - М.: Радио и связь, 1991.- 25, 56, 85-86 с.
5 Федорков Б. Г., Телец В. А. Микросхемы ЦАП и АЦП: функционирование, параметры, применение. – М.: Энергоиздат, 1990.-320 с.: ил.
6 Шевкопляс Б. В. Микропроцессорные структуры. Инженерные решения: Справочник. – 2-е изд. перераб. и доп. – М.: Радио и связь, 1990. – 512 с.: ил.
7 Шульц Ю.А. Измерительная техника. 1000 понятий для практиков. Справочник. - М.:Энергоатомиздат,1989, - 287с.
Приложение А
Структурная схема микропроцессорной системы
Структурная схема микропроцессорной системы показана на Рисунке А.1.
Рисунок А.1 Структурная схема микропроцессорной системы
На рисунке А.1 используются следующие обозначения:
ша – шина адреса; шд – шина данных; шу – шина управления; МП – микропроцессор; ОЗУ – оперативное запоминающее устройство; Дисплей – жидкокристаллический индикатор; ПЗУ – постоянное запоминающее устройство; ПТ – программируемый таймер; ППИ – параллельный программируемый интерфейс; АЦП – аналогово-цифровой преобразователь; БИ – блок индикации (светодиоды); PIC – контроллер прерываний; БК – блок кнопок; УСАПП – универсальный синхронно-асинхронный приемопередатчик.
Приложение Б
Блок-схемы алгоритмов работы программы и подпрограмм
На Рисунке Б.1 изображена блок-схема алгоритма работы основной программы.
Рисунок Б.1 – Блок-схема алгоритма работы основной программы
На Рисунке Б.2 показана блок-схема алгоритм подпрограммы обработки запроса на прерывание от таймера, обеспечивающая опрос датчиков.
На Рисунке Б.3 показана блок-схема обработки запроса на прерывание, вызванное нажатием кнопки.
Рисунок Б.2 – Блок-схема подпрограммы опроса датчиков
Рисунок Б.3 – Подпрограмма обработки нажатия на кнопку
Приложение В
Текст программы
Метка |
Мнемокод |
Комментарий |
Инициализация микропроцессорной системы | ||
LXI SP, 3FFFH |
Инициализация указателя стека | |
MVI A, 92H |
Инициализация параллельного интерфейса | |
OUT 2BH | ||
MVI A, 82H |
Инициализация параллельного интерфейса | |
OUT 2FH | ||
MVI A, 00H |
Обнулить ячейки кодов неисправностей | |
STA 3000H | ||
STA 3004Н | ||
MVI A, 36H |
Инициализация счетчика 0 таймера на режим делителя частоты для синхронизации приема/передачи последовательного интерфейса, частота синхронизации 1200 Гц | |
OUT 37H | ||
MVI A, E2Н | ||
OUT 34H | ||
MVI A, 04Н | ||
OUT 34H | ||
MVI A, B0H |
Инициализация счетчика таймера на импульс через 20 мс для организации запроса на прерывание | |
OUT 37H | ||
MVI A, 30H | ||
OUT 36H | ||
MVI A, 75H | ||
OUT 36H | ||
EI |
Разрешить прерывания | |
Очистка ОЗУ | ||
MVI A,80H |
Очистка ОЗУ | |
MVI B,00H | ||
JNZ R1 | ||
MVI C,02H |
Число тестов при сбое | |
MVI A,00H |
Очистка и тестирование ОЗУ | |
LXI D,2000H | ||
MVI B,0FH | ||
MVI C,FFH | ||
STAX D | ||
LDAX B | ||
JZ R2 | ||
LXI B,3001H |
||
MVI A, 01H |
||
STAX B |
||
POP B |
||
Опрос датчиков | ||
BEGIN |
MVI A, 08H |
Выбор канала датчика тока на входе |
OUT 2АH | ||
CALL CONV |
Вызов подпрограммы аналого-цифрового преобразования | |
MOV A, H |
Контроль исправности датчика (неисправен, если показания датчика < 0) | |
ORA A | ||
JP SCALE1 | ||
LDA 3000H |
Установка соответствующего бита в ячейке неисправностей | |
ORI 01H | ||
STA 3000H | ||
JMP NEXT2 |
Переход к опросу следующего датчика | |
SCALE1 |
LDA 3000H |
Сброс соответствующего бита в ячейке кода неисправностей |
ANI FEH | ||
STA 3000Н | ||
MOV B, H |
Масштабирование показаний датчика (XXXXH – данные с АЦП) | |
MOV C, L |
||
SHLD 3002H |
Сохранение промежуточного результата вычислений | |
MOV H, B |
||
MOV L, C |
||
LXI D,09H |
Задать множитель 09 | |
CALL MULTI |
Умножение | |
LXI D, 001EH |
Задать делитель | |
CALL DIV |
Разделить показания датчика на 30 | |
XCHG |
||
LHLD 3002H |
||
CALL SUBTR |
Вычислить натуральное тока на входе=(1-9/30)×XXXXH | |
SHLD 3010H |
Сохранить значение тока в базе данных | |
NEXT2 |
MVI A, 09H |
Выбор канала датчика напряжения на входе |
OUT 2АH | ||
CALL CONV |
Вызов подпрограммы аналого-цифрового преобразования | |
MOV A, H |
Контроль исправности датчика (неисправен, если показания датчика < 0) | |
ORA A | ||
JP SCALE2 | ||
LDA 3000H |
Установка соответствующего бита в ячейке неисправностей | |
ORI 02H | ||
STA 3000H | ||
JMP NEXT3 |
Переход к опросу следующего датчика | |
SCALE2 |
LDA 3000H |
Сброс соответствующего бита в ячейке кода неисправностей |
ANI FDH | ||
STA 3000Н | ||
Масштабирование показаний датчика (XXXXH – данные с АЦП) | ||
LXI D,0EH |
||
CALL MULTI |
||
SHLD 3012H |
Сохранить значение напряжения в базе данных | |
NEXT3 |
MVI A, 0AH |
Выбор канала датчика напряжения |
OUT 2АH | ||
CALL CONV |
Вызов подпрограммы аналого-цифрового преобразования | |
MOV A, H |
Контроль исправности датчика (неисправен, если показания датчика < 0) | |
ORA A | ||
JP SCALE3 | ||
LDA 3000H |
Установка соответствующего бита в ячейке неисправностей | |
ORI 04H | ||
STA 3000H | ||
JMP NEXT4 |
Переход к опросу следующего датчика | |
SCALE3 |
LDA 3000H |
Сброс соответствующего бита в ячейке кода неисправностей |
ANI FBH | ||
STA 3000Н | ||
MOV B, H |
Масштабирование показаний датчика (XXXXH – данные с АЦП) | |
MOV C, L |
||
SHLD 3002H |
Сохранение промежуточного результата вычислений | |
LXI D, 000AH |
Задать делитель | |
CALL DIV |
Разделить показания датчика на 10 | |
XCHG |
||
LHLD 3002H |
||
CALL SUBTR |
Вычислить натуральное значение напряжения =(1-1/10)×XXXXH | |
SHLD 3014H |
Сохранить значение напряжения в базе данных | |
NEXT4 |
MVI A, 0BH |
Выбор канала датчика тока |
OUT 2АH | ||
CALL CONV |
Вызов подпрограммы аналого-цифрового преобразования | |
MOV A, H |
Контроль исправности датчика (неисправен, если показания датчика < 0) | |
ORA A | ||
JP SCALE4 | ||
LDA 3000H |
Установка соответствующего бита в ячейке неисправностей | |
ORI 08H | ||
STA 3000H | ||
JMP NEXT5 |
Переход к опросу следующего датчика | |
SCALE4 |
LDA 3000H |
Сброс соответствующего бита в ячейке кода неисправностей |
ANI F7H | ||
STA 3000Н | ||
MOV B, H |
Масштабирование показаний датчика (XXXXH – данные с АЦП) | |
MOV C, L |
||
SHLD 3002H |
Сохранение промежуточного результата вычислений | |
LXI D, 000AH |
Задать делитель | |
CALL DIV |
Разделить показания датчика на 10 | |
XCHG |
||
LHLD 3002H |
||
CALL SUBTR |
Вычислить натуральное значение тока =(1-1/10)×XXXXH | |
SHLD 3016H |
Сохранить значение тока в базе данных | |
NEXT5 |
MVI A, 0CH |
Выбор канала датчика тока |
OUT 2АH | ||
CALL CONV |
Вызов подпрограммы аналого-цифрового преобразования | |
MOV A, H |
Контроль исправности датчика (неисправен, если показания датчика < 0) | |
ORA A | ||
JP SCALE6 | ||
LDA 3000H |
Установка соответствующего бита в ячейке неисправностей | |
ORI 10H | ||
STA 3000H | ||
JMP NEXT6 |
Переход к опросу следующего датчика | |
SCALE5 |
LDA 3000H |
Сброс соответствующего бита в ячейке кода неисправностей |
ANI EFH | ||
STA 3000Н | ||
MOV B, H |
Масштабирование показаний датчика (XXXXH – данные с АЦП) | |
MOV C, L |
||
SHLD 3002H |
Сохранение промежуточного результата вычислений | |
LXI D, 000AH |
Задать делитель | |
CALL DIV |
Разделить показания датчика на 10 | |
XCHG |
||
LHLD 3002H |
||
CALL SUBTR |
Вычислить натуральное значение напряжения =(1-1/10)×XXXXH | |
SHLD 3018H |
Сохранить значение напряжения в базе данных | |
NEXT6 |
MVI A, 0DH |
Выбор канала датчика напряжения на выходе |
OUT 2АH | ||
CALL CONV |
Вызов подпрограммы аналого-цифрового преобразования | |
MOV A, H |
Контроль исправности датчика (неисправен, если показания датчика < 0) | |
ORA A | ||
JP SCALE6 | ||
LDA 3000H |
Установка соответствующего бита в ячейке неисправностей | |
ORI 20H | ||
STA 3000H | ||
JMP NEXT7 |
Переход к опросу следующего датчика | |
SCALE6 |
LDA 3000H |
Сброс соответствующего бита в ячейке кода неисправностей |
ANI DFH | ||
STA 3000Н | ||
MOV B, H |
Масштабирование показаний датчика (XXXXH – данные с АЦП) | |
MOV C, L |
||
LXI D,02H |
Задать множитель 02 | |
CALL MULTI |
Умножение | |
SHLD 3002H |
Сохранение промежуточного результата вычислений | |
MOV H, B |
||
MOV L, C |
||
LXI D,03H |
Задать множитель 03 | |
CALL MULTI |
Умножение | |
LXI D, 0005H |
Задать делитель | |
CALL DIV |
Разделить показания датчика на 5 | |
XCHG |
||
LHLD 3002H |
||
CALL SUBTR |
Вычислить натуральное значение напряжения =(2-3/5)×XXXXH | |
SHLD 301АH |
Сохранить значение напряжения в базе данных | |
NEXT7 |
MVI A, 0EH |
Выбор канала датчика давления |
OUT 2АH | ||
CALL CONV |
Вызов подпрограммы аналого-цифрового преобразования | |
MOV A, H |
Контроль исправности датчика (неисправен, если показания датчика < 0) | |
ORA A | ||
JP SCALE7 | ||
LDA 3000H |
Установка соответствующего бита в ячейке неисправностей | |
ORI 40H | ||
STA 3000H | ||
JMP NEXT8 |
Переход к опросу следующего датчика | |
SCALE7 |
LDA 3000H |
Сброс соответствующего бита в ячейке кода неисправностей |
ANI BFH | ||
STA 3000Н | ||
MOV B, H |
Масштабирование показаний датчика (XXXXH – данные с АЦП) | |
MOV C, L |
||
LXI D,02H |
Задать множитель 02 | |
CALL MULTI |
Умножение | |
SHLD 3002H |
Сохранение промежуточного результата вычислений | |
MOV H, B |
||
MOV L, C |
||
LXI D,03H |
Задать множитель 03 | |
CALL MULTI |
Умножение | |
LXI D, 0005H |
Задать делитель | |
CALL DIV |
Разделить показания датчика на 5 | |
XCHG |
||
LHLD 3002H |
||
CALL SUBTR |
Вычислить натуральное значение тока =(2-3/5)×XXXXH | |
SHLD 301СH |
Сохранить значение тока в базе данных | |
NEXT8 |
MVI A, 0АH |
Выбор канала датчика тока |
OUT 2АH |
||
CALL CONV |
Вызов подпрограммы аналого-цифрового преобразования Контроль исправности датчика и переход к масштабированию показаний датчика | |
MOV A, H | ||
ORA A |
||
JP SCALE8 |
Установка соответствующего бита в коде неисправностей | |
LDA 3000H | ||
ORI 80H | ||
STA 3000H |
Переход к опросу следующего датчика в случае неисправности датчика Сброс соответствующего бита в ячейке кода неисправностей | |
JMP NEXT9 | ||
SCALE8 |
LDA 3000H | |
ANI 7АH |
||
STA 3000H |
Масштабирование показаний датчика | |
MOV B, H | ||
MOV C, L | ||
LXI D, 001АH |
Задать множитель | |
CALL MULTI |
Умножить показания датчика на 28 | |
SHLD 301ЕH |
Сохранить значение тока в базе данных | |
NEXT9 |
MVI A, 00H |
Выбор канала датчика тока |
OUT 2АH | ||
CALL CONV |
Вызов подпрограммы аналого-цифрового преобразования | |
MOV A, H |
Контроль исправности датчика (неисправен, если показания датчика < 0) | |
ORA A | ||
JP SCALE9 | ||
LDA 3001H |
Установка соответствующего бита в ячейке неисправностей | |
ORI 01H | ||
STA 3001H | ||
JMP NEXT10 |
Переход к опросу следующего датчика | |
SCALE9 |
LDA 3001H |
Сброс соответствующего бита в ячейке кода неисправностей |
ANI FЕH | ||
STA 3001Н | ||
MOV B, H |
Масштабирование показаний датчика (XXXXH – данные с АЦП) | |
MOV C, L |
||
LXI D,03H |
Задать множитель 03 | |
CALL MULTI |
Умножение | |
SHLD 3002H |
Сохранение промежуточного результата вычислений | |
MOV H, B |
||
MOV L, C |
||
LXI D, 0005H |
Задать делитель | |
CALL DIV |
Разделить показания датчика на 5 | |
XCHG |
||
LHLD 3002H |
||
CALL SUBTR |
Вычислить натуральное значение напряжения =(3-3/5)×XXXXH | |
SHLD 3020H |
Сохранить значение напряжения в базе данных | |
NEXT10 |
MVI A, 02H |
Выбор канала датчика напряжения |
OUT 2АH | ||
CALL CONV |
Вызов подпрограммы аналого-цифрового преобразования | |
MOV A, H |
Контроль исправности датчика (неисправен, если показания датчика < 0) | |
ORA A | ||
JP SCALE10 | ||
LDA 3001H |
Установка соответствующего бита в ячейке неисправностей | |
ORI 02H | ||
STA 3001H | ||
JMP NEXT11 |
Переход к опросу следующего датчика | |
SCALE10 |
LDA 3001H |
Сброс соответствующего бита в ячейке кода неисправностей |
ANI FDH | ||
STA 3001Н | ||
MOV B, H |
Масштабирование показаний датчика (XXXXH – данные с АЦП) | |
MOV C, L |
||
LXI D,02H |
Задать множитель 02 | |
CALL MULTI |
Умножение | |
SHLD 3002H |
Сохранение промежуточного результата вычислений | |
MOV H, B |
||
MOV L, C |
||
LXI D,03H |
Задать множитель 03 | |
CALL MULTI |
Умножение | |
LXI D, 0005H |
Задать делитель | |
CALL DIV |
Разделить показания датчика на 5 | |
XCHG |
||
LHLD 3002H |
||
CALL SUBTR |
Вычислить натуральное значение тока =(2-3/5)×XXXXH | |
SHLD 3022H |
Сохранить значение тока в базе данных | |
NEXT11 |
MVI A, 03H |
Выбор канала датчика давления |
OUT 2АH | ||
CALL CONV |
Вызов подпрограммы аналого-цифрового преобразования | |
MOV A, H |
Контроль исправности датчика (неисправен, если показания датчика < 0) | |
ORA A | ||
JP SCALE11 | ||
LDA 3001H |
Установка соответствующего бита в ячейке неисправностей | |
ORI 04H | ||
STA 3001H | ||
JMP NEXT12 |
Переход к опросу следующего датчика | |
SCALE11 |
LDA 3001H |
Сброс соответствующего бита в ячейке кода неисправностей |
ANI FВH | ||
STA 3001Н | ||
MOV B, H |
Масштабирование показаний датчика (XXXXH – данные с АЦП) | |
MOV C, L |
||
LXI D,02H |
Задать множитель 02 | |
CALL MULTI |
Умножение | |
SHLD 3002H |
Сохранение промежуточного результата вычислений | |
MOV H, B |
||
MOV L, C |
||
LXI D,03H |
Задать множитель 03 | |
CALL MULTI |
Умножение | |
LXI D, 0005H |
Задать делитель | |
CALL DIV |
Разделить показания датчика на 5 | |
XCHG |
||
LHLD 3002H |
||
CALL SUBTR |
Вычислить натуральное значение напряжения =(2-3/5)×XXXXH | |
SHLD 3024H |
Сохранить значение напряжения в базе данных | |
NEXT12 |
MVI A, 04H |
Выбор канала датчика напряжения на выходе |
OUT 2АH | ||
CALL CONV |
Вызов подпрограммы аналого-цифрового преобразования | |
MOV A, H |
Контроль исправности датчика (неисправен, если показания датчика < 0) | |
ORA A | ||
JP SCALE12 | ||
LDA 3001H |
Установка соответствующего бита в ячейке неисправностей | |
ORI 08H | ||
STA 3001H | ||
JMP NEXT13 |
Переход к опросу следующего датчика | |
SCALE12 |
LDA 3001H |
Сброс соответствующего бита в ячейке кода неисправностей |
ANI F7H | ||
STA 3001Н | ||
MOV B, H |
Масштабирование показаний датчика (XXXXH – данные с АЦП) | |
MOV C, L |
||
LXI D,0ЕH |
Задать множитель 14 | |
CALL MULTI |
Умножение | |
SHLD 3026H |
Сохранить значение тока в базе данных | |
LDA 3001H |
Установка соответствующего бита в ячейке неисправностей | |
ORI 10H | ||
STA 3001H | ||
JMP NEXT14 |
Переход к опросу следующего датчика | |
SCALE13 |
LDA 3001H |
Сброс соответствующего бита в ячейке кода неисправностей |
ANI ЕFH | ||
STA 3001Н | ||
MOV B, H |
Масштабирование показаний датчика (XXXXH – данные с АЦП) | |
MOV C, L |
||
LXI D,02H |
Задать множитель 02 | |
CALL MULTI |
Умножение | |
SHLD 3002H |
Сохранение промежуточного результата вычислений | |
MOV H, B |
||
MOV L, C |
||
LXI D,03H |
Задать множитель 03 | |
CALL MULTI |
Умножение | |
LXI D, 0005H |
Задать делитель | |
CALL DIV |
Разделить показания датчика на 5 | |
XCHG |
||
LHLD 3002H |
||
Подпрограмма деления 2-байтовых чисел (делимое в HL, делитель в DE, результат ® HL) | ||
DIV |
PUSH B |
|
LXI B, 0000H |
||
DV1 |
MOV A, L |
|
SUB E |
||
MOV L, A |
||
MOV A, H |
||
SBB D |
||
JM DV2 |
||
INX B |
||
JMP DV1 |
||
DV2 |
MOV H, B |
|
MOV L, C |
||
POP B |
||
RET |
||
Подпрограмма деления 2-байтовых чисел с учетом знака делимого (делимое в HL, делитель в DE, результат ® HL) | ||
SDIV |
PUSH B |
|
SDV1 |
MOV A, H |
|
ORA A |
||
JP SDV3 |
Определение знака делимого | |
CALL EXT |
Вызов подпрограммы преобразования делимого в дополнительный код | |
LXI B, 0000H |
||
SDV1 |
MOV A, L |
|
SUB E |
||
MOV L, A |
||
MOV A, H |
||
SBB D |
||
JM SDV2 |
||
INX B |
||
JMP SDV1 |
||
SDV2 |
MOV H, B |
|
MOV L, C |
||
CALL EXT |
Вызов подпрограммы преобразования результата в дополнительный код | |
POP B |
||
RET |
||
SDV3 |
LXI B, 0000H |
|
MOV A, L |
||
SUB E |
||
MOV L, A |
||
MOV A, H |
||
SBB D |
||
JM SDV4 |
||
INX B |
||
JMP SDV3 |
||
SDV4 |
MOV H, B |
|
MOV L, C |
||
POP B |
||
RET |
||
Подпрограмма аналого-цифрового преобразования (приведенный к нулевому уровню результат ® HL) | ||
CONV |
MVI A, 0АH |
Запуск АЦП (подача сигнала /ST) |
OUT 2ВH |
||
MVI A, 0ВH |
Снятие сигнала /ST | |
OUT 2ВH | ||
C1 |
IN 29H |
Чтение сигнала конца преобразования /RAD |
ANI 08H | ||
JNZ C1 |
Проверка наличия сигнала конца преобразования /RAD Чтение канала В ППИ | |
IN 29H | ||
ANI 03H |
Выделение 8 и 9 разрядов преобразованного значения | |
MOV H, A |
Перенос в регистр Н старшего разряда | |
IN 28H |
Чтение из АЦП младших 8 разрядов преобразованного значения | |
MOV L, A |
Перенос в регистр L младшего разряда | |
LXI D, 00B3H |
Задание нулевого уровня | |
CALL SUBTR |
Приведение показаний АЦП к нулевому уровню | |
RET |
Возврат из подпрограммы | |
Информация о работе Проектирование микропроцессорной системы сбора данных с узла обезвоживания нефти