Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лр / ТСАиУ Лабораторная работа №2 Задание 2024

.pdf
Скачиваний:
0
Добавлен:
21.12.2025
Размер:
1.44 Mб
Скачать

Программа на 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;

}