Аппаратная обработка прерываний с помощью блока PTS
Практическое занятие №1. Аппаратная
обработка прерываний с помощью блока PTS
алгоритм блоковой прерывание
аналоговый сканирование
1. Одиночная передача байта
информации;
2. Блоковая передача данных;
. Режима аналого-цифрового
сканирования;
Последовательность действий:
1.Сформировать управляющее слово CON=05h;
M2=0
|
M1=0
|
M0=0
|
BW=0
|
SU=0
|
DU=1
|
SI=0
|
DI=1
|
2. Размаскировать и разрешить как PTS-прерывание обслуживание
запроса int 12 т.е. INT_MASK1.4 :=1 (адрес 13h), PTSSEL(Hi).4 :=1 (адрес 05h).
ORB INT_MASK1, #10H; Размаскировать ORB 13H, #10H
ORB PTSSEL(HI), #10H; разрешить как PTS-прерывание
3. Создать управляющий блок PTSCB для режима одиночной
передачи, загрузить вектор FF2058h.
LD CX, #0050H; начальный адрес PTSCB
LD AX, #2058H; адрес вектора прерываний
LDB BL, #0FFH;CX, [BAX];
MEM_WORD(EX) ß СX
; Создать управляющий блок PTSCB
LD 50H, #050CH; записываем в PTSCB
LD 52H, #1FB8H; исходные параметры
LD 54H, #0200H;
.Счетчик пакетов расположить в
регистре (SFRs)-1FB6h
LDB WSR, 3EH; 64-bytes окно №30
LDB 0B6H, #0AH; Загрузка счетчика пакетов
.Создать программу "end of PTS"(располагается по
вектору стандартного прерывания int12 с адреса FF2038h), в которой предусмотреть проверку счетчика пакетов и инициализацию
вновь цикла PTS.
; загрузить вектор FF2038h.
LD CX, #2150H; адрес программы end of PTS
LD AX, #2038H; адрес вектора стандартного прерывания int12
LDB BL, #0FFH;CX, [BAX];
;создать программу "end of PTS"
end of PTS :WSR, 3EH; выбор окна для 1FB6h
DEC 0B6H; декремент счетчика пакетов
JE M1; проверка счетчика на нуль
OR PTSSEL(HI), #10H; разрешение PTS
LDB 50H, #0CH; перезагрузка счетчика циклов PTS M1: RET;
Последовательность действий:
1.Сформировать управляющее слово CON=8Fh;
M2=1M1=0M0=0BW=0SU=1DU=1SI=1DI=1
|
|
|
|
|
|
|
|
2. Размаскировать и разрешить как PTS-прерывание обслуживание
запроса int 14 т.е. INT_MASK1.6 :=1 (адрес 13h), PTSSEL(Hi).6 :=1 (адрес 05h).
ORB INT_MASK1, #40H; Размаскировать ORB 13H, #40H
ORB PTSSEL(HI), #40H; разрешить как PTS-прерывание
. Создать управляющий блок PTSCB для режима блоковой
передачи, загрузить вектор FF205Сh.
LD CX, #0058H; начальный адрес PTSCB
LD AX, #205CH; адрес вектора прерываний
LDB BL, #0FFH;CX, [BAX];
MEM_WORD(EX) ß СX
; Создать управляющий блок PTSCB
LD 58H, #8F04H; записываем в PTSCB
LD 60H, #0200H; исходные параметры
LD 62H, #0600H;
LD 64H, #001EH;
.Создать программу "end of PTS" по адресу 2200h (располагается по вектору
стандартного прерывания int14 с адреса FF203Сh), в которой предусмотреть повторную инициализацию цикла PTS перемещения нового
блока данных, принятого из последовательного порта.
; загрузить вектор FF203Ch.
LD CX, #2200H; адрес программы end of PTS
LD AX, #203CH; адрес вектора стандартного прерывания int14
LDB BL, #0FFH;CX, [BAX];
;создать программу "end of PTS"
end of PTS :
OR PTSSEL(HI), #40H; разрешение PTS:
RET;
Последовательность действий:
1.Сформировать управляющее слово CON=САh;
M2=1
|
M1=1
|
M0=0
|
0
|
SU=1
|
1
|
0
|
2. Ниже приводится формат
управляющего слова AD_COMMAND,
Адрес 1FACh
где - ch2-ch0 номера обслуживаемых
каналов от 0 до7; GO=1старт преобразования немедленный; GO=0 старт преобразования через
блок EPA; М=0 это10-ти разрядное преобразование; М=1 это8-ми разрядное
преобразование; Т=0 нормальное преобразование; Т=1 детектирование порога;
. Сформировать таблицу "команды
\ данные".
После начала цикла PTS происходит следующее:
1. PTS читает первую команду, сохраняет её во временном регистре,
увеличивает дважды указатель PTR1, который теперь указывает на первую пустую ячейку памяти.
2. PTS читает AD_RESULT регистр(1FAAh), сохраняет результат первого преобразования в таблице и дважды
увеличивает PTR1
3. PTS загружает команду из временного регистра в регистр команд AD_COMMAND. Начинается следующий
цикл АЦП.
. Если бит SU =1, то PTR1 сохраняется новое
значение и указывает на новую команду.
. Если бит SU=0, то PTR1 повторно
устанавливается в первоначальное значение, а значит следующий цикл использует
ту же команду и перепишет предыдущее значение результата АЦП.
. Декрементируется счетчик
циклов и по его значению либо возврат в основную программу и ожидание
завершения следующего преобразования, либо переход на end-of-PTS.
Последовательность действий
(продолжение):
. Размаскировать и разрешить как PTS-прерывание обслуживание
запроса int 5 т.е. INT_MASK.5 :=1 (адрес 08h), PTSSEL(Lo).5:=1 (адрес 04h).
ORB INT_MASK, #20H; Размаскировать ORB 08H, #10H
ORB PTSSEL(LO), #20H; разрешить как PTS-прерывание
. Создать управляющий блок PTSCB для режима
аналого-цифрового сканирования, загрузить вектор FF204Аh.
LD CX, #0060H; начальный адрес PTSCB
LD AX, #204AH; адрес вектора прерываний
LDB BL, #0FFH;CX, [BAX];
MEM_WORD(EX) ß СX
; Формирование PTSCB
LD 60H, #CA05H; записываем в PTSCB
LD 62H, #0100H; исходные параметры
LD 64H, #1FAAH;
.Создать программу "end of PTS"(располагается по
вектору стандартного прерывания int 5 с адреса FF200Аh), в которой предусмотреть повторную инициализацию для режима
аналого-цифрового сканирования, обеспечивая либо ту же, либо иную
последовательность преобразования.
; загрузить вектор
LD CX, #200AH; адрес программы end of PTS
LD AX, #200AH; адрес вектора стандартного прерывания int5
LDB BL, #0FFH;CX, [BAX];
;создать программу "end of PTS"
end of PTS :
OR PTSSEL(HI), #20H; разрешение PTS1: RET;
.Программным путем обеспечить начало
первого преобразования.
STRING MODULE CMAIN
$include(_SFR_INC_)
$include("regs.inc")AT
0FF2200H: DCB 'Stroka0' ;SOURCE STRING
DCB 0 ;STRING
DELIMITER:, #7EH;ENABLE VERTICAL WINDOW
;(32 BYTES, MAPPING OF
ADRESS 1FC0h)_7E, #02200H ;SET LO WORD OF 24 BIT ADRESS FOR IDX1_7E+2, #0FFH
;SET HI BYTE OF 24 BIT ADRESS FOR IDX1_7E, #01H ;SET AUTOINCREMENT ON 2, #00H
;DISABLE VERTICAL WINDOW, BX ;ZERO AX REGISTER :AL,ICX1 ;LOAD CHAR FROM
INSTRING TO AL AND POINT TO NEXT BYTEAL,#0 ;CHECK ON STRING END_EXIT ;IF END --
EXIT LOOPBXNEXT
_EXIT:
SJMP $ ;INFINITE LOOP
Скриншот выполнения программы
Вывод: на этой лабораторной работе
был изучен механизм индексной и оконной адресации микроконтроллера Intel
80296SA и команд повторения следующей инструкции. Изучены команды и
псевдокоманды, используемые в рабочих примерах , и проверено их
функционирование в процессе пошаговой отладки рабочих примеров.