
- •Лабораторная работа №10
- •Чебоксары 2014 Лабораторная работа 10 Выполнение прерываний в aDuC812
- •Ie (sfr#1 разрешения прв)
- •Назначение разрядов регистра ie
- •Ie2 (sfr#2 разрешения прв)
- •Назначение разрядов регистра ie 2
- •Iр (sfr приоритета прв)
- •Назначение разрядов регистра iр
- •Tcon (sfr управления int0 и int1)
- •Назначение разрядов младшей тетрады регистра tcon
Tcon (sfr управления int0 и int1)
- |
- |
- |
- |
IE1 |
IT1 |
IE0 |
IT0 |
Регистр управления/статуса TCON разбит на две тетрады, младшая из которых управляет прерываниями INT0 и INT1, а старшая - Т/СТ1 и Т/СТ0 (см. табл.11-2).
Адрес TCON: 88H
Значение TCON при включении питания: 00H
Наличие битовой адресации: есть
Назначение разрядов младшей тетрады регистра tcon
Таблица 10-5 |
||
Биты регистра |
Мнемоника |
Описание |
TCON 7- TCON4 |
- |
Используются для управления таймерами |
TCON3 |
IE1 |
Признак (флаг) запроса ПРВ от INT1 |
TCON2 |
IT1 |
Бит управления запросом ПРВ: при IT1 = 0 - ПРВ по напряжению низкого уровня на входе INT1, при IT1 = 1 - ПРВ по фронту 1/0 сигнала INT1. |
TCON1 |
IE0 |
Признак (флаг) запроса ПРВ от INT0 |
TCON0 |
IT0 |
Бит управления запросом ПРВ: при IT0 = 0 - ПРВ по напряжению низкого уровня на входе INT0, при IT0 = 1 - ПРВ по фронту 1/0 сигнала INT0. |
Запросы ПРВ от INT0 и INT1 устанавливают флаги IE0 и IE1. В случае работы по переходу 1/0 флаг IE запроса ПРВ будет установлен, если две последовательные проверки входа INTi покажут в одном машинном цикле "1", а в следующем "0". В этом режиме флаг IE сбрасывается автоматически при входе в соответствующую ПП обслуживания ПРВ.
Если же ПРВ вызвано уровнем входного сигнала, то запрос ПРВ должен удерживаться до начала обслуживающей ПП и аппаратно сбрасываться до ее завершения с целью предотвращения повторного обслуживания. Можно сказать, что в этом случае изменение флагов IE0 и IE1 отслеживает состояния сигналов на входах INT0 и INT1, повторяя все их изменения.
Если ПРВ разрешены установкой бита ЕА и бита управления соответствующего источника в регистре IE и если приоритет поступившего запроса ПРВ выше, чем приоритет обслуживаемого ПРВ, то обеспечивается переход к соответствующей ПП обслуживания данного ПРВ, адрес которой определяется в соответствии с табл.10-1.
Подпрограммы обслуживания ПРВ должны заканчиваться командой RETI, которая восстанавливает состояние логики ПРВ и загружает в программный счетчик 2 байта адреса возврата. При переходе по вектору на ПП обработки ПРВ автоматически до выполнения команды RETI независимо от состояния бит регистра IE запрещаются все ПРВ с уровнем, равным уровню приоритета обслуживаемого ПРВ, т.е. вложенные ПРВ с равными уровнями приоритета невозможны. Команда RETI снимает этот запрет. Команда же RET восстанавливает только содержимое РС, не восстанавливая состояние логики ПРВ.
В данной работе исследуется прерывание от внешнего источника INT0.
Таблица 10-6 |
||||||||||
Вариант |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
VD, мигающие в основной программе |
Р2.0 |
Р2.1 |
Р2.2 |
Р2.3 |
Р2.4 |
Р2.5 |
Р2.6 |
Р2.7 |
Р3.4 |
Р3.5 |
Вход ПРВ |
Int0 |
Int1 |
Int0 |
Int1 |
Int0 |
Int1 |
Int0 |
Int1 |
Int0 |
Int1 |
VD, мигающие в ПП обработки ПРВ |
Р0.0, Р0.7 |
Р0.1, Р0.6 |
Р0.2, Р0.5 |
Р0.3, Р0.4 |
Р0.0, Р0.4 |
Р0.2, Р0.7 |
Р0.4, Р0.7 |
Р0.1, Р0.3 |
Р0.3, Р0.7 |
Р0.5, Р0.7 |
Интервал мигания, с |
2 |
2,5 |
3 |
3,5 |
4 |
4,5 |
5 |
5,5 |
6 |
6,5 |
Число миганий VD в ПП |
6 |
6 |
5 |
5 |
4 |
4 |
3 |
3 |
2 |
2 |
Программа
Описание: Демонстрирует использование системы прерывания ADuC812.
Работа основной программы имитируется светодиодом P2.1, который после пуска программы мигает с интервалом 100 мс. Нажатием кнопки Int1 вызывается прерывание INT1 и управление передается на ПП обработки этого ПРВ, в которой светодиоды VD порта Р0.1 и Р0.6 мигают 6 раз с интервалом 1 с, после чего происходит возврат из ПП обработки ПРВ в основную программу, в которой снова начинает мигать светодиод P2.1.
$MOD812 {присоединение модуля ADuС812}
LED EQU P2.1 {VD, мигающий в основной программе}
N EQU 6 {число миганий светодиодов порта Р0}
CSEG
ORG 0000h
JMP MAIN
ORG 03h {вектор ПРВ INT1. Сюда управление передается после
нажатия кнопки Int1 на плате}
MOV R1,#N {число повторений цикла IN }
IN:MOV P0,#00H {погасить все VD порта Р0}
LCALL TIME {вызов ПП задержки на 1 с}
MOV P0,#41H {зажечь VD1 и VD6 порта Р0}
LCALL TIME
DJNZ R1,IN {повторить цикл, пока R1≠ 0}
RETI {возврат из ПП обработки ПРВ}
ORG 004Bh
MAIN:
CLR IT0 {установить тип внешнего ПРВ INT0 по уровню}
SETB EA {общее разрешение ПРВ}
SETB EX0 {разрешить внешнее ПРВ INT0}
{Цикл FLASH имитирует работу основной ;программы, в которой
мигает бит P2.1}
FLASH:
CPL LED {переключить VD P2.1}
CALL DELAY {задержка времени 100 мс}
JMP FLASH {повторить цикл FLASH}
DELAY:MOV R7,#200 {Подпрограмма DELAY, дающая задержку времени 100 мс}
DLY1:MOV R6,#230
DJNZ R6,$ {230*2.17 мкс = 500 мкс}
DJNZ R7,DLY1 {200*500 мкс = 100 мс}
RET
{Подпрограмма TIME, дающая задержку времени 1 с}
TIME:MOV R5,#25
TIM: MOV R7,#200
TIM1:MOV R6,#230
DJNZ R6,$ {230*2.17 мкс = 500 мкс}
DJNZ R7,TIM1 {200*500 мкс = 100 мс}
DJNZ R5,TIM {10*100 мс = 1 с}
RET
END