лр / ТСАиУ Лабораторная работа №2 Задание 2024
.pdfПрограмма на Turbo Pascal:
uses crt;
const M=1000; {Количество регистрируемых с АЦП значений} var
U: array [1..M] of integer; {Объявление массива для хранения снятых данных}
Uvx:real; {переменная для расчета входного значения в
вольтах}
i: integer; {счетчик цикла}
f:text; {файл для записи измеренных значений} s:string; {строковая переменная для записи в файл}
Procedure wait(i:word); var j:word;
begin for j:=1 to i do asm NOP end; end;
begin
Port[$302]:=$E0; {Устанавливаем РУ, команда port записывает один байт}
wait(?);{Задержка на переключение мультиплексора, значение нужно рассчитать по результатам п.3 задания №1}
for i:=1 to M do begin
Port[$304]:=$FF; {Запуск АЦП на измерение}
asm NOP end; {Задержка на 1 команду ЦП, чтобы АЦП успел запуститься}
while (Port[$302]>=$F8) do; {Проверка окончания измерения, старшие биты регистра состояния всегда равны 1111, то есть F, нас интересует 3 бит, из младших, если младшие равны 1000 это 8, если младшие равны 0111, то это 7}
U[i]:=PortW[$300]; {Заносим результат измерения в массив} end;
assign(f, 'c:\Results.txt'); {Объявляем файл} rewrite(f); {Создаем/перезаписываем файл}
for i:=1 to M do begin
Uvx:=(U[i]-2048)*0.0025; {Переводим измерение в вольты} str(Uvx:4:2,s); {Переводим в вещественное число в строку} writeln(f,s); {Записываем строку в файл}
end;
close(f) {Закрываем файл}
end.
Программа на Turbo С++:
#include <dos.h> #include <stdio.h> int wait(int count)
{
for(int i=0;i<count;i++) asm nop;
return i;
}
int main()
{
const int M=1000; //Количество регистрируемых с АЦП значений int U[M]; //Объявление массива для хранения снятых данных float Uvx; //переменная для расчета входного значения в волтах outp(0x302,0xE0); //Устанавливаем РУ, команда outp записывает
один байт
wait(?); //Задержка на переключение мультиплексора, значение нужно рассчитать по результатам п.3 задания №1
for(int i=0;i<M;i++)
{
outp(0x304,0xFF); //Запуск АЦП на измерение
asm nop; //Задержка на 1 команду ЦП, чтобы АЦП успел запуститься
while (inp(0x302)>=0xF8); //Проверка окончания измерения, inp считывает один байт из регистра, старшие биты регистра состояния всегда равны 1111, то есть F, нас интересует 3 бит, из младших, если младшие равны 1000 это 8, если младшие равны 0111, то это 7
U[i]=inpw(0x300);//Заносим результат измерения в массив, inpw считывает два байта из регистра
}
FILE *f; //Объявляем файл для записи результатов f=fopen("c:\\text.txt","w"); // Создаем/перезаписываем файл char str[5]; //объявляем строковую переменную длинной 5
символов
for(i=0;i<M;i++)
{
Uvx=(U[i]-2048)*0.0025; //Переводим измерение в вольты sprintf(str,"%f",Uvx); //Переводим в вещественное число
в строку
fputs(str,f); // Записываем строку в файл fputc('\n',f); //Переводим файл на новую строку
}
fclose(f); //Закрываем файл return 0;
}
