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

0 ... 28 29 30 31 32 33 34 ... 39

~ Задача № 6 ~

Если во время работы системы механизмов, которыми управляет микрокомпьютер, какой-то из переключателей принимает состояние «Ь, это означает неисправность системы. При этом напряжение питания отключается, двигатель останавливается, а ЦПУ прекращает работу

Адрес данных порта А : ОАОН Адрес управляющего кода: ОАШ

ЦПУ

INT

Шина данных а-к

Ао

ПИ

А,

А2

<

А3

1

Ад

в

А5

INT

А«

А7

Сигнал включения напряжения питания Команда запуска двигателя Сигнал неисправности в цепи питания Команда включения соленоида Сигнал изменения положения Команда включения обогревателя Сигнал отклонения от температурного режима Команда включения соленоида

Рис. 8.10. Соединение внешнего устройства через порт А (ПИ работает в режиме «3»)

мем OR и Н и получим 10110111 (0В7Н). Для формирования кода маски каждый из 3 разрядов, соответствующих входам, которые могут быть входами прерывания, должен быть установлен в «0». Поэтому в нашем случае разряды 2-й, 4-й и 6-й сбрасываются в «0», а остальные разряды устанавливаются в «1», то есть код маски становится равным 10101011 (0ABH).

При отключении напряжения питания системы механизмов и остановке двигателя на входах ПИ устанавливается первый адрес программы обработки прерывания (0800Н), осуществляющей остановку работы ЦПУ. Пусть значение вектора адреса, указывающего первый адрес программы обработки прерывания, равно 0300Н. Тогда в регистр I ЦПУ нужно загрузить код 03Н. Соответственно в ПИ в качестве вектора прерывания загружается код ООН.

Осмыслив вышесказанное, давайте разберем программу на язы-ассемблера, представленную на Рис. 8.11.

ORG LD Ш LD LD LD OUT LD OUT LD OUT LD OUT LD OUT El

0000H SP, 1000H 2

A, 03H I, A A, 00H (0A1H),A A, 0CFH (0A1H),A A, 54H (0A1H),A A, 0B7H (0A1H),A A, 0ABH (0A1H),A

Установка режима прерывания «2» Загрузка кода 03Н в регистр I ЦПУ

Установка вектора прерывания «ООН»

Программирование порта А ПИ для работы в режиме «3»

Установка назначения каждого разряда порта А

Установка кода управления прерыванием (Н, OR)

Установка маски Разрешение прерывания

Выполняется программа управления работой системы механизмов в нормальном режиме

ORG 0300Н DEFW 0800Н

ORG 0800Н LD А, ООН OUT (0A0H), А HALT

END

Указывают загрузку первого адреса программы отработки прерывания 0800Н по адресу 0300Н

Программа отработки прерывания

начинается с адреса 0800Н

По команде HALT ЦПУ останавливается

УРис. 8.11. Программа к задаче № 6

ц Первая команда программы служит для установки указателя сте-Вка. Затем производится установка ПИ в режим прерывания «2». Для ©того в регистр 1 ЦПУ загружаются старшие разряды (03Н) вектора [адреса. Затем по команде вывода (OUT) по адресу 0А1Н кода управления порта А (см. Рис. 8.10) последовательно загружаются 5 кодов


управления. После завершения всех установок выполняется команда «Е1», разрешающая прерывание во время выполнения основной программы.

После этого начинается выполнение программы управления работой системы механизмов в основном (нормальном) режиме.

Команды «ORG» и «DEFW» (см. программу, представленную на Рис. 8.11) указывают момент загрузки первого адреса программы обработки прерывания (0800Н) по адресу ОЗООН. Команда «НАЕТ» - последняя команда в программе обработки прерывания, начинающейся с адреса 0800Н, останавливает работу ЦПУ.

По команде «НАЕТ» (машинный код 76) работа ЦПУ прекраща-ется до повторного ввода в ЦПУ сигнала RESET. При подаче сигнала RESET счетчик команд обнуляется и ЦПУ снова приступает к выполнению программы, начиная с адреса 0000Н.

Если при выполнении описанной выше программы хотя бы один из входов, соединенных с переключателями (Рис. 8.10), примет состояние «1», то возникнет сигнал прерывания, и ЦПУ перейдет к программе обработки прерывания. После остановки двигателя и отключения напряжения питания системы механизмов ЦПУ выполняет команду «HALT» и прекращает работу. Таким образом, в данном примере после выполнения программы обработки прерывания ЦПУ не возвращается к прерванной программе. Если необходим возврат к исходной программе после выполнения программы обработки прерывания, в конце программы обработки прерывания выполняется команда «RETI» (Return from Interrupt (машинный код «ED 4D»).

Возможно, некоторым читателям рассмотренная выше программа, использующая так называемые средства прерывания, покажется слишком сложной. Тем более что без нее вполне можно обойтись. Действительно, достаточно было бы включить в программу периодически повторяющуюся команду «IN». И если хотя бы один из трех входов, отслеживающих сигналы экстренных ситуаций, перейдет в состояние «1», нужно передать управление по адресу 0800Н, по которому загружена программа, останавливающая систему механизмов.

Безусловно, в некоторых случаях такой алгоритм вполне приемлем. Однако довольно часто возникает необходимость как можно быстрее среагировать на внешний сигнал. В этом случае, для того чтобы своевременно обнаружить наличие «аварийного» сигнала, необходимо с помощью команды ввода проверять содержимое портов ввода, многократно выполняя команду «IN» с интервалом заведомо меньшим, чем минимальный ожидаемый интервал между аварийными сигналами, которые мы хотим зарегистрировать. Чем менее регулярно следуют друг за другом эти сигналы, тем менее оправдано применение такого метода, так как процессору приходится слишком часто проверять содержимое регистра с пометкой «до востребования», «отвлекаясь» от выполнения других операций, предусмотренных программой.

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

g дЧасто при выполнении какой-либо

Б"испрограммы ЦПУ приходится отмерять

ТАЙМЕРА-СЧЕТЧИКА интервалы времени. В этом вы имели (СТС)возможность убедиться на примерах,

рассмотренных нами в предыдущей главе. Если помните, для того чтобы осуществить задержку требуемой продолжительности между определенными операциями, мы «заставляли» ЦПУ демонстрировать свое умение считать двоичные числа, то есть мы намеренно ограничивали производительность ЦПУ, используя его в качестве таймера. Разумеется, такое решение нельзя признать оптимальным. Гораздо целесообразнее было бы применить специализированное устройство, выполняющее только одну функцию - отсчет времени. Тогда ЦПУ достаточно было бы лишь запускать это устройство, а затем получать от него сигналы об окончании заданного интервала времени. Такие Устройства называются счетчиками или таймерами.


Давайте для примера рассмотрим БИС таймера, специально разработанную для работы с микропроцессором Z80 - СТС (Counter Timer Circuit). Это 28-выводная БИС, содержащая регистр, в который загружается произвольное двоичное число. Это число и определяет длительность отмеряемого отрезка времени. С каждым импульсом тактовой частоты из числа, загруженного в регистр таймера при установке заданного интервала времени, вычитается 1. Когда значение этого числа становится равным 0, таймер вырабатывает сигналы INT и ZC/TO (zero count/time out). Установка таймера, то есть загрузка соответствующего числа импульсов, выполняется ЦПУ через шину данных.

Как показано на Рис. 8.12, таймер сообщает ЦПУ о завершении счета по цепи: вывод INT таймера - вывод INT ЦПУ.

Z80CTC

ЦПУ

Вход синхросигнала

INT

INT

СТС

Регистр

С 1

Число подсчитанных импульсов

С каждым импульсом тактовой частоты из числа, загруженного из ЦПУ, вычитается 1. Когда это число становится равным О, вырабатываются сигналы INT и ТО (ZC)

ТО или ZC

Таймер 1Осуществляет задержку, ---определяемую числом прошедших импульсов

Счетчик 1Подсчитывает импульсы, поданные на вход J(это число может быть считано ЦПУ)

Рис. 8.12. БИС таймера-счетчика (СТС)

Для использования данной БИС в качестве таймера, подаюше-го сигнал после прохождения заданного числа импульсов, на вход 0 необходимо подать периодическую последовательность импульсов. Если в программе запустить таймер, предварительно записав в его регистр число, соответствующее длительности отмеряемого интервала времени, то с приходом каждого очередного импульса на

8.3. БИС таймера-счетчика (СТС)

вход 0 таймер будет вычитать 1 из содержимого регистра. Когда со-держимое регистра станет равно 0, вырабатывается сигнал INT, оповещающий ЦПУ о том, что установленное время истекло. Следовательно, пока из таймера не придет сигнал окончания заданного интервала времени, ЦПУ может выполнять другую работу.

В состав БИС входят 4-счетные схемы, которые можно запускать по отдельности. Кроме того, таймер можно применять в качестве генератора импульсов, период следования которых задается программно. В этом режиме в регистр счетчика загружается число, соответствующее заданному периоду следования импульсов. Как только счетчик закончит обратный отсчет загруженного в него числа, это число снова автоматически загружается в счетчик, и отсчет повторяется. Поэтому на выходе ZC/TO таймера сигнал представляет собой последовательность импульсов с периодом, соответствующим числу, загружаемому в счетчик.

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

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

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

Интегральные таймеры часто используются для подсчета непериодических импульсов, генерируемых какими-либо внешними уст-



0 ... 28 29 30 31 32 33 34 ... 39