
- •Программирование цифровой техники и микроконтроллеров управления
- •Алматы 2012
- •1 Микроконтроллеры в современном мире
- •1.1 Краткая история развития микроконтроллеров
- •1.2 Задачи и роль микроконтроллеров
- •2 Выполнение арифметических операций в мп
- •2.1 Системы счислений
- •2.2 Двоичная арифметика
- •2.3 Дополнительный код
- •2.4 Знаковый разряд
- •3 Регистры общего и специального назначения
- •3.1 Регистры portc и trisc
- •3.2 Регистр Status
- •3.3 Фиксированная (абсолютная) адресация
- •4 Косвенная адресация. Логика
- •4.1 Косвенная адресация
- •4.2 Логические функции
- •5 Маскирование. Стек
- •5.1 Маскирование
- •5.2 Счетчик команд
- •5.3 Стек
- •6 Конвейер и подпрограмма задержки
- •6.1 Конвейер
- •6.2 Программа задержки
- •6.3 Расчет времени задержки
- •7 Выполнение умножения и деления
- •7.1 Умножение и деление при помощи сдвига
- •7.2 Инструкции условных переходов
- •7.3 Целочисленное умножение
- •7.4 Целочисленное деление
- •7.5 Умножение на дробное число
- •8 Программирование клавиатуры. Дешифратор
- •8.1 Клавиатура
- •8.2 Фрагменты программы
- •8.3 Дешифратор
- •8.4 Компаратор
- •9 Основные элементы цифровой техники
- •9.1 Сумматор
- •9.2 Арифметико-логическое устройство
- •9.3 Бистабильные схемы
- •9.4 Триггеры и регистры
- •10 Структура микроконтроллера. Индикатор
- •10.1 Применение операций сдвига
- •10.2 Цифровой индикатор
- •10.2 Структурная схема мк
- •11 Прерывания и сторожевой таймер
- •11.1 Прерывания
- •11.2 Подсчет посетителей с помощью прерываний
- •11.3 Сторожевой таймер
- •12 Фактор времени и аналоговый мир
- •12.1 Модуль таймера tmr1
- •12.2 Применение таймера tmr1
- •12.3 Аналоговый мир
- •Приложение а Список некоторых сокращений
- •Список литературы
- •Содержание
- •050013, Алматы, Байтурсынова, 126
11.2 Подсчет посетителей с помощью прерываний
Рассмотрим задачу подсчета числа посетителей в небольшом магазине. Одним из возможных решений является использование пары маломощный лазер — фотоэлемент, расположенных по бокам от входной двери. При пересечении луча покупателем на управляющий микроконтроллер поступит сигнал в виде прямоугольного импульса, как показано на рисунке 11.1. В этот момент микроконтроллер может быть занят выполнением своей основной задачи, например, организацией обмена данными между торговым терминалом и основным компьютером склада.
Рисунок 11.1- Контроль числа посетителей магазина
Предположим, что при каждом проходе покупателя в магазин инкрементируется регистр, который мы назовем EVENT. Разумеется, покупатели будут еще и выходить из магазина, однако, если проход достаточно узкий, мы можем просто разделить общее количество проходов на два, чтобы получить реальное число посетителей. Таким образом, максимальное число посетителей, регистрируемое системой, составит 128. В подпрограмме обработчика прерываний применяется команда SWAPF, поскольку она не меняет состояние регистра STATUS.
Фрагменты программы подсчета числа посетителей.
include <p16F877.inc>
_STATUS EQU h'51'; регистр, для сохранения состояния Status.
EVENT EQU h'52'; счетчик событий при прерываниях.
_WORK EQU h'53'; регистр, для сохранения состояния аккумулятора W.
org h’000’; адрес вектора сброса.
GOTO MAIN; записываем по адресу h’000’.
org h’004’; адрес вектора прерывания.
GOTO PERS_COUNT; записываем по адресу h’004.
MAIN; метка фоновой (основной) программы.
BSF INTCON, INTE; разрешаем внешние прерывания.
BSF INTCON, GIE; разрешаем работу прерываний.
CLRF EVENT; очищаем счетчик событий (посетителей).
. . . .
GOTO$; конец главной программы.
PERS_COUNT; подпрограмма - обработчик прерываний.
BCF INTCON, INTE; запрещаем внешние прерывания.
MOVWF _WORK; сохраняем значение W в регистре _WORK.
SWAPF STATUS, W
MOVWF _STATUS; сохраняем значение регистра Status.
BCF INTCON, INTF; сбрасываем флаг внешнего прерывания.
INCF EVENT, F; регистрация очередного посетителя.
SWAPF _STATUS, W; возвращаем значение регистра Status.
MOVWF STATUS
SWAPF _WORK, F
SWAPF _WORK, W; возвращаем значение аккумулятора W.
BSF INTCON, INTE; разрешаем внешние прерывания.
RETFIE; возврат в фоновую программу из обработчика.
END
Процедуры обработки и других прерываний аналогичны обычным подпрограммам, однако необходимо помнить следующее:
- обработчик прерывания должен завершаться командой Retfie.
- аккумулятор (W), а также все РСН, изменяемые в обработчике прерывания, должны быть сохранены при входе в обработчик. И при выходе из него восстановлены, если они используются в фоновой программе.
- параметры не могут передаваться обработчику прерываний или из обработчика прерывания через рабочий регистр (W). Вместо этого, при необходимости, следует использовать глобальные переменные (данные, расположенные в памяти по известному адресу).
- обработчики прерывания должны быть как можно быстрее, т.е. быть короткими и должны выполнять минимальный набор операций.