Собственные обработчики прерываний

 

1. ЦЕЛЬ

Выучить систему прерываний микроконтроллера PIC16F84, способы формирования прерываний, использования обработчиков нескольких прерываний.

 

2. ЗАДАНИЕ ПО ЛАБОРАТОРНОЙ РАБОТЕ

2.1. Написать обработчики прерываний в соответствии с вариантом задания и номера студента по списку журнала группы.

 

3. ВАРИАНТЫ ЗАДАНИЙ

3.1. Определите источник прерывания в соответствии с вариантом задания и номера студента по списку журнала группы за таблицей.

Источник прерывания Номер в журнале группы
 
Переполнение таймера * * * *                         * * *    
Передний фронт сигнала на выводе RB0/INT         * * * *                 *     *  
Задний фронт сигнала на выводе RB0/INT                 * * * *           *     *
Окончание записи в EEPROM                         * * * *     * * *
Изменение уровня сигнала на выводе RB4 *       *       *       *                
Изменение уровня сигнала на выводе RB5   *       *       *       *              
Изменение уровня сигнала на выводе RB6     *       *       *       *            
Изменение уровня сигнала на выводе RB7       *       *       *       *          

 

3.2. Обработчик прерывания по переполнению таймера должен выполнять.

Вариант 1. Запись в таймер нового значения, инвертирования уровня сигнала на выводе RA0.

Вариант 2. Запись в таймер нового значения, инкремент ячейки памяти данных.

Вариант 3. Запись в таймер нового значения из енергонезависимой памяти данных.

Вариант 4. Запись в таймер нового значения, запись этого значения в енергонезависимой память данных.

3.3. Обработчик прерывания по переднему фронту сигнала на выводе RB0/INT должен выполнять.

Вариант 1. Инкремент 16-разрядного счетчика в памяти данных.

Вариант 2. Инвертирование уровня сигнала на выводе RA1.

Вариант 3. Запись текущего значения таймера в ячейку памяти данных.

Вариант 4. Прием дискретного сигнала из входа RA2 и выдачу его на вывод RA3.

3.4. Обработчик прерывания по заднему фронту сигнала на выводе RB0/INT должен выполнять.

Вариант 1. Чтение 4-разрядного числа из порта А, запись его в ячейку памяти данных.

Вариант 2. Запись текущего значения таймера в ячейку енергонезависимой памяти данных.

Вариант 3. Декремент 16-разрядного счетчика в памяти данных.

Вариант 4. Инвертирование уровня сигнала на выводе RA2.

3.5. Обработчик прерывания по окончании записи в енергонезалежну память данных (EEPROM) должен выполнять.

Вариант 1. Запись текущего значения таймера в ячейку памяти данных.

Вариант 2. Установку флажка разрешения записи в EEPROM.

Вариант 3. Инкремент ячейки памяти данных.

Вариант 4. Декремент ячейки памяти данных.

3.6. Обработчик прерывания за изменением уровня сигнала на выводе RB4 должен выполнять.

Вариант 1. Формирование позитивного импульса длительностью ti = N × 10 × tц на выводе RA0.

Вариант 2. Формирование позитивного импульса длительностью ti = [(N mod 10) + 2] × tц на выводе RA1.

Вариант 3. Формирование негативного импульса длительностью ti = N × 10 × tц на выводе RA2.

Вариант 4. Формирование негативного импульса длительностью ti = [(N mod 10) + 2] × tц на выводе RA1.

Где N - номер студента по списку журнала группы, tц - длительность командного цикла.

3.7. Обработчик прерывания за изменением уровня сигнала на выводе RB5 должен выполнять.

Вариант 1. Формирование на выводе RA3 импульсной последовательности из трех импульсов негативной полярности, длительностью и паузой, ровной ti = 5×· tц с обязательным использованием вызова подпрограммы для формирования часового интервала.

Вариант 2. Формирование на выводе RA2 импульсной последовательности из двух импульсов позитивной полярности, длительностью и паузой, ровной ti = 5 × tц.

Вариант 3. Формирование на выводе RA1 импульсной последовательности из двух импульсов негативной полярности, длительностью импульсов ti = 3 × tц и паузой, ровной tп = 7 × tц.

Вариант 4. Формирование на выводе RA0 импульсной последовательности из двух импульсов позитивной полярности, длительностью импульсов ti = 7 × tц, и паузой, ровной tп = 3 × tц.

3.8. Обработчик прерывания за изменением уровня сигнала на выводе RB6 должен выполнять.

Вариант 1. Одновременное инвертирование сигналов на выводах RA0 и RA1.

Вариант 2. Обмен уровней сигналов на выводах RA1 и RA2.

Вариант 3. Прием дискретного сигнала из вывода RA3 и выдачу его на вывод RA0.

Вариант 4. Обмен уровней сигналов на выводах RA3 и RA2.

3.9. Обработчик прерывания за изменением уровня сигнала на выводе RB7 должен выполнять.

Вариант 1. Формирование на выводе RA0 импульсной последовательности из трех импульсов негативной полярности, длительностью и паузой, ровной ti = 3 × tц.

Вариант 2. Формирование на выводе RA1 импульсной последовательности из двух импульсов позитивной полярности, длительностью и паузой, ровной ti = 7 × tц с обязательным использованием вызова подпрограммы для формирования часового интервала.

Вариант 3. Формирование на выводе RA2 импульсной последовательности из трех импульсов позитивной полярности, длительностью импульсов ti = 7 × tц и паузой, ровной tп = 3 × tц.

Вариант 4. Формирование на выводе RA3 импульсной последовательности из четырех импульсов негативной полярности, длительностью импульсов ti = 3 × tц и паузой, ровной tп = 5 × tц.

 

Пример программы.Сохранение регистров при вызове прерывания и вызов обработчика прерывания за изменением уровня сигнала на выводе RB7.

 

STATUS EQU 0x03 ; адрес регистру STATUS

PORTB EQU 0x06 ; адрес регистру PORTB

RBIF EQU 0x07 ; номер разряда флажкового бита

INTCON EQU 0x0B ; адрес регистру INTCON

W_TEMP EQU 0x0C ; адрес регистру сохранения W

STATUS_TEMP EQU 0X0D ; адрес регистру сохранения STATUS

oldportb EQU 0x0E ; адрес регистру сохранения состояния

; порта B

 

int_point org 0x04 ; вектор прерываний

movwf W_TEMP ; сохранение W

swapf STATUS,w ; сохранение STATUS

movwf STATUS_TEMP

btfsc INTCON,RBIF ; прерывание при изменении RB4-RB7?

call INTRB7 ; вызов обработчика прерывания

; при изменении сигнала на выводах

; RB4-RB7

swapf STATUS_TEMP,W ; возобновление регистру STATUS

movwf STATUS

swapf W_TEMP, F ; возобновление регистру W

swapf W_TEMP, W

retfie ; возвращение из прерывания

 

INTRB7 ; обработчик прерывания

; при изменении сигнала на выводах

; RB4-RB7

movf PORTB, W ; чтение состояния порта B

xorwf oldportb, F ; сравнение с предыдущим значением

btfss oldportb, 7 ; изменение RB7?

goto NOTRB7 ; нет изменений

… ; необходимые действия при изменении RB7

NOTRB7

movf PORTB, W ; чтение состояния порта B

movwf oldportb ; сохранение для следующего

; сравнение

bcf INTCON,RBIF ; очистка флажка прерывания

return

… ; продолжение программы

Замечание.Имена регистров специального назначения доступны при подключении заглавного файла P16F84.INC или должны быть описанные в описательной секции программы.

 

 

4. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

4.1. Позволить необходимые прерывания, замаскировать другие.

4.2. Сформировать условия для формирования соответствующих прерываний.

4.3. Определить максимальное время обработки прерывания в тактах и в единицах времени, при тактировании микроконтроллера от тактового генератора с частотой Fosc = 8 МГц.

 

 

5. Содержание отчета

5.1. Тема.

5.2. Цель.

5.3. Индивидуальное задание.

5.4. Структурная схема системы прерываний.

5.5. Объяснение к схеме.

5.6. Листинг программы (файл .lst) с подробным комментированием выполнения программы.

5.7. Короткое описание программы.

5.8. Результаты выполнения программы.

5.9. Выводы.