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