Реферат Курсовая Конспект
Власні оброблювачі переривань - раздел Образование, Робота з портами вводу/виводу 1. Мета Вивчити Систему Переривань Мікроконтролера P...
|
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-розрядного числа з порту A, запис його в комірку пам'яті даних.
Варіант 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. Висновки.
Лабораторна робота 6
Формування сигналів керування й індикації
1. МЕТА
Набути навички складання функціональної схеми. Вивчити способи формування сигналів керування й індикації, навчитися формувати звукові та світлові сигнали на прикладі мікроконтролера PIC16F84A, розглянути використання динамічної індикації.
2. Елементи функціональної схеми
3. ЗАВДАННЯ ПО ЛАБОРАТОРНІЙ РОБОТІ
3.1. На заданому виводі мікроконтролера сформувати сигнал із заданою частотою і скважністю Q = 2 при натиснутій кнопці.
3.1.1. Розробити функціональну схему мікроконтролерного пристрою з виводом сигналу на звуковий випромінювач.
3.1.2. Розробити і налагодити керуючу програму.
3.2. На заданому виводі мікроконтролера сформувати сигнал із заданою частотою і скважністю Q = 2 при віджатій кнопці.
3.2.1. Розробити функціональну схему мікроконтролерного пристрою з виводом сигналу на дискретний світлодіодний індикатор.
3.2.2. Розробити і налагодити керуючу програму.
3.3. На дев'ятирозрядному семисегментному світлодіодному індикаторі за допомогою динамічної індикації із заданою частотою відновлення всіх розрядів індикатора, відобразити групу й ініціали прізвища.
3.3.1. Розробити функціональну схему мікроконтролерного пристрою.
3.3.2. Розробити і налагодити керуючу програму.
Для завдань 3.1 і 3.2 дозволяється розробити спільну функціональну схему та керуючу програму. Виводи мікроконтролера для підключення кнопок вибрати самостійно.
Тактування мікроконтролера виконати від тактового генератора із частотою Fosc = 4 МГц.
4. ВАРІАНТИ ЗАВДАНЬ
4.1. Варіанти завдання 3.1.
Вивід | RA0 | RA1 | RA2 | RA3 | RB0 | RB1 | RB2 | RB3 | RB4 | RB5 | RB6 | RB7 | RA0 | RA1 | RA2 |
Частота, Гц |
4.2. Варіанти завдання 3.2.
Вивід | RB0 | RB1 | RB2 | RB3 | RB4 | RB5 | RB6 | RB7 | RA0 | RA1 | RA2 | RA3 | RB0 | RB1 | RB2 |
Частота, Гц | 0,2 | 0,4 | 0,6 | 0,8 | 1,5 | 2,5 | 0,3 | 0,5 | 0,7 | 0,9 | 1,2 | 1,7 |
4.3. Варіанти завдання 3.3.
Частота, Гц |
Приклад.Формування символів на семисегментному індикаторі
Відповідність сегментів індикатора розрядам двійкового числа:
H | G | F | E | D | C | B | A | |
Для відображення символу “5” на індикатор необхідно видати наступний двійковий код:
Приклад програми. Керуюча програма прострою, який відображає чотири символи на індикаторі за допомогою динамічної індикації, підрахунок кількості натискань і відпускань кнопки, змінюючи при цьому частоту відновлення індикатора та частоту звукового сигналу.
; підключення файлу з описом стандартних констант і значень
#include p16f84a.inc
; формування конфігураційного слова
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
; опис комірок пам'яті даних
cblock 0x0C ; починаючи з адреси 0x0C
W_TEMP ; збереження W при виклику переривання
STATUS_TEMP ; збереження STATUS при перериванні
dig0 ; буфера на 4 розряди
dig1
dig2
dig3
segment ; номер відображуваного розряду
endc
; опис констант
init_porta equ b'00000100' ; RA2 на вводі,інші – на вивід
init_portb equ b'00000000' ; усі розряди на вивід
init_option equ b'00000011' ; TMR0 рахує CLKOUT/16
init_intcon equ b'10100000' ; переривання від TMR0
; початок програми
org 0 ; вектор скидання
bcf INTCON, GIE ; заборона всіх переривань
goto main ; перехід на початок основної програми
; оброблювач переривання
int_start
org 0x04 ; вектор переривання
movwf W_TEMP ; збереження W і STATUS
swapf STATUS, W
movwf STATUS_TEMP
btfsc INTCON,T0IF ; переривання від таймера?
goto tmr_int ; перехід на оброблювач переривання
; при переповненні таймера
movlw b'00100000' ; дозвіл переривань тільки від таймера
movwf INTCON
goto int_end ; перехід на закінчення оброблювача
; оброблювач переривання від таймера
tmr_int
bcf INTCON, T0IF ; очищення прапорця переповнення TMR0
call UpdateDig ; відновлення стану індикатора
swapf dig0, W ; ініціалізація значення таймера
andlw 0xF0
movwf TMR0
movlw b'00001000' ; формування звукового сигналу
xorwf PORTA, F
int_end ; закінчення оброблювача переривання
swapf STATUS_TEMP, W ; відновлення значень
movwf STATUS ; регістрів W і STATUS
swapf W_TEMP, F
swapf W_TEMP, W
retfie ; повернення з переривання
; підпрограма відновлення стану індикатора
UрdаtеDіg
incf PORTA, W ; вибір чергового розряду
andlw 0x03
movwf segment
movf PORTA, W
andlw 0xFC
iorwf segment, W
movwf PORTA
movlw dig0 ; підготовка вмісту поточного розряду
addwf segment, W
movwf FSR
movf INDF, W
call bcd_table ; перетворення в 7-сегментний код
movwf PORTB ; вивід поточного розряду
return
; підпрограма перетворення двійкового значення в 7-сегментний код
bcd_table
andlw 0x0F
addwf PCL, F
retlw b'00111111' ; 0
retlw b'00000110' ; 1
retlw b'01011011' ; 2
retlw b'01001111' ; 3
retlw b'01100110' ; 4
retlw b'01101101' ; 5
retlw b'01111101' ; 6
retlw b'00000111' ; 7
retlw b'01111111' ; 8
retlw b'01101111' ; 9
retlw b'01110111' ; A
retlw b'01111100' ; B
retlw b'00111001' ; C
retlw b'01011110' ; D
retlw b'01111001' ; E
retlw b'01110001' ; F
; підпрограма ініціалізації мікроконтролера
Init
bsf STATUS, RP0 ; вибір банку 1
movlw init_porta ; ініціалізація регістра TRISA
movwf TRISA^80h
movlw init_portb ; ініціалізація регістра TRISB
movwf TRISB^0x80
movlw init_option ; ініціалізація регістра OPTION
movwf OPTION_REG^80h
clrf STATUS ; вибір банку 0
clrf dig0 ; ініціалізація відображ. символу
movlw .10
movwf dig1
movlw 6
movwf dig2
movlw 9
movwf dig3
movlw init_intcon ; ініціалізація регістра INTCON, movwf INTCON ; дозвіл переривань
return
; основна програма
main
call Init ; ініціалізація мікроконтролера
m1 btfsc PORTA, 2 ; очікування натискання на кнопку
goto m1
incf dig0, F ; збільшення значення першого розряду
m2 btfss PORTA, 2 ; очікування відпускання кнопки
goto m2
incf dig0, F ; збільшення значення першого розряду
goto m1
end ; кінець програми
– Конец работы –
Эта тема принадлежит разделу:
ЛАБОРАТОРНИЙ ПРАКТИКУМ... Лабораторна робота Робота з портами вводу виводу Вивчення пакета MPLAB...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Власні оброблювачі переривань
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов