![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Микроконтроллеры чаще всего имеют дело не с одним датчиком, как в рассмотренных выше примерах, а с группой двоичных датчиков (например, рисунок 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
Дата публикования: 2014-11-03; Прочитано: 445 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!