поточного, і відновлюється за командою повернення з переривання. Адреса повернення посилається в стек, а в програмний лічильник завантажується адреса 0004h. Час реакції на переривання для зовнішніх подій, таких як переривання від ніжки INT або порту B, складає приблизно п'ять циклів. Це на один цикл менше, ніж для внутрішніх подій, таких як переривання по переповненню від таймера RTCC. Час реакції завжди однаковий. В підпрограмі обробки переривання джерело переривання може бути визначене по відповідному біту в регістрі прапорців. Цей прапорець-біт повинен бути програмно скинутий всередині підпрограми. Прапорці запитів переривань не залежать від відповідних бітів, що маскують, і біта загального маскування GIE. Команда повернення з переривання RETFIE завершує підпрограму, що перериває, і встановлює біт GIE, щоб знов дозволити переривання.
Управляючий регістр переривань INTCON (Адреса: 0Bh. Значення при reset: 0000 000?) має наступний зміст:
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|||
GIE |
ADIE |
RTIE |
INTE |
RBIE |
RTIF |
INTF |
RBIF |
|||
RBIF |
– Прапорець переривання від зміни на порту RB. |
|||||||||
Прапорець встановлюється, коли сигнал на вході RB < 7:4 > змінюється.
Прапорець скидається програмним способом.
INTF |
– Прапорець переривання INT. |
Прапорець встановлюється, коли на ніжці INT з'являється сигнал від зовнішнього джерела переривання.
Прапорець скидається програмним способом.
RTIF |
– Прапорець переривання від переповнення RTCC. |
Прапорець встановлюється, коли RTCC переповнюється.
Прапорець скидається програмним способом.
RBIE |
– Біт дозволу/заборони RBIF переривання: |
RBIE = 0 – забороняє RBIE переривання;
RBIE = 1 – дозволяє RBIE переривання.
INTE– Біт дозволу/заборони INT переривання |
INTE = 0 – забороняє INT переривання;
INTE = 1 – дозволяє INT переривання.
RTIE |
– Біт дозволу/заборони RTIF переривання: |
RTIE = 0 – забороняє RTIE переривання;
RTIE = 1 – дозволяє RTIE переривання.
GIE |
– Біт дозволу/заборони всіх переривань: |
GIE = 0 – забороняє переривання;
GIE = 1: – дозволяє переривання.
Він скидається автоматично при наступних обставинах:
· при включенні живлення;
· за зовнішнім сигналом /MCLR при нормальній роботі;
· за зовнішнім сигналом /MCLR в режимі SLEEP;
· по закінченню затримки таймера WDT при нормальній роботі;
· по закінченню затримки таймера WDT в режимі SLEEP.
Прапорець запиту переривання по закінченні запису даних-констант в довготривалу пам'ять EEIF (EECON1<5>) встановлюється по закінченню автоматичного запису в EEPROM. Це переривання може бути замасковане скиданням біта EEIE (INTCON<6>).
Скидання біта запиту переривання EEIF в регістрі EECON1<5> може бути здійснено в програмі обробки.
Алгоритми програми: Основна програма:
Обробник преривання від таймеру:
Обробник преривання зі входу RB0:
Рис.3. Схема алгоритму обробника преривання зі входу RB0
Текст програми:
list p=16f84 ; тип используемого ОМК
#include <p16f84.inc> ; подключение описаний регистров ОМК
H_COUNT equ 0Ch ; старшая часть счетчика
L_COUNT equ 0Dh ; младшая часть счетчика
org 00h ; переход на начало программы
goto main
org 04h ; обработка прерывания осуществляется за 9 циклов (4,5 мкс)
btfss INTCON, T0IF ; анализ
goto rb0 ; источника прерывания
tmr ; обработчик прерывания от таймера
movlw 0BBh ; запись в таймер
movwf TMR0 ; нового значения
movlw 01h ; инверсия уровня
xorwf PORTA, F ; сигнала на выходе RA0
bcf INTCON, T0IF ; сброс флага переполнения от таймера
retfie ; возврат из прерывания
rb0 ; обработчик прерывания со входа RB0
incfsz L_COUNT ; инкремент младшей части счетчика
goto next ; при переполнении младшей части
incf H_COUNT ; инкремент старшей части счетчика
next ; сброс флага,
bcf INTCON, INTF ; сигнализирующего о прерывании со входа RB0
retfie ; возврат из прерывания
org 0AAh ; адрес программы в памяти программ
main ; начало рабочей части программы
movlw b'10110000' ; инициализация
movwf INTCON ; регистра INTCON
bsf STATUS, RP0 ; выбор банка 1
clrf TRISA ; сброс регистра TRISA
clrf OPTION_REG ; сброс регистра OPTION_REG
bcf STATUS, RP0 ; выбор банка 0
clrf H_COUNT ; сброс
clrf L_COUNT ; счетчика
goto $ ; зацикливание
end ; конец
Вміст файлу лістінгу програми:
MPASM 02.20 Released LAB5TMR.ASM 4-23-2004 15:48:36 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 list p=16f84 ; тип используемого ОМК
00002 #include <p16f84.inc> ; подключение описаний регистров ОМК
00001 LIST
00002 ; P16F84.INC Standard Header File, Version 2.00 Microchip Technology, Inc.
00136 LIST
00003
0000000C 00004 H_COUNT equ 0Ch ; старшая часть счетчика
0000000D 00005 L_COUNT equ 0Dh ; младшая часть счетчика
00006
0000 00007 org 00h ; переход на
0000 28AA 00008 goto main ; начало программы
00009
0004 00010 org 04h ; обработка прерывания осуществляется за 9 циклов (4,5 мкс)
0004 1D0B 00011 btfss INTCON, T0IF ; анализ
0005 280C 00012 goto rb0 ; источника прерывания
00013
0006 00014 tmr ; обработчик прерывания от таймера
0006 30BB 00015 movlw 0BBh ; запись в таймер
0007 0081 00016 movwf TMR0 ; нового значения
0008 3001 00017 movlw 01h ; инверсия уровня
0009 0685 00018 xorwf PORTA, F ; сигнала на выходе RA0
000A 110B 00019 bcf INTCON, T0IF ; сброс флага переполнения от таймера
000B 0009 00020 retfie ; возврат из прерывания
00021
000C 00022 rb0 ; обработчик прерывания со входа RB0
Message[305]: Using default destination of 1 (file).
000C 0F8D 00023 incfsz L_COUNT ; инкремент младшей части счетчика
000D 280F 00024 goto next ; при переполнении младшей части
Message[305]: Using default destination of 1 (file).
000E 0A8C 00025 incf H_COUNT ; инкремент старшей части счетчика
000F 00026 next ; сброс флага,
000F 108B 00027 bcf INTCON, INTF ; сигнализирующего о прерывании со входа RB0
0010 0009 00028 retfie ; возврат из прерывания
00029
00AA 00030 org 0AAh ; адрес программы в памяти программ
00AA 00031 main ; начало рабочей части программы
00AA 30B0 00032 movlw b'10110000' ; инициализация
00AB 008B 00033 movwf INTCON ; регистра INTCON
00AC 1683 00034 bsf STATUS, RP0 ; выбор банка 1
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
00AD 0185 00035 clrf TRISA ; сброс регистра TRISA
Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct.
00AE 0181 00036 clrf OPTION_REG ; сброс регистра OPTION_REG
00AF 1283 00037 bcf STATUS, RP0 ; выбор банка 0
00B0 018C 00038 clrf H_COUNT ; сброс
00B1 018D 00039 clrf L_COUNT ; счетчика
00040
00B2 28B2 00041 goto $ ; зацикливание
00042 end ; конец
MPASM 02.20 Released LAB5TMR.ASM 4-23-2004 15:48:36 PAGE 2
SYMBOL TABLE
LABEL VALUE
C 00000000
DC 00000001
EEADR 00000009
EECON1 00000088
EECON2 00000089
EEDATA 00000008
EEIE 00000006
EEIF 00000004
F 00000001
FSR 00000004
GIE 00000007
H_COUNT 0000000C
INDF 00000000
INTE 00000004
INTEDG 00000006
INTF 00000001
IRP 00000007
L_COUNT 0000000D
NOT_PD 00000003
NOT_RBPU 00000007
NOT_TO 00000004
OPTION_REG 00000081
PCL 00000002
PCLATH 0000000A
PORTA 00000005
PORTB 00000006
PS0 00000000
PS1 00000001
PS2 00000002
PSA 00000003
RBIE 00000003
RBIF 00000000
RD 00000000
RP0 00000005
RP1 00000006
STATUS 00000003
T0CS 00000005
T0IE 00000005
T0IF 00000002
T0SE 00000004
TMR0 00000001
TRISA 00000085
TRISB 00000086
W 00000000
WR 00000001
WREN 00000002
WRERR 00000003
Z 00000002
_CP_OFF 00003FFF
_CP_ON 0000000F
_HS_OSC 00003FFE
_LP_OSC 00003FFC
MPASM 02.20 Released LAB5TMR.ASM 4-23-2004 15:48:36 PAGE 3
SYMBOL TABLE
LABEL VALUE
_PWRTE_OFF 00003FFF
_PWRTE_ON 00003FF7
_RC_OSC 00003FFF
_WDT_OFF 00003FFB
_WDT_ON 00003FFF
_XT_OSC 00003FFD
__16F84 00000001
main 000000AA
next 0000000F
rb0 0000000C
tmr 00000006
MEMORY USAGE MAP ('X' = Used, '-' = Unused)
0000 : X---XXXXXXXXXXXX X--------------- ---------------- ----------------
0080 : ---------------- ---------------- ----------XXXXXX XXX-------------
All other memory blocks unused.
Program Memory Words Used: 23
Program Memory Words Free: 1001
Errors : 0
Warnings : 0 reported, 0 suppressed
Messages : 4 reported, 0 suppressed
Послідовність дій при тестуванні:
1. Запускаю пакет MPLAB.
2.Створюю нове вікно, набираю текст програми, зберігаю його.
3. Захожу в опції та обираю тип мікро контролера: Options –> Development
Mode – вибір типу мікроконтролера (PIC16F84) і режиму (Simulator).
4. Компілюю мою програму: Project –> Build Node.
5. Якщо є помилки , то вони зберігаються у файлі лістінгу або у файлі помилок
(lst, err). Виправляю помилки.
6. Debug –> Simulator Stimulus –> Clock Stimulus ... – задаю зовнішні сигнали
на входи портів вводу/виводу.
7. Window –> Special Function Registers – відкриття вікна регістрів
спеціального призначення.
Рис.4. Вікно Special Function Registers.
В ході програми я можу спостерігати за станом регістрів спеціального призначення за допомогою цього вікна.
8. Debug –> Run –> Reset – скидання мікроконтролера.
9. Debug –> Run –> Step – покрокове виконання програми.
10. File –> Exit – вихід із програми.
Результати виконання програми:
В результаті виконання лабораторної роботи я написала оброблювачі переривань який виконує обробку переривань від таймера та від зміни рівня сигналу на виводі RB4.
Рис.5. Вікно результатів компіляції.
Отриманий мною обробник переривань виконує обробку переривання
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.