Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laby_MP / Отчет_№10_(выполнение прерываний в ADuC812).doc
Скачиваний:
28
Добавлен:
06.02.2015
Размер:
107.01 Кб
Скачать

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