8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 21 22 23 24 25 26 27 ... 39

Блок 4 осуществляет задержку на некоторое установленное время между циклами пересылки данных в порт вывода. Здесь используется та же подпрограмма (метка DELAY), что и в программе «запомнить последовательность подачи команд». Можно регулировать длительность интервала, изменяя константу времени задержки.

Функция блока 5: определять момент окончания процедуры воспроизведения. Если 7-й (старший) разряд числа, считанного из памяти, равен «1», операция воспроизведения считается законченной. Последняя команда «JP REPEAT» обеспечивает повторение с самого начала процедуры воспроизведения.

Объединив обе части программы, получим программу, показанную на Рис. 7.14.

Директива ORG указывает первый адрес (0000Н) загрузки программы в память микрокомпьютера. Между этим оператором и оператором «JP REPEAT» располагается текст главной программы.

ORG

0000H - Указание первого адреса,

P0RT1

EQU

OAOH

по которому загружается программа

, Главная программа «запомнить

последовательность сигналов»

LD

(HL), A

SW7CHK:

IN

A, (PORT1) -

Программа воспроизведения

сигналов

JP

REPEAT

DCHNG:

IN

A, (PORT1)

Подпрограмма отслеживания

состояния порта ввода

RET

DELAY:

DEC

DE

Подпрограмма задержки

RET

END

- Мнемокод окончания программы

Рис. 7.14. Программа процедуры записи последовательности сигналов

и последующего воспроизведения с заданным интервалом времени

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

Составленная нами программа с помощью шести реле воспроизводит последовательность сигналов, заданную шестью выключателями на входе контроллера. Воспроизведение команд осуществляется через определенный интервал времени. Изменяя константу времени задержки (число, загружаемое в пару регистров D-E, см. •блок 4 программы, Рис. 7.13), можно изменить скорость операции воспроизведения.

Кроме того, если заменить последнюю команду «JP REPEAT* главной программы на команду «JP SWOCHK» (см. Рис. 7.12), то после выполнения операции воспроизведения система будет возвращаться в состояние ожидания ввода новой последовательности сигналов.

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

В предыдущем разделе мы рас-

ЗАДАЧА № 3 -смотрели программу, воспроизводя-

ЗАПОМНИТЬшую только порядок смены состоя-

ПОСЛЕДОВАТЕЛЬНОСТЬ ния контактов выключателей. Те-СИ ГНАЛО ВпеРь Даваите усовершенствуем co-

ld ВОСПРОИЗВЕСТИ ЕЕ ставленную ранее программу. «На-(ВАРИАНТ 2)учим» ее запоминать и в точности

воспроизводить также и интервалы времени между моментами замыкания контактов соответствующих выключателей.

Запоминаем последовательность подачи сигналов

В этом случае задача несколько усложняется, потому что, помимо информации о состоянии контактов шести выключателей (замк-

6-2970


а

~ Задача № 3 ~

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

нуты/разомкнуты), необходимо занести в память время, прошедшее с момента изменения состояния контактов соответствующего выключателя.

Существует несколько способов подсчета времени. Проще всего определить интервал времени между двумя какими-либо событиями как число, до которого «успеет сосчитать» ЦПУ, начав, скажем, с числа 0. ЦПУ практически мгновенно может сосчитать от 0 до 255 (то есть перебрать в памяти все 8-разрядные двоичные числа). Если выполнить следующие действия, то число, содержащееся в регистре А, последовательно «пробежит» все значения от 0 до 255. XOR А; обнуляем регистр А

LOOP: ADD А, 01Н ; к содержимому регистра А прибавляем 1

(7 тактовых импульсов) JR LOOP ; переходим на метку LOOP (12 тактовых импульсов)

Если при А = 255 к А еще раз прибавить 1, то содержимое регистра А будет снова равно 0. Время, необходимое для изменения содержимого А от 0 до 255, равно:

(7 + 12) х 256 х 0.4 х 10~6 с = 1.95 мс

В этой повторяющейся последовательности в момент сложения 255 и единицы происходит перенос разряда. Разряд переноса в регистре признаков (F) становится равным «1», а регистр А обнуляется. Поскольку один раз (из 256) разряд переноса регистра признаков принимает значение «1», то для определения числа, до которого «досчитал» ЦПУ, необходимо знать не только состояние регистра А, но и сколько раз разряд переноса принимал значение «1».

Подпрограмма для определения интервала времени представлена на Рис. 7.15. Она подсчитывает число повторений счетного цикла от момента запуска до момента изменения содержимого порта ввода.

Подпрограмма DTCHK

Цикл подсчета продолжается до изменения содержимого порта ввода. После чего подсчитанное число заносится в память, и управление передается в главную программу

®

©

®

©

©

Обнуляем регистры С, Д и £

К содержимому регистра С прибавляем 1

Ф

X

Если в предыдущей операции был перенос разряда, то к содержимому регистра D прибавляем 1

X

Если в предыдущей операции был перенос разряда, то к содержимому регистра Е прибавляем 1

X

Данные считываются из порта ввода в регистр А

DTCHK:

COUNT:

Содержимое регистров C-D-E (число, до которого досчитал процессор) побайтно заносится в память

X + Возврат в

главную программу

LD LD LD LD

С, ООН D,00H E.00H А, С ADD А.01Н LD С, А LD A, D ADC А, ООН LD D, А LD А, Е ADC А, ООН LD Е, А

IN

CP

JP

LD

INC

LD

INC

LD

INC

RET

A, (PORT!)

В]

Z, COUNT J (HL), С -HL

(HL), D HL

(HL), E HL

Требуемое число (T) импульсов тактовой частоты 4 7 4 4 7 4 4 7 4 II 4 10

Всего 70

©

J© ©

©

Подпрограмму DCHNG, описанную в предыдущем разделе, нужно заменить на эту подпрограмму

Рис. 7.15. Подпрограмма для записи в память числа повторений счетного цикла в виде 3-байтового числа


Для хранения 3-байтового числа повторений необходимо использование трех 8-разрядных регистров. В приведенном примере это регистры С, D и Е. При каждом проходе цикла к содержимому регистра С прибавляется 1; в регистры D и Е заносится число переносов разряда.

Подпрограмма состоит из 7 блоков (см. Рис. 7.15).

Блок 1: обнуление содержимого регистров С, D, и Е.

Блок 2: к содержимому регистра С прибавляется 1. Все вычисления выполняются в регистре А, поэтому, чтобы увеличить содержимое регистра С на 1, содержимое этого регистра пересылается в регистр А, а результат сложения (А + 1) возвращается в регистр С. Можно было бы выполнить операцию С + 1 с помощью команды «INC С». Однако поскольку при выполнении этой команды разряд переноса в регистре F не меняется, то мы не можем реализовать описанный выше алгоритм.

Блок 3: если при выполнении операций блока 2 был перенос разряда, то к содержимому регистра D прибавляется 1. Для этого используется оператор сложения с переносом «ADC А, ООН». При сложении с нулем единица к содержимому регистра А прибавляется только в том случае, если разряд переноса регистра F равен «1».

Блок 4: если был перенос разряда при сложении с помощью команды ADC в блоке 3, то к содержимому регистра Е прибавляется 1.

Блоки 5 и 6 выполняют те же функции, что и в предыдущем разделе: данные считываются из порта ввода и сравниваются с содержимым регистра В, в который загружены ранее введенные данные. Если значение числа, принятого портом, не изменилось, то подсчет продолжается.

Если это значение изменилось, то осуществляется переход в блок 7: содержимое регистров С, D и Е последовательно загружается из ячеек с адресами, содержащимися в паре регистров H-L.

Программа (см. Рис. 7.15) начинается с команды, обозначенной меткой DTCHK (сокр. от англ. Date Check). Если применить ее как подпрограмму, то можно без каких-либо изменений использовать главную программу предыдущей задачи (см. Рис 7.12). В этом случае подпрограмму проверки состояния порта ввода (DCHNG) следует заменить подпрограммой «DTCHK», которая передает управление главной программе после загрузки в память числа, соответст-

вующего времени задержки данного входного сигнала относительно предыдущего.

Цифры, записанные в столбик справа от текста программы (см. рис. 7.15), - это число импульсов тактовой частоты, необходимое для выполнения каждой из команд цикла «COUNT». Просуммировав, получим ровно 70 импульсов тактовой частоты. Таким образом, время выполнения одного прохода цикла равно:

70...х0.4х 10~6с = 2.8 х 10"5с , При использовании трех 8-разрядных регистров С, D и Е максимальный интервал времени, который мы можем «отмерить», составляет:

(256 х 256 х 256 - 1) х 2.8 х 10 5с = 470 с = 7 мин. 50 с.

Следовательно, эту подпрограмму можно использовать, если временной интервал между сигналами на входе порта ввода не превышает 7 минут 50 секунд.

Максимальное число шагов последовательности подачи сигналов определяется объемом ОЗУ - памяти, работающей на считывание и запись. ОЗУ нашего микрокомпьютера имеет объем 2 Кбайта (2x1024). Чтобы сохранить данные, полученные в процессе одного цикла записи, требуется 4 байта памяти: 1 байт для загрузки состояния переключателей и 3 байта для хранения интервала времени. Исходя их этих данных, можно вычислить максимальное число полных циклов программы:

2x1024 4

(Объем ОЗУ)/(число байтов для запоминания одного полного цикла) = максимальное число запоминаемых циклов.

Однако следует вспомнить, что несколько байтов, начиная с последнего адреса оперативной памяти, отводится под область стека, в которой хранятся адреса возврата из подпрограммы. Поэтому в приведенной выше формуле объем ОЗУ необходимо Уменьшить на величину области стека. С учетом этой поправки максимальное число циклов записи сигналов в ЦПУ Z80 приблизительно равно 500.



0 ... 21 22 23 24 25 26 27 ... 39