
- •Содержание
- •Список сокращений
- •Введение
- •Структура микроконтроллера
- •Процессор микроконтроллера
- •Адресное пространство микроконтроллера
- •Подключение erom и eram к микроконтроллеру
- •Периферийные устройства микроконтроллера
- •Параллельные порты ввода-вывода
- •Таймер-счетчик т/с0
- •Таймер-счетчик т/с1
- •Последовательный порт
- •Контроллер прерываний
- •Система команд микроконтроллера
- •Общие сведения о языке Ассемблер для микроконтроллеров стандарта mcs-51 и о программном пакете фирмы 2500 a.D.
- •Синтаксис языка Ассемблер
- •Определители основания системы счисления
- •Макроопределения
- •Сообщения о некоторых ошибках ассемблирования
- •Рекомендуемая процедура инициализации микроконтроллера
- •Типичные применения микроконтроллеров
- •Ввод информации с датчиков
- •Опрос двоичного датчика
- •Ожидание события
- •Ожидание импульсного сигнала
- •Устранение дребезга контактов
- •Подсчет числа импульсов
- •Подсчет числа импульсов за интервал времени между двумя событиями
- •Подсчет числа импульсов за заданный промежуток времени
- •Опрос группы двоичных датчиков
- •Ввод информации с матричной клавиатуры
- •Вывод управляющих сигналов из микроконтроллера
- •Формирование статических сигналов
- •Формирование импульсных сигналов
- •Генерация меандра
- •Формирование сигнала с заданной скважностью
- •Вывод и отображение информации
- •Динамический вывод информации на дисплей из семисегментных индикаторов
- •Реализация функций реального времени
- •Программное формирование временной задержки
- •Формирование временной задержки с использованием таймеров
- •Измерение временных интервалов
- •Преобразование кодов
- •Преобразование унитарного кода в двоичный позиционный
- •Преобразование двоичного позиционного кода в унитарный
- •Преобразование кодов из одной системы счисления в другую
- •Преобразование данных из параллельного кода в последовательный и обратно
- •Цифро-аналоговое преобразование
- •Аналого-цифровое преобразование
- •Метод последовательного приближения
- •Метод двойного интегрирования
- •Операции с памятью
- •Тестирование озу
- •Программа тестирования пзу
- •Обмен данными по шине i2с
- •Общие положения и введение в логику работы шины i2с
- •Пример обмена данными по шине i2c
- •Приём данных по протоколу Centronics
- •Литература
Подсчет числа импульсов
Подсчет числа импульсов за интервал времени между двумя событиями
Типовую процедуру подсчёта числа импульсов между двумя событиями удобно проиллюстрировать на конкретном примере.
Предположим, что необходимо подсчитать число деталей, сошедших с конвейера от момента его включения до момента выключения. Факт схода детали с конвейера фиксируется фотоэлементом, на выходе которого формируется импульсный сигнал положительной полярности, а факт работы конвейера подтверждается логической единицей на входе INT1 микроконтроллера (рисунок 4.7). Считается, что сигналы на входах INT1 и T1 без дребезга контактов.
Рисунок 4.7 – Схема контроля качества деталей
По окончании выполнения процедуры (листинг 4.8) в аккумуляторе фиксируется число деталей, представленное в двоично-десятич-ном коде.
Листинг 4.8 – Программа, реализующая подсчет числа импульсов за интервал времени между двумя событиями
; Для простоты реализации программы считается, что общее
; количество деталей не превышает 99.
|
.ORG 0000H |
; Адрес начала программы |
|
SETB INT1 SETB T1 |
; Инициализация входов ; INT1 и T1 на ввод сигнала |
|
MOV A, #00h JNB INT1, $ |
; Обнуление счётчика ; Ожидание включения ; конвейера |
WAIT1:
WAIT0: |
JNB INT1, EXIT
JNB T1, WAIT1
JNB INT1, EXIT
JB T1, WAIT0 |
; Проверка работы ; конвейера. Если конвейер ; отключен, то выход из ; процедуры ; Проверка наличия ; логической «1» на выходе ; фотодатчика ; Проверка работы ; конвейера ; Проверка наличия ; логического «0» на ; выходе фотодатчика |
|
INC A DA A |
; Увеличение счётчика ; Десятичная коррекция |
EXIT: |
SJMP WAIT1 … |
; Продолжение счета ; Завершение ; процедуры |
Процедура подсчета импульсов может быть реализована иначе, если вход T1 рассматривать как вход таймера-счётчика, а вход INT1 как вход контроллера прерываний (листинг 4.9).
Листинг 4.9 – Программа, реализующая подсчет числа импульсов за интервал времени между двумя событиями с использованием аппаратных средств микроконтроллера
|
.ORG 0000h JMP BEGIN
.ORG 0013h
JMP STOP |
; Адрес начала программы ; Переход к основной части ; программы ; Адрес обработчика ; прерываний по входу INT1 ; Переход на процедуру ; обработки прерывания |
BEGIN: |
SETB INT1 SETB T1 CLR 20h.0
MOV IE, #00h MOV TCON, #04h
MOV TMOD, #E0h
MOV TL1, #00h SETB TR1 MOV IE, #84h JNB 20h.0, $ … |
; Инициализация входов INT1 ; и T1 на ввод сигнала ; Очистка флага состояния ; конвейера (флаг переходит ; в состояние логической ; единицы при остановке ; конвейера) ; Запрет всех прерываний ; Настройка режима ; прерывания (по спаду ; сигнала на входе INT1)
; Настройка таймера T/C1 ; на счёт внешних событий ; при единичном состоянии ; входа INT1 ; Обнуление счетчика ; Разрешение счета ; Разрешение прерываний по ; входу INT1 ; Ожидание запуска и ; последующей остановки ; конвейера |
STOP: |
CLR TR1 MOV IE, #00h SETB 20h.0
RETI |
; Остановка счетчика ; Запрещение прерываний ; Установка флага ; состояния конвейера ; Выход из прерывания |
После остановки конвейера в регистре TL1 в двоичном виде будет храниться количество деталей.
Преимущество счёта данным способом заключается в том, что при автономной работе периферийных устройств (таймер-счётчика и контроллера прерываний), процессор может выполнять другую «полезную» работу, лишь изредка проверяя флаг состояния конвейера.