СИСТЕМА ПРЕРЫВАНИЙ МК INTEL8051




Лабораторная работа № 3

СТЕК. ОБРАЩЕНИЕ К ПОДПРОГРАММАМ.

СИСТЕМА ПРЕРЫВАНИЙ МК INTEL8051

 

Цель работы: изучение организации стековой памяти и системы прерываний микроконтроллера Intel8051, а также приобретение навыков программирования с использованием подпрограмм.

 

1. ОРГАHИЗАЦИЯ СТЕКОВОЙ АДРЕСАЦИИ

 

Стековая адресация в МК реализована с помощью автоинкрементной/ автодекрементной косвенной адресации через 8-разрядный регистр указатель стека SР (адрес 81Н в пространстве DSEG). Стек располагается в любом поле DSEG в диапазоне адресов 00h-7Fh. При выполнении операций загрузки в стек (типа PUSH, CALL) содержимое SP сначала инкрементируется, а затем по полученному адресу выполняется загрузка операнда.
В операциях чтения (выгрузки) из стека (типа POP, RET) сначала читается содержимое стека, а затем SP декрементируется.

Команды работы со стеком приведены в табл. 1.1.

 

Таблица 1.1. Команды работы со стеком

МНЕМОНИКА КОП Б Ц Операция
PUSH ad       (SP):= (SP)+1; ((SP)):= (ad)
POP ad       (ad):= ((SP)); (SP):=(SP)-1
LCALL ad16       (PC):=(PC)+3, (SP):=(SP) + 1 ((SP)):=(PCL), (SP):=(SP)+1 ((SP)):=(PCH), (SP):=ad16
ACALL ad11 aaa10001     (PC):=(PC)+2, (SP):=(SP) + 1 ((SP)):=(PCL), (SP):=(SP)+1 ((SP)):=(PCH), (PC[0 -10]):=ad11
RET       (PCH):=((SP)), (SP):=(SP) - 1 (PCL):=((SP)), (SP):=(SP) - 1
RET I       (PCH):=((SP)), (SP):=(SP) - 1 (PCL):=((SP)), (SP):=(SP) - 1

 

При инициализации МК по сигналу RST “Cброс” в указатель стека автоматически загружается к од 07Н, т.е. первый элемент стека будет загружаться в ячейку 08Н (регистр R0 первого банка регистров). Пользователь имеет возможность переопределить содержимое SP, изменив необходимым образом расположение стека в DSEG. Переполнение стека аппаратно не фиксируется, что должно учитываться в программе пользователя.

При обращении к подпрограмме (и обработке прерываний) по командам типа CALL в стек загружается только адрес возврата. Информация о состоянии МК аппаратно не сохраняется. При необходимости это должна делать прикладная программа.

 


2. ОРГАНИЗАЦИЯ СИСТЕМЫПРЕРЫВАНИЙ

 

Микроконтроллер МК51 поддерживает двухуровневую приоритетную систему прерываний с пятью источниками запросов.

Имеется два внешних запроса на прерывания – линии ~INT0, ~INT1 (разряды 2-й и 3‑й третьего порта ввода/вывода: контакты P3.2 и Р3.3 соответственно).

 

 

Рисунок 2.1. Архитектура системы прерываний МК51

Источниками внутренних запросов могут служить;

- счетчик / таймер 0

- счетчик / таймер 1,

- порт последовательного ввода / вывода.

Архитектура системы прерывания МК приведена на рис. 2.1.

 

3. РЕГИСТРЫСИСТЕМЫПРЕРЫВАНИЙ

 

Блок регистров системы прерываний включает регистр управления TCON (адрес 88h в пространстве DSEG), формат которого приведен на рис. 3.1, и два регистра для управления режимом прерываний и уровнями приоритетов. Форматы этих регистров приведены на рис. 3.2 и рис. 3.3 соответственно.

 

 

Адрес бита в пространстве BSEG 8F 8E 8D 8C 8B 8A    
Назначение разрядов регистра TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

 

Рисунок 3.1. Формат регистра TCON

(регистра управления таймерами/счетчиками и системой прерываний)

 

На рис. 3.1:

TCON.0 IT0 – управление типом входа ~INT0:

IТ0 = 0 – по спадающему фронту;

IT0 = 1 – статический вход.

ТСON.1 IE0 – флаг запроса на прерывание ~INT01 при динамическом входе.

TCON.2 IT1 – управление типом входа ~ INT1:

IТ1 = 0 – по спадающему фронту;

IТ1 = 1 – статический вход.

TCON.3 IEI – флаг запроса на прерывание ~ INTI при динамическом входе.

TCON.4 TR0 – флаг программного управления СТ0.

TCON.5 TF0 – флаг запроса прерывания по переполнению СТ0.

TCON.6 TR1 – флаг программного управления СТ1.

TCON.7 TF1 – флаг запроса прерывания по переполнению СТ1.

 

 

Адрес бита в пространстве BSEG AF AE AD AC AB AA A9 A8
Назначение разрядов регистра EA ES ET1 EX1 ET0 EX0

 

Рисунок 3.2. Формат регистра IE (регистра разрешения прерываний)

 

На рис. 3.2:

IE.0 EX0 – маска IE0 или ~ INT0;

IE.1 EX0 – маска TF0;

IE.2 EX1 – маска IE1 или ~ INT1;

IE.3 ET1 – маска TF1;

IE.4 ES – маска ТI/RI;

IE.7 EA – общее разрешение прерываний.

 

Адрес бита в пространстве BSEG BF BE BD BC BB BA B9 B8
Назначение разрядов регистра PS PT1 PX1 PT0 PX0

 

Рисунок 3.3. Формат регистра IP (регистра уровня приоритетов прерываний)

 

На рис. 3.3:

IP.0 PX0 – приоритет IE0 или ~ INT0;

IP.1 РТ0 – приоритет TF0;

IP.2 PX1 – приоритет IE1 или ~ INT1;

IP.3 PT1 – приоритет TF1;

IP.4 PS – приоритет ТI/RI.

 

4. ОБСЛУЖИВАНИЕ ПРЕРЫВАНИЙ

 

Линии ~INT0 и ~ INT1 (внешние контакты МК Р3.2, Р3.3 соответственно) могут быть запрограммированы на срабатывание как по спадающему фронту сигнала, так и по низкому уровню сигнала. Управление типом вход выполняется флажками IT0 и IT1 соответственно. При IT0 = 1 устанавливается режим срабатывания по L уровню сигнала на входе ~INT0. Аналогично и для IT1. Запросы на прерывание от внешних источников устанавливают флажки IE0 и IE1. В случае работы по спадающему фронту эти флажки сбрасываются аппаратно, при приеме соответствующего запроса на обработку. При работе по уровню флажки IE0, IE1 отслеживают состояние сигнала на входе, их сброс необходимо предусмотреть в программе обработки соответствующим обращением к устройству, выставившему запрос.

Переполнение счетчика/таймера приводит к установке флага переполнения TF0 для счетчика/таймера 0 и TF1 для счетчика/таймера 1. При приеме запроса на обработку прерывания от счетчика/таймера соответствующий флажок аппаратно сбрасывается.

Запросы на прерывание могут поступать и от последовательного порта ввода/вывода. Порт может взвести флажок TI – запрос на прерывание от передатчика или флажок RI – запрос на прерывание от приемника. Оба запроса воспринимаются как запрос от одного источника. Флажки RI, TI при приеме запроса на прерывание от порта аппаратно не сбрасываются. Их обнуление должно быть предусмотрено в обработчике прерывания.

Все флажки, фиксирующие запросы на прерывания, могут устанавливаться и сбрасываться программно, с помощью соответствующих команд работы в пространстве BSEG. Т.е. существует возможность вызывать прерывания чисто программным путем.

С помощью регистра разрешения прерываний можно замаскировать любой из источников прерываний индивидуально или запретить/разрешить работу системы прерываний в целом.

Каждый источник прерываний может иметь два уровня приоритета, который задается установкой или сбросом соответствующего разряда в регистре уровня приоритета IР. Установка разряда в 1 соответствует высокому приоритету, а в 0 – низкому. При обслуживании низкоприоритетного прерывания запрос на высокоприоритетное прерывание может быть принят и обслужен. При обслуживании высокоприоритетного прерывания запрос на низкоприоритетное игнорируется.

При одновременном появлении нескольких запросов одного уровня используется арбитраж в соответствии со следующими приоритетами:

 


Приоритет Источник

 

0 (высший) IED

1 TF0

2 IEI

3 IF1

4 (низший) RI/TI

 

При приеме запроса аппаратно генерируется команда LCALL vect, которая обеспечивает переход к начальному адресу vect соответствующей процедуры обслуживания. Каждому источнику соответствует свой адрес:

 

Вектор прерываний

000ЗН EXT0 IE0 – внешний запрос 0

000BH TIMER0 TF0 – по таймеру /счетчику 0

001ЗН EXT1 IE1 – внешний запрос 1

001ВН TIMER1 TF1 – по таймеру/счетчику 1

002ЗН SINT RI/TI – от последовательного порта

 

Запрос на прерывание может быть принят в конце каждого цикла выполнения команды, кроме команды RETI и команд, работающих с регистрами IE и IP.

При переходе к процедуре обслуживания текущее состояние РC загружается в стек, обеспечивая возврат по команде RETI, которая должна завершать работу обработчика прерываний. Эта команда отличается от обычной команды RET тем, что сообщает системе прерываний о конце обслуживания прерывания данного уровня. Это позволяет перейти к обслуживанию прерывания низкого уровня, если на него поступил запрос во время обработки высокоуровневого. Общий алгоритм обработки прерываний микроконтроллера приведен на рис. 4.1.

Рисунок 4.1. Алгоритм обработки прерываний

5. ЗАДАНИЕ ПО ЛАБОРАТОРНОЙ РАБОТЕ

 

Написать систему программ, которая выполняет следующие функции:

1) Первая программа выполняет циклический вызов прерывания типа TYPE. Программа располагается в CSEG, начиная с адреса ADR0. Программа должна состоять из двух частей. Первая часть – инициализация системы, вторая – циклическое взведение соответствующего триггера запроса на прерывание.

2) Вторая программа – обработчик прерывания, должна располагаться в памяти CSEG, начиная с адреса ADRI. Обработчик должен при каждом обращении передавать в порт Р1 очередной код из массива кодов длиной N, расположенный в CSEG, начиная с адреса ADF2.

Вход в систему программ по команде LCALL ADR0, расположенной в CSEG по адресу 0000h.

Таблица 5.1. Варианты заданий.

Номер ADR0 TYPE ADR1 ADR2 N
1.   IE0     E
2. 52F TF0 62F   F
3. 43E IE1 53E   D
4. 34A TF1 44A   C
5.   RI     B
6.   TI     A
7.   IE0      
8. 68A TF0 78A    
9. 79D IE1 69D   F
10. 3AF TF1 5AF   E
11. 5BA RI 4BA    
12. 4C9 TI 3C9    
13. 1D8 IE0 2D8 3A1  
14. 2E4 TF0 1E4 4B2  
15. 3F5 IE1 7F5 5C2  
16. 5E6 TF1 6E6 6D2  
17. 6A1 RI 5A1 7E2 F
18. 7D3 TI 4D3 1F2 A
19. 4C8 IE0 3C8 2E2 B
20. 36F TF0 26F 3D2 C
21. 2BE IE1 4BE   D
22. 1CA TF1 3CA   E
23. 4D3 RI 2D3 3A2 F
24. 3E7 TI 1E7 4B2  
25. 6F3 IE0 7F3 5C2  
26. 4E5 TF0 6E5 6D2  
27. 6AD IE1 5AD 7E4 C

 

6. СОДЕРЖАНИЕ ОТЧЕТА:

 

– краткое описание системы прерываний;

– задание по лабораторной работе;

– текст программы с пояснениями;

– черновик выполнения работы.

7. ФРАГМЕНТЫПРОГРАММ

 

Необходимо написать программную систему со следующими функциями.

Программа 1 инициализирует систему и циклически вызывает прерывание типа IE1 (программный аналог запроса на прерывание по входу ~INTI). Программа должна располагаться в CSEG по адресу 0100Н.

Программа 2 является обработчиком прерывания. При каждом вызове она должна пересылать очередной элемент массива в порт Р1. Массив однобайтных кодов длиной N располагается в CSEG, начиная с адреса ADRD.

 

Вектор прерываний

    LJMP  
    NOP  
    NOP  
 
    LJMP  
    NOP  

 

Программа 1

    MOV DPTR, <ADRD> ; загружаем DPTR
  D2AF SETB IE.7 ; разрешаем прерывания
  D2AA SETB IE.2 ; разрешаем прерывание IE1
    NOP   ; пустая команда
  D28B SETB TCON.3 ; программный запрос на прерывания
010A 80FB SJMP   ; в начало цикла

 

Программа 2

  D2D3 SETB PSW.3 ; задаем 3 банк
  D2D4 SETB PSW.4 ;
  B80602 CJNE R0, <N>, 0209 ; проверяем счетчик
    MOV R0, #00 ; обнуляем счетчик
  E8 MOV A, R0  
020A   MOVC A,@A+DPTR ; чтение очередного кода
020B F590 MOV R1, A ; засылка кода в Р1
020D   INC R0 ; инкремент счетчика
020E   RET I ; возврат из обработчика

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: