
- •1 Инструкция по технике безопастности
- •2 Методические указания по оформлению отчета к лабораторной работе
- •3 Лабораторная работа №4
- •3.1 Краткие теоретические сведения
- •3.1.1 Опрос двоичного датчика
- •3. 1. 2 Ожидание события
- •3.1.3 Ожидание импульсного сигнала.
- •3.1.4 Выделение и обработка отдельных бит информации
- •3.1.5 Формирование управляющего сигнала
- •3.1.6 Вывод управляющего слова на группу автономных устройств.
- •3. 1. 7 Формирование временной задержки малой длительности
- •3.1.8 Формирование последовательности импульсных сигналов с изменяемой длительностью и скважностью.
- •3.2 Задание на дом.
- •3.3 Контрольные вопросы
- •4 Краткие теоретические сведения
- •4.1 Цифровые индикаторы
- •4.2 Клавиатура
- •4.3 Мультиплексный режим работы цифрового индикатора
- •4.4 Сканирование клавиатуры и программное определение номера нажатой клавиши
- •4.5 Подпрограмма определения кода засветки Второй цифры в номере клавиши
- •4.6 Подпрограмма определения кода засветки первой цифры в номере клавиши
- •Программа, написанная в соответствии с алгоритмом, изображенным на рис.17, имеет вид (табл. 25):
- •4.7 Подпрограмма засветки индикаторов в мультиплексном режиме
- •4.8 Задание для домашней подготовки
- •Порядок выполнения работы
- •6 Контрольные вопросы
- •Литература
- •Содержание
- •2 Методические указания по оформлению отчета к лабораторной работе 1
- •3 Лабораторная работа №4 2
- •4 Лабораторная работа №5 24
3.1.4 Выделение и обработка отдельных бит информации
Байт информации, поступающий в аккумулятор МП из портов ввода, часто является совокупностью независимых бит, поэтому в задачах управления возникает необходимость выделения из байта определенного бита. Это может быть выполнено двумя способами: наложением маски или логическим сдвигом.
Наложение маски осуществляется логическими операциями с непосредственным операндом. Как правило, эта операция логического AND (команда ANI). В результате маскирования выбранного бита изменяется значение признака (Z=1, если результат равен 0). Передача управления осуществляется командами условного перехода: JZ (переход, если равно 0) и JNZ (переход, если не равно 0).
Например, фрагмент программы выделения бита D3 для схемы, представленной на (рис.6) имеет вид (табл.7):
Таблица 7
Адрес |
Код |
Метка |
Мнемокод |
Комментарий |
|
|
|
IN PORT 1; |
ввод из порта 1 |
|
|
|
ANI 08H; |
наложение маски 00001000 |
|
|
|
JNZ MARK |
если D3=1, то переход к программе с меткой MARK. |
Рисунок 6 - Схема подключения группы дискретных датчиков.
Наложением маски удобно выделять группу бит. Например, маска
для определения замыкания хотя бы одного из переключателей D0-D3 записывается как число 00001111.
Для выделения старшего или младшего бита, а также последовательности бит используются операции логического сдвига (RAR, RAL, RRC, RLC). В результате выполнения этих операций модифицируется признак переноса С. Передача управления осуществляется командами: JC (переход, если С=1), или JNC (переход, если С=0).
Например, фрагмент программы выделения младшего бита D0 имеет вид (табл.8):
Таблица 8
Адрес |
Код |
Метка |
Мнемокод |
Комментарий |
|
|
|
IN PORT 1; |
ввод из порта 1 |
|
|
|
RAR; |
сдвиг вправо |
|
|
|
JC MARK |
если D0=1, то переход к подпрограмме с меткой MARK. |
Пример:
Первоначально в регистр L помещаем число 10000000 B и высвечиваем его на индикаторе. После небольшой задержки оператором RAR производим сдвиг содержимого регистра L вправо (01000000 B, 00100000 B, 00010000 B и т.д.) до тех пор пока 1 не сдвинется в самый младший бит (число 00000001 ). При следующем сдвиге в регистре признаков появится признак переноса (С=1) и программа завершит свою работу. При выполнении этой программы (табл.9) будут последовательно высвечены все сегменты индикатора от "h" - код 10000000, до "a " - код 00000001.
Таблица 9
Адрес |
Код |
Метка |
Мнемокод |
Комментарий |
1 |
2 |
3 |
4 |
5 |
0800 |
2E 80 |
|
MVI L, 80H |
код засветки поместить в регистр L (10000000 В - 80 Н) |
0802 |
CD 90 08 |
LOOP |
CALL LIGHT |
высветить его на индикаторе |
0805 |
0E 30 |
|
MVI C, 30H |
поместить в регистр С количество циклов задержки |
0807 |
CD A0 08 |
|
CALL PAUSE |
вызов подпрограммы задержки |
|
|
|
|
Продолжение таблицы 9 |
1 |
2 |
3 |
4 |
5 |
080A |
7D |
|
MOV A, L |
код засветки поместим в аккумулятор |
080B |
1F |
|
RAR |
перейти к следующему сегменту |
080C |
DA 13 08 |
|
JC END |
если высвечен последний сегмент, то завершить программу |
080F |
6F |
|
MOV L, A |
иначе сохранить код следующего сегмента и |
0810 |
C3 02 08 |
|
JMP LOOP |
высветить его на индикаторе |
0813 |
FF |
END |
RST |
возврат в "монитор" |