 
        
        - •Лабораторная работа №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
