Управление работой элементов автоматизированной системы в реальном времени

Страницы работы

Содержание работы

Московский Энергетический Институт

(Технический Университет)

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

«Управление работой элементов автоматизированной системы в реальном времени»

Выполнили студенты группы А-2-02:

Кряжев В. В.

Ильин А. М.

Кириллова Е. И.

Канакина Т. И.

Проверил  преподаватель:

Есюткин А. А.

Москва 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

Похожие материалы

Информация о работе