- •Содержание
- •Список сокращений
- •Введение
- •Структура микроконтроллера
- •Процессор микроконтроллера
- •Адресное пространство микроконтроллера
- •Подключение erom и eram к микроконтроллеру
- •Периферийные устройства микроконтроллера
- •Параллельные порты ввода-вывода
- •Таймер-счетчик т/с0
- •Таймер-счетчик т/с1
- •Последовательный порт
- •Контроллер прерываний
- •Система команд микроконтроллера
- •Общие сведения о языке Ассемблер для микроконтроллеров стандарта mcs-51 и о программном пакете фирмы 2500 a.D.
- •Синтаксис языка Ассемблер
- •Определители основания системы счисления
- •Макроопределения
- •Сообщения о некоторых ошибках ассемблирования
- •Рекомендуемая процедура инициализации микроконтроллера
- •Типичные применения микроконтроллеров
- •Ввод информации с датчиков
- •Опрос двоичного датчика
- •Ожидание события
- •Ожидание импульсного сигнала
- •Устранение дребезга контактов
- •Подсчет числа импульсов
- •Подсчет числа импульсов за интервал времени между двумя событиями
- •Подсчет числа импульсов за заданный промежуток времени
- •Опрос группы двоичных датчиков
- •Ввод информации с матричной клавиатуры
- •Вывод управляющих сигналов из микроконтроллера
- •Формирование статических сигналов
- •Формирование импульсных сигналов
- •Генерация меандра
- •Формирование сигнала с заданной скважностью
- •Вывод и отображение информации
- •Динамический вывод информации на дисплей из семисегментных индикаторов
- •Реализация функций реального времени
- •Программное формирование временной задержки
- •Формирование временной задержки с использованием таймеров
- •Измерение временных интервалов
- •Преобразование кодов
- •Преобразование унитарного кода в двоичный позиционный
- •Преобразование двоичного позиционного кода в унитарный
- •Преобразование кодов из одной системы счисления в другую
- •Преобразование данных из параллельного кода в последовательный и обратно
- •Цифро-аналоговое преобразование
- •Аналого-цифровое преобразование
- •Метод последовательного приближения
- •Метод двойного интегрирования
- •Операции с памятью
- •Тестирование озу
- •Программа тестирования пзу
- •Обмен данными по шине i2с
- •Общие положения и введение в логику работы шины i2с
- •Пример обмена данными по шине i2c
- •Приём данных по протоколу Centronics
- •Литература
Опрос группы двоичных датчиков
Микроконтроллеры чаще всего имеют дело не с одним датчиком, как в рассмотренных выше примерах, а с группой двоичных датчиков (например, рисунок 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