Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие по АТ89С51 изд.вариант 2010-54.doc
Скачиваний:
86
Добавлен:
19.11.2019
Размер:
865.22 Кб
Скачать
      1. Опрос группы двоичных датчиков

Микроконтроллеры чаще всего имеют дело не с одним датчиком, как в рассмотренных выше примерах, а с группой двоичных датчиков (например, рисунок 4.9).

Рисунок 4.9 – Схема подключения группы двоичных датчиков

При этом МК может выполнять процедуру опроса датчиков и передачи управления отдельным подпрограммам в зависимости от кода, формируемого группой датчиков.

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

  • ожидание заданного кода (листинг 4.13);

  • анализ кода с передачей управления одной из подпрограмм в зависимости от полученного значения (листинг 4.14).

Листинг 4.13 – Программа ожидания заданного кода

; Программа реализована для случая подключения группы из

; восьми взаимосвязанных статических датчиков к входам порта P1.

CODE:

.EQU 10101010h

; Ожидаемый код

STOP:

.ORG 0000h

MOV P1, #FFh

MOV A, P1

CJNE A, #CODE, STOP

; Адрес начала программы

; Настройка порта P1 на ввод

; Считывание в аккумулятор

; данных из порта P1

; Переход к следующему опросу,

; если считанное значение не

; совпадает с заданным кодом

Листинг 4.14 – Программа анализа кода с передачей управления одной из подпрограмм в зависимости от полученного значения

; Программа реализована для случая подключения трех датчиков

; к разрядам 0–2 порта P1. В зависимости от принятого кода

; управление передается одной из подпрограмм PROG0–PROG7.

TABEL:

PROG1:

PROG8:

.ORG 0000h

MOV SP, #30h

MOV DPTR, #TABEL

MOV P1, #FFh

MOV A, P1

ANL A, #00000111b

RL A

PUSH A

MOVC A, @A+DPTR

MOV 0, A

POP A

INC A

MOVC A, @A+DPTR

MOV DPH, 0

MOV DPL, A

MOV A, #00h

JMP @A+DPTR

.DW PROG1, PROG2

.DW PROG3, PROG4

.DW PROG5, PROG6

.DW PROG7, PROG8

; Адрес начала программы

; Переопределение дна стека

; В регистр DPTR заносится

; адрес таблицы с адресами

; подпрограмм *

; Настройка порта P1 на ввод

; Чтение в аккумулятор данных ; из порта P1

; Принудительное обнуление

; незначащих разрядов

; Умножение значения на 2 **

; Сохранение в стеке

; содержимого аккумулятора

; Чтение из таблицы старшего

; байта адреса подпрограммы

; Сохранение в ячейке 0

; считанного значения

; Восстановление из стека

; содержимого аккумулятора

; Инкремент аккумулятора

; Чтение из таблицы младшего

; байта адреса подпрограммы

; Помещение в регистровую

; пару DPH:DPL=DPTR

; младшего и старшего байтов

; адреса подпрограммы

; Формирования смещения

; подпрограммы

; Переход к подпрограмме

; Таблица адресов подпрограмм

; Подпрограммы

; PROG1–PROG8

; * – таблица адресов подпрограмм располагается по адресу,

; которому соответствует метка TABEL. Таблица состоит из

; двухбайтовых адресов подпрограмм. Содержимое таблицы

; представлено следующим образом:

;

A

A+1

A+2

A+2

A+4

А+5

A+6

;

СБA1

МБА1

СБA2

МБА2

СБA

МБА3

СБA4

; где A – адрес таблицы адресов подпрограмм

; СБА1 – старший байт адреса подпрограммы 1

; МБА1 – младший байт адреса подпрограммы 1

; СБА2 – старший байт адреса подпрограммы 2

; МБА2 – младший байт адреса подпрограммы 2

; и т.д.

; ** – команда поразрядного сдвига влево равносильна умножению на 2