| Главная страница | | Архитектура микроЭВМ | | Принципы обмена данными | | Лабораторные работы | | Примеры систем | | Программно-логическая модель | | Справочная информация |
 
Однокристальная микроЭВМ МК Система накопления данных

   ПРОГРАММА РАБОТЫ МИКРОЭВМ

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

    Программа инициализации
    Программа инициализации начинает выполняться после подачи питания на микроЭВМ. До ее окончания должны быть запрещены все прерывания. Установка нулевого значения соответствующих регистров производится автоматически при включении питания. Также по умолчанию программа настраивается на работу с банком 0 регистров и порты микроЭВМ переводятся в режим ввода, что исключает необходимость их программной настройки.
    Светодиоды блока индикаторов загораются при единичном состоянии выходов регистра индикации (D17). Поскольку при включении питания разряды регистра могут установиться в произвольное состояние, в программе производится принудительное гашение индикаторов выдачей кода из аккумулятора (исходное состояние 0…0) по любому адресу, относящемуся к нижней половине адресного пространства внешней памяти (Р2.7=1).
    Последовательный порт микроЭВМ настраивается как 8 битовый УАПП без контроля по четности на передачу с частотой 2400 Гц, для задания которой используется таймер T/C1 в режиме 2. Работа последовательного порта в таком режиме требует наличия кварцевого резонатора с частотой 11,059 МГц. Таймер T/C0, используемый для задания периода опроса технологического параметра, настраивается на работу в режиме 1, а прерывание от кнопки TEST (прерывание по входу INT1) - на прерывание по фронту.
    При различном значении S необходимо в коде, считанном с АЦП, несколько младших отбрасываемых разрядов устанавливать в «0», либо выполнять сдвиг этого кода вправо на несколько разрядов. В таблице указан номер младшего разряда АЦП, соответствующего заданной величине S.

Определение разрядности АЦП
S,% Погрешность
результата, В
Погрешность
исходных отсчетов, В
Номер младшего
разряда АЦП
2 0,2048 0,06826 3
3 0,3072 0,1024 3
4 0,4096 0,1365 3
5 0,512 0,17066 4
6 0,6144 0,2048 4
7 0,7168 0,23893 4
8 0,8192 0,27306 4
9 0,87890 0,3072 4
10 1,024 0,31433333 5

    Как определено ранее, с АЦП считывается 7 разрядов (9-3). Следовательно, при значениях S=2-4% сдвига кода не требуется, при S=5-9% требуется сдвиг на 1 разряд, при S=10% - на 2 разряда. При получении параметра S от ПК следует преобразовать его в код количества сдвигов. Проще всего это сделать, используя таблицу в памяти микроЭВМ, где содержимое ячеек таблицы есть число сдвигов, а адрес ячейки будет определяться величиной S. Выберем некоторую ячейку с адресом 50h. При инициализации формируется таблица сдвигов - в ячейки с адресами 52h, 53h, 54h записывается код 0, в ячейки 55h-59h - код 1, в ячейку 5Ah - 2.
    Определим назначение некоторых ячеек памяти микроЭВМ. Ячейку с адресом 0Fh (R7 банка 1) используем как флаг начала работы. При инициализации флаг сбрасывается в «0». От ПК микроЭВМ принимает 3 константы: величину Т (записывается в ячейку 19h - регистр R1 банка 3), количество сдвигов - производная от величины S (записывается в ячейку 1Ah - регистр R2 банка 3), величину K (записывается в ячейку 1Bh - регистр R3 банка 3). Содержимое регистра R0 банка 3 будет определять количество принятых констант. В программе инициализации регистр R0 (ячейка 18h) также сбрасывается в «0».
    При обмене данными с ПК микроЭВМ передает в него сигналы подтверждения, до поступления которого ПК не должен передавать новые данные. В конце программы инициализации после включения таймера T/C1 и разрешения прерываний от последовательного порта в ПК посылается код 01h - сигнал разрешения настройки (посылки констант).

Блок-схема алгоритма
программы
инициализации

Текст программы

    Программа обработки прерывания от последовательного порта
    Программа обработки прерывания от последовательного порта располагается в памяти программ микроЭВМ, начиная с адреса 23h, и работает с регистрами банка 3. Различные банки регистров для различных программ выбраны для того, чтобы исключить множественные пересылки содержимого регистров в стек и обратно при входе в прерывание и возврате из него, а также в некоторых случаях для удобства написания программы - использования символических обозначений ячеек памяти как R0-R7. Для переключения на новый банк регистров при входе в программу прерывания или в иных случаях достаточно изменить состояния разрядов слова PSW, определяющих номер рабочего банка.
    При входе в программу обработки прерывания необходимо сбрасывать флаг запроса прерывания - RI, так как при прерывании от последовательного порта микроЭВМ автоматического сброса флага не происходит.
    Принятый байт передается в аккумулятор, после чего определяется тип принятой константы. Предполагается, что ПК посылает константы в строго определенном порядке: сначала Т, затем S, затем К. После этого любой посланный байт означает разрешение накопления данных. Количество принятых констант или тип принимаемой в настоящий момент константы определяется по содержимому регистра R0. После приема каждой константы содержимое R0 увеличивается на 1 и в ПК посылается или код 02 - подтверждение приема байта константы или код 03 - сигнал о том, что все 3 константы приняты.
    После приема константы S происходит преобразование S в адрес ячейки таблицы сдвигов и в регистре R2 фиксируется количество необходимых сдвигов выходного кода с АЦП.
    После приема трех констант устанавливается начальный адрес внешней памяти, загружаются константы пересчета в таймер T/C0 и в программные счетчики и разрешаются прерывания от таймера и от кнопки TEST (INT1).
    Прием сигнала о начале вывода данных запрещает все прерывания и подготавливает систему к выдаче данных из памяти с учетом константы К. ПК передает в микроЭВМ константу К уже с учетом точности, т.е. двоичный код, соответствующий выходному коду с АЦП, уже сдвинут на необходимое количество разрядов влево. Регистр R6 используется для подсчета количества параметров, по величине меньших К. Начальный адрес внешней памяти опять устанавливается в ноль.
    Если считанный из памяти параметр, меньший К, не последний из запомненных, то считывается новое значение. В противном случае происходит передача. Передача происходит и при значении параметра, большем К.
    Под передачей понимается пересылка в ПК или значения параметра или код количества отсчетов, меньших К. Эти величины каким-то образом должны отличаться. Если это параметр, то в старшем разряде предается «0» (код параметра максимум 7-разрядный), код количества меньших параметров в старшем разряде имеет «1». Число отсчетов, меньших К, может оказаться большим, тогда вывод производится последовательно несколько раз, причем максимальное значение кода отсчетов в одном выводе равно 127.
    Новое значение может быть передано в ПК только после получения сигнала подтверждения приема (любой байт).
    Признаком окончания чтения из внешней памяти является совпадение состояния счетчика DPTR и копии последнего адреса, по которому записывались данные, в регистрах R4 и R5. Завершается работа системы посылкой в ПК кода 05 - сигнала окончания передачи накопленных данных.

Блок-схема алгоритма
программы
прерывания
от последовательного
порта
(часть 1)

(часть 2)

Текст программы

    Программа обработки прерывания от таймера T/C0
    Программа обработки прерывания от таймера T/C0 располагается в памяти программ микроЭВМ, начиная с адреса 0bh, и работает с регистрами банка 1.
    Опрос параметра через период Т естественно следует реализовать с использованием таймера/счетчика микроЭВМ, работающего в режиме таймера, когда он изменяет свое состояние через каждый машинный цикл (1мкс при частоте кварцевого генератора, равной 12 МГц). Таймер необходимо настраивать на различные периоды пересчета. Таймер может работать как 8 разрядный двоичный счетчик с автоматической перезагрузкой константы пересчета (режим 2), так и как 16-ти разрядный счетчик (режим 1). В режиме 2 можно получить максимальный период пересчета таймера равный 256 мкс, что для нашего случая явно подходит. В режиме 1 максимальное время периода пересчета равно 65,5 мс. Следовательно, одним таймером ограничиться невозможно. Поэтому, можно настроить таймер на пересчет в 50 мс, использовать программный счетчик с константой пересчета 20 (регистр R1), в результате чего получим период пересчета в 1 с. Еще один программный счетчик (регистр R3), в который должна засылаться константа Т, обеспечит заданный период опроса технологического параметра.
    Вход в программу обработки прерывания будет происходить каждые 50 мс. После этого выполняется перезагрузка таймера T/C0 и анализ состояния программных счетчиков. Каждый раз после обнуления регистра R3 (истечении времени Т) происходит обращение к подпрограмме оцифровки параметра и запись результата во внешнюю память с последующим увеличением адреса памяти (регистр DPTR) и копированием его содержимого в ячейках 1Ch и 1Dh (регистрах R4 и R5 банка 3). Копирование необходимо для запоминания номера последней ячейки памяти, в которую выполнялась запись, так как при выводе данных отсчет ячеек начинается с нуля.
    Перед обращением к подпрограмме формируется единичное значение параметра оцифровки (ячейка 0h - регистр R0 банка 0), что будет свидетельствовать о необходимости учета значения константы S при оцифровке.
    Точно (с точностью до долей секунды) привязать время начала первой оцифровки к абсолютному времени или ко времени в ПК невозможно - в микроЭВМ нет часов. Однако следует все-таки послать в ПК какой-то сигнал (код 04h - сигнал временной привязки) в момент первого опроса параметра (при нулевом значении флага начала) для грубой привязки ко времени (посылка сигнала производится по последовательному порту и ПК может понадобиться некоторое время реакции на фиксацию этого сигнала).
    Указанные выше значения константы пересчета требуют уточнения. Во-первых, в системе накопления данных длительность машинного цикла равна не 1 мкс, а 1,08509 мкс. Во-вторых, таймер работает независимо от процессора микроЭВМ и следует учитывать как время реакции процессора на прерывание, так и время на выполнение команд анализа состояния регистров в программе обработки прерывания. Вследствие этого период пересчета таймера может отличаться от 50 мс. Вычислить константу пересчета, которую необходимо загружать в таймер, можно только после написания текста программы.

Блок-схема алгоритма
программы
обработки
прерывания
от таймера T/C0

Текст программы

    Программа обработки прерывания от кнопки TEST (INT1)
    Единичный запрос от кнопки TEST должен иметь меньший приоритет, чем запрос прерывания от таймера T/C0, определяющего временной интервал между опросами параметра, поэтому сигнал запроса от кнопки TEST поступает на вход внешнего прерывания INT1.
    Программа обработки прерывания от внешнего входа INT1 располагается в памяти программ микроЭВМ, начиная с адреса 13h, и работает с регистрами банка 2.
    Программа обработки прерывания обращается к подпрограмме оцифровки технологического параметра, при этом подпрограмме передается значение параметра оцифровки (ячейка с адресом 0h), равное 0, что не требует учета значения константы S.

Текст программы

    Подпрограмма оцифровки технологического параметра
    Программа оцифровки технологического параметра работает с регистрами банка 0. В начале программы обнуляется регистр суммы результатов оцифровки параметра (регистр R7), в регистры В и R6 записывается код количества опросов параметра, в регистр R2 копируется код количества сдвигов из ячейки 1Ah (регистр R2 банка 3). В регистре R0 (ячейка с адресом 0h) находится значение параметра оцифровки. Если оно равно 0, то содержимое регистра R2 обнуляется.
    После запуска и опроса АЦП с анализом готовности результата, считанный код при необходимости сдвигается влево на 1 или 2 разряда, затем производится накопление суммы в регистре R7. После трехкратного опроса датчика вычисляется среднее значение технологического параметра.

Блок-схема алгоритма
подпрограммы
оцифровки

Текст программы

   ТЕПЕРЬ ДЛЯ ВЫПОЛНЕНИЯ ЗАДАНИЯ ТРЕБУЕТСЯ:

- оценить точность реализации периода опроса технологического параметра Оценка точности
- отладить программу работы микроЭВМ Отладка программы

| На главную страницу | На начало раздела | Задание на разработку системы | На предыдущий этап | На начало страницы | © КСиТ МИФИ, 2002 г.