- •Система сбора аналоговой информации
- •3.Входные и выходные сигналы устройства.
- •Замечания относительно прерывания программы
- •Замечания относительно сигналов запуска устройства
- •4.Описание регистров устройства.
- •4.1 Регистр csr (base).
- •5.Подготовка устройства к работе
- •7. Меры предосторожности при работе с устройством.
- •8. Пример программы для работы с устройством.
7. Меры предосторожности при работе с устройством.
При работе с устройством входное измеряемое напряжение ни при каких условиях не должно выходить за пределы 15В. В случае необходимости на датчиках сигналов следует устанавливать ограничивающие элементы. Несоблюдение этого условия может вывести из строя входные цепи устройства.
8. Пример программы для работы с устройством.
program MD88t14;
USES Crt,Graph;
{вывод на экран в виде графика результатов 600 измерений по заданному каналу и с заданным коэффициентом усиления при программном запуске;
выход из программы по ESC, по любой другой клавише цикл измерений повторяется}
const
Base=$320; {базовый адрес MD88}
CSR=Base; {адрес регистра управления MD88}
DR=Base+2; {адрес регистра данных MD88}
label 1;
var
VCSR: word;{глобальная переменная, хранящая содержимое регистра CSR}
dat: array[1..600] of integer;
i,e,grdrv,grmode: integer;
kw: real;
s,ss: char;
ch,g,k: word;
st: string;
{******************************************************************}
Procedure MD88FIFORST; {процедура сброса FIFO}
begin
Portw[CSR]:=VCSR or $4000;
end ;{MD88FIFORST}
{*******************************************************************}
Function MD88PRSTS(ch,g:word):integer;
{функция получения результата измерения по каналу ch при коэффициенте усиления g; режим работы коммутатора каналов - 16 заземленных; режим запуска - программный}
begin
VCSR:= VCSR or ((ch shl 4)+(g shl 9));
Portw[CSR]:=VCSR+1;
while (Portw[CSR] and $1)=0 do;
MD88PRSTS:=integer((Portw[DR] and $FFF) shl 4) div 16;
end;{MD88PRSTS}
{********************************************************}
procedure MD88SET(ch,g,time:word);
{процедура подключения на вход MD88 сигнала с канала ch с коэф. усиления g, с задержкой после включения, равной time условных единиц;
режим работы коммутатора каналов - 16 заземленных}
var
tmp: integer;
begin
VCSR:= VCSR or ((ch shl 4)+(g shl 9));
Portw[CSR]:=VCSR;
for tmp:=0 to time do;{генерация временной задержки}
end;{MD88SET}
{*********************************************************}
function MD88GETT:integer;
{функция получения одного отсчета от MD88 при внешнем или таймерном запуске;
канал и коэф. усиления должны быть предварительно установлены процедурой MD88SET}
begin
while (Portw[CSR] and $1)=0 do;
MD88GETT:=integer((Portw[DR] and $FFF) shl 4) div 16;
end;{MD88GETT}
{**********************************************************}
Procedure MD88STIM(k:word);
{Процедура установки периода сигналов запуска АЦП от внутреннего таймера MD88.
ПЕРИОД[мкс]=(0.8+0.8*k)[мкс] Таймер начинает работать сразу после установки периода}
begin
VCSR:=VCSR and $FFF7;
Portw[CSR]:=VCSR;
Portw[DR]:=k;
VCSR:=VCSR or $2;
Portw[CSR]:=VCSR;
end {MD88STIM};
{=================================================================}
begin
VCSR:=0;
ClrScr;
GotoXY(1,1);
Write('Канал -> ');
Readln(ch);
GotoXY(1,2);
Write('Диапазон -> ');
Readln(g);
1: MD88FIFORST;
for i:=1 to 600 do dat[i]:=MD88PRSTS(ch,g);
e:=portw[CSR] and $4000; {чтение признака переполнения FIFO}
grdrv:=0;
InitGraph(grdrv,grmode,'');
SetColor(2);
Rectangle(40,20,GetMaxX,GetmaxY-20);
SetColor(15);
OutTextXY(40,8,'канал');
OutTextXY(88,8,Chr(48+ch));
SetColor(14);
OutTextXY(344,8,'выход ESC продолжение ЛЮБАЯ КЛАВИША');
SetColor(2);
SetLineStyle(DottedLn,0,NormWidth);
for i:=1 to 9 do Line(40,40+(i-1)*50,639,40+(i-1)*50);
SetColor(15);
OutTextXY(0,437,'-2000');
OutTextXY(0,337,'-1000');
OutTextXY(32,237,'0');
OutTextXY(8,137,'1000');
OutTextXY(8,37,'2000');
OutTextXY(37,470,'0');
OutTextXY(129,470,'100');
OutTextXY(229,470,'200');
OutTextXY(329,470,'300');
OutTextXY(429,470,'400');
OutTextXY(529,470,'500');
SetColor(Red);
If e<>0 then OutTextXY(460,32,'переполнение буфера')
else OutTextXY(460,32,' ');
SetColor(2);
for i:=1 to 5 do Line(140+(i-1)*100,20,140+(i-1)*100,459);
SetLineStyle(SolidLn,0,NormWidth);
for i:=1 to 600 do PutPixel(i+39,240-(dat[i] {div 10}),14);
repeat
until(KeyPressed);
if ReadKey<>Chr($1B) then goto 1;
CloseGraph;
end.