Московский Энергетический Институт
(Технический Университет)
Лабораторная работа №4
«Управление работой элементов автоматизированной системы в реальном времени»
Кряжев В. В.
Ильин А. М.
Кириллова Е. И.
Канакина Т. И.
Есюткин А. А.
Москва 2005
1. Разработать библиотеку процедур для управления ПИТ ЭВМ семейства IBM PC, включающую процедуры:
a) Инициализация 2-го канала, включающая установку режима работы канала таймера и загрузку константы пересчета.
b) Загрузка константыпересчета во 2-й канал без изменения режима работы канала.
c) Чтениетекущего содержимого счетного элемента СЕ 2 канала с приостановкой работы канала на время выполнения операции чтения.
d) Чтениетекущего содержимого счетного элемента СЕ выбранного канала без приостановки счета.
e) Чтение состояниявыбранного канала ПИТ.
f) Проверкаокончания одного периода для режима 3 с автозагрузкой (генератор меандра) 2-го канала ПИТ.
Все подпрограммы должны быть оформлены в виде модуля для обеспечения возможности их многократного использования.
unit Lab4mod;
interface
procedure Init_Ch2 (mode: byte; N: word);
procedure Load_N (N: word);
function Read_CE_Ch2: word;
function Read_CL (channel: byte): word; {4tenie CE v regime zas4elki}
function Read_CE (channel: byte): word;
procedure Read_Sost (channel: byte; var sost: byte; var count: word);
procedure Check_Period_End (var count: integer);
implementation
{
Инициализация 2-го канала таймера
}
procedure Init_Ch2 (mode: byte; N: word);
begin
port[$61] := port[$61] and not 3;
port[$43] := $B0 or (mode shl 1);
port[$42] := Lo(N);
port[$42] := Hi(N);
port[$61] := port[$61] or 1;
end;
{
Загрузка константыпересчета во 2-й канал без изменения режима работы канала
}
procedure Load_N (N:word);
begin
port[$61] := port[$61] and not 3;
port[$42] := Lo(N);
port[$42] := Hi(N);
port[$61] := port[$61] or 1;
end;
{
Чтениетекущего содержимого счетного элемента СЕ 2 канала с приостановкой работы канала на время выполнения операции чтения.
}
function Read_CE_Ch2: word;
var
count: word;
begin
port[$61] := port[$61] and not 3;
count := port[$42];
count := count + (port[$42] shl 8);
port[$61] := port[$61] or 1;
Read_CE_Ch2 := count;
end;
{
Чтение в режим защёлки
}
function Read_CL (channel: byte): word;
var
count: word;
begin
port[$43] := channel shl 6;
count := port[$40 + channel];
count := count + (port[$40 + channel] shl 8);
Read_CL := count;
end;
{
Чтениетекущего содержимого счетного элемента СЕ выбранного канала без приостановки счета
}
function Read_CE (channel: byte): word;
var
count: word;
begin
count := port[$40 + channel];
count := count + (port[$40 + channel] shl 8);
Read_CE := count;
end;
{
Чтение состояниявыбранного канала ПИТ
}
procedure Read_Sost (channel: byte; var sost: byte; var count: word);
var
k: byte;
begin
if channel = 0 then
k := 1
else
k := channel * 2;
port[$43] := $C0 or (k shl 1);
sost := port[$40 + channel];
count := port[$40 + channel];
count := count + (port[$40 + channel] shl 8);
end;
{
Проверкаокончания одного периода для режима 3 с автозагрузкой (генератор меандра) 2-го канала ПИТ
}
procedure Check_Period_End (var count: integer);
begin
while (Port[$61] and $20) <> 0 do;
while (Port[$61] and $20) = 0 do;
port[$304] := 0;
asm
nop
end;
while (port[$302] and $8) <> 0 do;
count := portw[$300];
end;
end.
2.Выполнить чтение статусных регистров каждого из каналов ПИТ, определить текущий режим работы каналов. Выполнить инициализацию 2 канала ПИТ для работы в режиме 0 с максимальным значением константы пересчета и двоичным режимом счета.В цикле последовательно (не менее 10 раз), выполнить чтение счетного элемента СЕ второго канала:
a) с приостановкой работыканала на время выполнения операции чтения,
b) без приостановки работы канала командами:
- "Защелкивание",
- "Чтение состояния",
- последовательно, старший и младший байты, в смежные моменты времени.
Определить интервалы времени между двумя соседними считываниями, максимальное и минимальное значения интервалов, отдельно для каждого вида чтения СЕ.
Выполнить заново инициализацию 2 канала ПИТ. Установить: режим 3 работы канала (генератор меандра), период сигнала на выходе OUT2 указанный в таблице (в зависимости от варианта задания).
Разработайть алгоритм и программу:
a) ввода в реальном времени массива данных из модуля АЦП (канал коммутатора указывается из таблицы) в ОЗУ ЭВМ 100 мгновенныхзначений сигнала с интервалом дискретизации сигнала, установленным в предыдущем пункте,
b) преобразования кодов АЦП в значения напряжения Uxкв по окончании вводавсего массива, а также определения оценокматематического ожидания, дисперсии и размаха входного сигнала Ux,
c) вывода массива исходных данных и результатов расчета на экран терминала и сохранения их на диске.
program IKKK4;
uses lab4mod, crt;
const
Nmas = 100;
du = 2.5e-3;
M: real = 0;
D: real = 0;
Umin: real = 0;
Umax: real = 0;
var
st: byte;
cnt: word;
i: integer;
mas: array[1..40] of word;
f: text;
T: word;
U_kod: array [0..Nmas] of integer;
U_izm: array [0..Nmas] of real;
function dec_to_bin (b: byte): string;
var
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.