Добавил:
Кафедра ВТ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
07.04.2023
Размер:
2.02 Mб
Скачать

Листинг программ.

1 часть. Code.asm

$mod52

ORG 0

JMP main

ORG 0BH

JMP INTERRUPT

INTERRUPT:

CLR TR0

MOV TH0, #0FFh

MOV TL0, #000H

MOV A, 31h

RR A

MOV 31h, A

MOV P1, A

CLR A

SETB TR0

RETI

MAIN:

MOV P1, #0F0h

MOV 31h, #0F0h

MOV TL0, #0h

MOV TH0, #0FFh

MOV IE, #10000010b

MOV TMOD, #9h

MOV TCON, #13h

LOOP:

JMP LOOP

END

2 часть. Code.asm

$MOD52

ORG 0h

MAIN:

MOV A, #0h

MOV TMOD, #06h

MOV TCON, #10h

MOV TH0, #0F0h

MOV TL0, #0F0h

LOOP:

MOV A, TL0

MOV P1, A

SJMP LOOP

END

Результат работы.

Рисунок 6. Результат выполнения 1 (Часть 1)

Рисунок 7. Результат выполнения 2 (Часть 1)

Рисунок 8. Результат выполнения 3 (Часть 1)

Рисунок 9. Результат выполнения 4 (Часть 1)

Режим работы Т/С0 – режим 2

Рисунок 10. Результат выполнения 1 (Часть 2)

Рисунок 11. Результат выполнения 2 (Часть 2)

Рисунок 12. Результат выполнения 3 (Часть 2)

ИЗУЧЕНИЕ СИСТЕМЫ ПРИОРИТЕТНЫХ ПРЕРЫВАНИЙ В МИКРОКОНТРОЛЛЕРЕ MCS-51

Цель работы.

1. Ознакомление с организацией системы прерываний в микроконтроллере.

2. Изучение приемов программирования и принципов построения программ обработки прерываний.

Задание на лабораторную работу

1. Построить программу реализации «бегущего огня» согласно лабораторной работе 3 на основе программно-аппаратной задержки. При программировании регистров управления прерыванием обеспечить разрешение прерывания от T/C0 и INT0/. При этом реализовать следующее:

– внешний сигнал прерывания INT0 вызывает программу вывода в порт Р1 «решетки», например, кода 55H.

– изучить отличия формирования сигнала прерывания INT0 по фронту и уровню. Замаскировать прерывание INT0, а затем и прерывание от TF0; объяснить поведение программы (отсутствие индикации).

  1. Изучить режимы обработки запросов прерываний с различными приоритетами. Назначить сигналу INT0 высший приоритет, а сигналу прерывания TF0 от T/C0 – низший. Для наблюдаемости результата в программе обработке прерывания от TF0 вывести некоторый код в порт Р1 и, не выходя из обработки прерывания, выполнять бесконечный цикл этот цикл должен быть прерван по сигналу INT0 с выводом в порт Р1 «решетки» 55H. Убедиться, что программа, запускаемая от таймера/счетчика 0, не прерывается, если назначить сигналу INT0 приоритет, равный или меньше приоритета сигнала прерывания TF0 от T/C0.

Ход работы

В микроконтроллере MCS-51 реализована приоритетная система прерываний, структура которой показана на рис. 13. Обслуживаются запросы на прерывание, поступающие от следующих источников прерывания:

1. Два внешних источника прерывания (запросы должны поступать от внешних устройств на входы INT0, INT1 микроконтроллера).

2. Таймеры/счетчики 0, 1 (при переполнении) и 2 (при переполнении или автозахвате/автозагрузке).

3. Порт последовательной передачи данных (при передаче или приеме очередного байта информации).

Рисунок 13. Схема системы прерываний

Прерывания могут быть запрещены или вызваны пользователем, так как все указанные флаги программно доступны и могут быть установлены/сброшены.

В микроконтроллере имеются два регистра, управляющие разрешением прерываний (IE) и уровнем приоритетов (IP). Форматы этих регистров представлены на рис. 14, 15, а их описание – в табл. 4.1, 4.2. Чтобы прерывание от данного источника произошло, необходимо, во-первых, установить в 1 соответствующий бит разрешения прерывания в регистре IE и, во-вторых, установить в 1 бит общего разрешения прерываний EA. Система прерываний является двухуровневой, т. е. программа обработки прерывания низшего приоритета (0 в соответствующем бите регистра IP) может быть прервана программой обработки прерывания высшего приоритета (1 в соответствующем бите регистра IP).

Рисунок 14. Структура регистра разрешения прерываний IE

Рисунок 15. Структура регистра приоритетов прерываний IP

Таблица 4.1

Бит

Позиция

Название и назначение

EA

Общее разрешение пpеpываний. Сбpасывается пpогpаммно для запpета всех пpеpываний независимо от состояний остальных битов pегистpа IE

IE.6

Не используются

ET2

IE.5

Разpешение пpеpывания от таймеpа/счетчика 2 от флага TF2 или EXF2

ES

IE.4

Разpешение пpеpывания от последовательного порта от флага TI или RI

ET1

IE.3

Разpешение пpеpывания от таймеpа/счетчика 1 от флага TF1

EX1

IE.2

Разpешение внешнего пpеpывания от входа INT1

ET0

IE.1

Разpешение пpеpывания от таймеpа/счетчика 0 от флага TF0

EX0

IE.0

Разpешение внешнего пpеpывания от входа INT0

Если установленный в регистре IP приоритет разных источников прерываний одинаков, то при одновременном возникновении запросов управление получает программа обработки прерывания с меньшим номером соответствующего разряда в регистре IE.

Таблица 4.2

Бит

Позиция

Название и назначение

IP.7, IP.6

Не используются

ET2

IP.5

Приоритет пpеpывания от таймеpа/счетчика 2 от флага TF2 или EXF2

ES

IP.4

Приоритет пpеpывания от последовательного порта от флага TI или RI

ET1

IP.3

Приоритет пpеpывания от таймеpа/счетчика 1 от флага TF1

EX1

IP.2

Приоритет внешнего пpеpывания от входа INT1

ET0

IP.1

Приоритет пpеpывания от таймеpа/счетчика 0 от флага TF0

EX0

IP.0

Приоритет внешнего пpеpывания от входа INT0

Идентификатор в первой колонке табл. 4.1 и 4.2 является 8-разрядным адресом бита, непосредственно управляемым по командам булевого процессора.

Система прерываний микроконтроллера аппаратно формирует вызов (LCALL) соответствующей подпрограммы обслуживания, если она не заблокирована одним из следующих условий:

– в данный момент обслуживается запрос прерывания равного или более высокого уровня приоритета;

– текущий машинный цикл не является последним в цикле выполняемой команды;

– выполняется команда RETI или любая команда, связанная с обращением к регистрам IE или IP.

По аппаратно сформированному коду LCALL система прерывания загружает в стек только содержимое счетчика команд PC, а в счетчик команд затем загружается адрес вектора соответствующей подпрограммы обработки прерывания (см. рис. 4.1): 0003H для внешнего прерывания INT0 и 000BH – для прерывания от таймера TF0.

Подпрограммы обслуживания прерываний должны сохранить в стеке все регистры, которые использованы данной программой, командой PUSH. Необходимо, однако, отметить, что при использовании общих регистров R0–R7 для их сохранения достаточно переключить номер банка регистров в регистре PSW. После обработки прерывания сохраненные в стеке регистры должны быть восстановлены командой POP в обратном порядке. В конце программы обработки прерывания требуется использование команды RETI, обеспечивающей правильный возврат из прерывания.

Алгоритм программы:

  1. Установка флагов разрешения прерывания;

  2. Установка режима таймера (режим 1);

  3. Запуск таймера в бесконечном режиме;

  4. Проверка значения счетчика вызовов процедуры обработки прерывания от T/C0;

  5. Сдвиг инициализированный формой «бегущего огня» аккумулятор (падает значение аккумулятора на порт P1, и сбрасывает R0);

За разрешение прерываний отвечает строка mov IE, #10000011b - Разpешает пpеpывания от таймеpа/счетчика 0 от флага TF0 и внешнего пpеpывания от входа INT0 а также общее разрешение пpеpываний. Внешний же сигнал прерывания INT0 вызывает программу вывода в порт Р1 "решетки" – код 55h, в то время как прерывание от T/C0 просто вызывает процедуру обработки прерывания занимающуюся инкрементированием регистра R0.

Отличия формирования сигнала прерывания INT0 по фронту и уровню заключаются в значении бит управления в регистре TCON. От внешних прерываний устанавливаются флаги IE0, IE1 в регистре TCON, которые инициируют вызов соответствующей подпрограммы обработки запроса прерывания. Сброс этих флагов осуществляется аппаратно только в том случае, если прерывание было вызвано по срезу сигнала. Если прерывание вызвано уровнем сигнала прерывания, то сбросом флага IE управляет соответствующая подпрограмма обслуживания прерывания путём воздействия на источник прерывания для снятия запроса.

Соседние файлы в папке 3 и 4 лабы
  • #
    07.04.20232.02 Mб2lab34.docx
  • #
    07.04.2023366 б0lab3_1.asm
  • #
    07.04.2023168 б0lab3_2.asm
  • #
    07.04.20232.69 Кб0lab4_1.asm