Сопряжение компьютеров с внешними устройствами в стандарте КАМАК. Заярный В.П - 37 стр.

UptoLike

37
Тип массива для данных выбран word (16-битные положительные це-
лые числа), так как количество разрядов для чисел, подаваемых на вход
ЦАП, равно 14.
Перейдем к описанию процедур. Инициализация системы сводится к
выдаче на магистраль КАМАК сигнала Z, что происходит при выдаче в порт
103Н числа 1. Таким образом, описание процедуры init будет выглядеть так:
procedure
init;
begin
port[$103]:=1;
end;
Подготовка данных для ЦАП производится следующим образом. Ус-
ловимся использовать однополярный режим ЦАП (т. е. без задействования
линии W16). Обозначим за s максимальное значение кода на входе ЦАП
при выдаче 1 на все линии W1 — W14. Его легко вычислить:
s: = (1 shl 14) – 1.
Здесь оператор a1 shl a2 производит сдвиг числа а1 на а2 битов влево.
Множитель с
для функции f выбираем равным 2π/n для того, чтобы на
всей длине массива данных укладывался ровно один период функции.
Отобразим область значений функции на область входных значений
ЦАП. Известно, что отображение отрезка [x
1
, x
2
] на отрезок [y
1
, y
2
] осуще-
ствляется линейным преобразованием
у = y
1
+(x–x
1
)·(y
2
–y
1
) / (x
2
x
1
).
Так как значения функции лежат в диапазоне [-1,1], а диапазон вход-
ных значений ЦАП [0 ÷ S], то в массив данных а[i] следует заносит значе-
ния функции, подвергнутые линейному преобразованию
f*(i) = 0.5·s·(f(i)+1)
Несоответствия типов (a:Word — данные:Real) позволит избежать ис-
пользование стандартной функции округления round ().
Итак, процедура заполнения массива
данных будет такова:
procedure makemassiv;
var s:word;
begin
s:=1 shl 14 -1;
for i:=1 to n do
a[i]:=round(0.5*s*((sin(i*6.28/n)*sin(3*i*6.28/n))+1));
end;
Процедура вывода данных через ЦАП составляется следующим образом.
Обращение к модулю производится при выполнении команды NAF(16).
Значения, заносимые в регистры N и A, хранятся в программе в константах