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

0 ... 18 19 20 21 22 23 24 ... 39

Мы имеем дело с ЦПУ типа Z80, работа которого синхронизируется генератором тактовой частоты 2.5 МГц. Общее ЗУ программ и данных состоит из ПЗУ программ объемом 2 Кбайт с областью адресов от ООООН до 07FFH и ОЗУ данных точно такой же емкости (2 Кбайт) с адресами от 0800Н до 0FFFH. Кроме того, имеются 2 порта ввода-вывода, построенные на 8-разрядной схеме типа защелки (см. Рис. 4.17). Один из портов имеет адрес ОАОН и используется как порт ввода, другой - порт вывода - имеет адрес 0А1Н.

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

Давайте сначала точно определим, в чем состоит зада-

7.2.

ЗАДАЧА № 1 - ПООЧЕРЕДНОЕ ВКЛЮЧЕНИЕ СВЕТОДИОДОВ ние которое предстоит вы

полнить микрокомпьютеру.

~ Задача № 1 ~

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

В данном примере входными и выходными устройствами микрокомпьютера, выполняющего функцию контроллера, являются выключатель и светодиоды (Рис. 7.1).

Посмотрите на схемы подключения выключателя к порту ввода и светодиодов - к порту вывода. Как показано на Рис. 7.2, выключатель соединен с выводом 10 (0-м разрядом) порта ввода. Светодиоды подключены парами к восьми выводам порта вывода.

Для того чтобы надежно зафиксировать НИЗКИЙ уровень логического сигнала на входе 10 порта ввода, соединенного с выключателем, между соответствующим выводом микросхемы и общим выводом подключен резистор, обеспечивающий смещение потенциала на этом входе при разомкнутом выключателе до уровня логичес-

Выключатель с нормально разомкнутыми контактами

При нажатии

кнопки выключателя

контакты замыкаются, в

свободном состоянии - размыкаются

Светодиоды

Загорается при протекании тока

Рис. 7.1. Выключатель и светодиоды

Подключение внешних устройств к портам ввода-вывода

Когда на выходе сигнал равен «1», зажигается соответствующая пара светодиодов

+5В

Адрес порта -

ОАОН Выключатель

Шина .данных

К ЦПУ

Порт ввода

Адрес порта 0А1Н

(Шина данных,

От ЦПУ

При замыкании контактов /д логический сигнал на входе принимает значение «1», при размыкании - «0»

Порт вывода

+5В

-Kh

-Н-

Рис. 7.2. Подключение выключателя и светодиодов к портам ввода-вывода

Кого «0» (см. Рис. 4.7). Соответственно, если выключатель перевести в замкнутое состояние, напряжение на входе 10 поднимется до Уровня логической «1».


К каждому из 8 выходов (D0...D7) 8-разрядного порта вывода посредством логических элементов «НЕ» присоединена группа из двух светодиодов. При таком способе подключения пара светодиодов загорается, когда сигнал на соответствующем выводе (Dn) равен «1». Теперь, когда мы достаточно хорошо изучили схему, можно перейти к составлению программы.

Программирование «по частям»

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

©

©

Схема алгоритма

Содержимое порта ввода I

по адресу АО загружается в регистр А

Сохраняем в регистре А значение только 0-го разряда

Программа в мнемокодах

LOOPI: IN АДОАОН);©

AND 01Н •(J)

JP Z.LOOPl ;ф

- Задача, выполняемая данной программой -

Проверяем состояние выключателя, ожидаем момента замыкания контактов (фиксируем состояние «включено»)

Рис. 7.3. Программа определения состояния переключателя 144 ======================

Посредством команды ввода содержимое из порта, имеющего адрес АО, загружается в регистр А. Затем выполняется логическая операция «И», в результате которой все разряды регистра А, кроме 0-го, обнуляются. Если после выполнения этой операции содержимое регистра А не равно 0, это означает, что контакты выключателя замкнуты. Если содержимое регистра А равно 0, контакты выключателя разомкнуты. При размыкании контактов содержимое регистра А становится равным 0. Если контакты разомкнуты, переходим к команде ввода и повторяем описанную операцию определения состояния контактов. Эта последовательность операций повторяется до тех пор, пока контакты переключателя не замкнутся.

На Рис. 7.4 проиллюстрирован принцип организации последовательного включения светодиодов и приведена соответствующая программа.

Последовательный поразрядный ввод «1» в 8-разрядное число

Циклическая последовательность операций

У

Программа XOR А

00000001 0000001!

0000011

Умножаем на 2 и прибавляем 1

• «Обнуляем» регистр А

0111111К Умножаем на 2 ) и прибавляем 1 11111111 (последовательное включение всех светодиодов)

LOOP2 : ADD А, А

INC А

OUT (ОАШ), А

CP OFFH

Содержимое регистра А умножаем на 2 К содержимому регистра А прибавляем 1 Включаем диод

;1 Повторяем цикл I до тех пор, пока [ не включатся

JP NZ, LOOP2 ;

все светодиоды

После включения всех светодиодов они одновременно выключаются

XOR А; «Обнуляем»

регистр А

OUT (ОАШ) А ; Выключаем светодиоды

Рис. 7.4. Программа процедуры последовательного включения светодиодов 1"с


В соответствии со схемой включения пар светодиодов 1(f). 2 (2 )...8 (8 ), представленной на Рис. 7.1, задача сводится к последо вательной замене нулей 8-разрядного числа 00000000 единицами начиная с 0-го разряда, и пересылки полученных чисе.; (00000000... 11111111) в порт вывода.

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

Однако, если вспомнить, с какой скоростью ЦПУ выполняет ко манды, в программе, представленной на Рис. 7.4, можно обнару жить один «изъян». В ней не хватает модуля задержки, без которого все светодиоды после замыкания контактов выключателя загорятся практически одновременно. Эту проблему решает подпрограмм;: задержки, представленная на Рис. 7.5. Подпрограмма «заставляет ЦПУ «тянуть» время в перерывах между циклами выполнения операций управления светодиодами.

~ Проблема ~

Когда мы говорим, что светодиоды зажигаются «последовательно», учитываем ли мы при этом, с каким интервалом они должны зажигаться. Если управлять светодиодами по программе, представленной на Рис. 7.4, то мы не увидим последовательного процесса включения светодиодов. Они загораются слишком быстро для

того, чтобы человек мог заметит последовательность включения. Что нужно сделать, чтобы светодиоды включались с интервалом 0.1 или 1 сек?

Для этого в интервалах между операциями включения нужно «отвлечь» ЦПУ на выполнение других операций, чтобы «убить» время (подпрограмма задержки)

Слишком быстро тоже не всегда хорошо...

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

146

©

HL«-8000H

HL<- HL-1

I

Выясняем, равно ли нулю содержимое пары регистров HI

Смысл задачи, решаемой подпрограммой, заставляем ЦПУ затрачивать определенное время путем постепенного (на единицу за один цикл) уменьшения числа 800UH до и

НЕТ

DELAY:LD

LOOP3 :DEC HL

LD

HL, 8000H © ©

©

Выполняем операцию «ИЛИ» над I содержимым регистров HuL. Содержимое HL равно 0, еош результат равен 0

Возврат в главную программу

А,Н OR L JP NZ, LOOP3 ® RET©

Время выполнения подпрограммы можно регулировать, изменяя число (в нашем случае 8000Н), загруженное в пару регистров HL (блок 1)

Рис. 7.5. Подпрограмма задержки

пример, до 32768. Вообще время, требуемое для подсчета, определяется тем, какое число загружено в сдвоенный регистр H-L до начала подсчета.

Рассмотрим структуру подпрограммы задержки. Сначала подсчитаем время выполнения подпрограммы. Число тактовых импульсов, требуемых для выполнения одного цикла подпрограммы, равно сумме импульсов, необходимых для выполнения каждой из команд цикла (от метки LOOP3 до команды безусловного перехода JP). Это число равно: 6 + 4 + 4+ 10 = 24. Если в сдвоенный регистр H-L загружено число 8000Н, то указанный цикл будет повторяться 8000Н раз (в десятичной системе счисления - 32768 раз). Так как длительность периода тактовой частоты (2.5 МГц) равна 0.4 мкс, время выполнения подпрограммы примерно равно 0.3 с. Точный расчет производится следующим образом:

Время выполнения подпрограммы = число импульсов х число повторений х период = 24 х 32768 х 0.4 х 10~б с = 0.3 с

=147



0 ... 18 19 20 21 22 23 24 ... 39