Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР2

.pdf
Скачиваний:
15
Добавлен:
27.01.2022
Размер:
155.4 Кб
Скачать

Отчет по лабораторной работе № 2 по дисциплине «Технические средства автоматизации и управления»

на тему:

«Обмен данными между ЭВМ и внешними устройствами с прерыванием программы процессора»

Цель работы

Изучить методику обмена данными между оперативной памятью ЭВМ и интерфейсом внешнего устройства с прерыванием текущей программы процессора и технических средств, реализующих управление аппаратными прерываниями в автоматизированных системах на основе ЭВМ семейства IBM AT.

Задание

2. Разработайте алгоритм и программы:

a) ввода в реальном времени массива данных из модуля АЦП в ОЗУ ЭВМ с прерыванием фоновой программы от таймера L-154 (период дискретизации сигнала и канал мультиплексора указываются из табл. 2.2); б) расчета в фоновом режиме работы процессора значений функции (из таблицы 1.1 по указанию преподавателя);

в) преобразования значений кодов АЦП в значения напряжения UКВ по окончании ввода всего массива, а также определения оценок математического ожидания, дисперсии и размаха входного сигнала U;

г) вывода массива исходных данных и результатов расчета на экран терминала и сохранения их на диске.

Канал

Период квантования сигнала, мкс

4

320

Вид сигнала, U(i)

Амплитуда, Umax. [В]

Число точек на периоде, М

 

 

 

Umaxexp(-3i/M), 0iM

5,0

100

 

 

 

Выполнение

Uses Dos, crt, timer154; const M = 100; T=320

var U, Uvx:array[0..M] of integer; Ureal:array[0..M] of real;

OldIntB: pointer; count, i: integer; Umax,Umin,Um,Ud,dU:real; f:text;

Procedure wait(i:word); var j:word;

begin for j:=1 to i do end;

Procedure IntDAC; interrupt;

{Оперативная программа обслуживания прерываний.}

{Ключевое слово Interrupt приводит к генерации машинных команд, обеспечивающих сохранение в стеке всех регистров процессора при входе в процедуру IntDAC и извлечение их из стека перед выходом из нее}

Begin {Старт оперативной программы}

asm STI end;{Установка IF=1 в регистре флагов ЦП} Port[$302]:=$E3;

{Устанавливаем канал и режим измерения АЦП} wait(100); {Задержка на переключение} Port[$304]:=$FF; {Запуск АЦП на измерение} asm NOP end;

while (Port[$302]>=$F8) do ; {Проверка окончания измерения.} Uvx[count]:=Port[$300] {Считываем очередное значение} inc(count); {Инкремент программного счетчика} Port[$20]:=$20;{IS3=0 Сброс бита регистра ISR – OCW2}

End; {Конец оперативной программы}

Begin {Основная программа}

Port [$30F]:= 0; {Запрет генерации прерываний от платы L-154}

Port[$21]:=Port[$21] OR $8;{Запрет прерывания от входа IR3 в ПКП}

{генерация выборки}

for i:=1 to M do U[i]:=Round(2048+2000*exp(-3*i/M));

count:=1; {Текущий считываемый элемент ставим 1}

GetIntVec($B,OldIntB); SetIntVec($B,@IntDAC);

{Сохранен старый вектор прерывания от входа IR3 в переменной OldIntB. Установлен новый вектор прерывания от входа IR3 на процедуру IntADC}

Set_Time(T); {Запуск таймера}

Port[$30F]:=1; {Разрешение прерываний от таймера L154} Port[$21]:=Port[$21] AND (NOT ($8));

{Разрешены прерывания от IR3 в регистре IMR ПКП} i:=1 {Текущий выводимый элемент ставим 1}

{Фоновая программа} while count<=M do begin

PortW[$300]:= U[i]; {Запись очередного значения} inc(i);

if i>M then i:=1

end;

{Конец фоновой программы}

Port [$30F]:= 0; {Запрет генерации прерываний от платы L-154} SetIntVec($B,OldIntB); {Восстановление старого вектора прерываний от входа IR3}

{Обработка результатов}

2

{Расчет измеренных значений в вольтах}

for i:= 1 to M do Ureal[i]:=2.5*(Uvx[i]-2048)/1000;

{Расчет математического ожидания} Um:=0;

for i:= 1 to M do Um:=Um+Ureal[i]; Um=Um/M;

{Расчет дисперсии} Ud:=0;

for i:= 1 to M do Ud:= Ud + sqr(Ureal[i]-Um); Ud=Ud/M;

{Поиск минимума и максимума} Umax:= Ureal[1];

Umin:= Ureal[1];

for i:= 2 to M do begin

if Umax<Ureal[i] then Umax:= Ureal[i]; if Umin>Ureal[i] then Umin:= Ureal[i];

end;

{Расчет размаха} dU: = Umax – Umin;

{Вывод результатов в файл}

assign(f, ’c:\Results.txt’); {Объявляем файл} rewrite(f); {Создаем/перезаписываем файл} writeln(f, ’АЦП Напряжение’);

for i:= 1 to M do writeln(f, Uvx[i]:4,’ ’, Ureal[i]:6:3); {Запись в файл измеренных сигналов}

writeln(f, ’Математическое ожидание ’, Um:6:3); writeln(f, ’Дисперсия ’, Ud:6:3);

writeln(f, ’Размах ’, dU:6:3); close(f) {Закрываем файл}

End. {Конец основной программы}

Вывод

На лабораторной работе была изучена методика обмена данными между оперативной памятью ЭВМ и интерфейсом внешнего устройства с прерыванием текущей программы процессора и технических средств, реализующих управление аппаратными прерываниями в автоматизированных системах на основе ЭВМ семейства IBM AT.

3

Соседние файлы в предмете Технические средства автоматизации и управления