Отчет3 (1060548)
Текст из файла
Московский Государственный Технический Университет им. Н.Э. Баумана
Отчет по Лабораторной работе №3:
ОРГАНИЗАЦИЯ ИНФОРМАЦИОННОГО ОБМЕНА
С ИСПОЛЬЗОВАНИЕМ ПОСЛЕДОВАТЕЛЬНОГО COM-ПОРТА ПЕРСОНАЛЬНОГО КОМПЬЮТЕРА
Студентка: БМТ1-71 Колесова Т.Г.
Преподаватель: Скворцов С.П.
Москва - 2004 г.
Цель работы - знакомство с электрическим интерфейсом и адресным пространством COM-порта, практическое освоение методов программирования COM-порта и организации двунаправленной передачи данных.
Программирование информационного обмена по COM-порту начинается с инициализации порта, при которой устанавливаются базовый адрес порта, бодовая скорость, формат посылок (наличие и способ формирования бита четности, количество стоповых бит), а также способ контроля процесса приема-передачи (по прерываниям или по программному опросу соответствующих ячеек памяти).
В данной работе используется программный опрос (все прерывания запрещены), а параметры информационного обмена устанавливаются по заданию преподавателя.
Для удобства изменения параметров обмена желательно определить их заранее через соответствующие константы в начале программы. Ниже приведен фрагмент программы на языке Pascal 7.0 с перечислением масок и управляющих констант:
const
{ Порты RS232C }
BASE = $378; { базовый адрес}
IN_REG = BASE; { регистр данных}
LOW_DIV = BASE; { регистр младшего байта
{делителя частоты}
HIGH_DIV = BASE+1; { регистр старшего байта
делителя частоты}
INT_REG = BASE+1; {регистр управления
прерываниями}
INT_ID_REG = BASE+2; { регистр идентификации
прерываний}
CONTROL = BASE+3; { управляющий регистр}
MODEM = BASE+4; { регистр управления
модемом}
STATUS = BASE+5; { регистр состояния линии}
M_STATUS = BASE+6; { регистр состояния модема}
{ Делители частоты для LOW_DIV, HIGH_DIV }
B_110 = $410; { для скорости 110 бод}
B_150 = $300; { для скорости 150 бод}
…………………………………………………….
B_115200 = $1; { для скорости 115200 бод}
{ Управляющие константы }
DIVISOR = 0x80; { бит управления доступом к
регистрам записи делителя}
BIT_5 = $0; { 5 передаваемых бит}
................................................................................
{ константы для BASE+4 }
STOP_1 = $l; { 1 стоповый бит }
STOP_2 = ............................
NOPARITY = $0; {// no parity control}
EVEN = $18; { parity control 11000b }
ODD = $8; { non-parity control 01000b }
FIXPARITY = $20; { parity bit fixation 100000b }
{ Контроль линий BASE+5 }
DTR = $1;
RTS = $2;
OUT1 = $4;
OUT2 = $8;
LOOPBACK=$10; {управление внутренним тестом}
{ Маски готовности для BASE+6 }
DATA_IN = $1; { данные приняты }
OVERRUN=$2;{переполнение буфера при приеме}
PARITY_ERR = $4; { ошибка четности }
FRAME_ERR = $8; { ошибка формата данных (не
обнаружены стоповые биты }
INT_REQ = $10; { обнаружен запрос на
прерывание }
DATA_OUT = $20; { готовность к передаче ( буфер
FIFO пуст) }
{ Маски состояния статических сигналов для
BASE+7 }
CTS = $10;
DSR = $20;
RI = $40;
DCD = $80.
Например, для задания формата посылок длиной 5 бит с одним стоповым битом, без контроля четности следует ввести команду:
“Port[CONTROL] := BIT_5 OR STOP_1 OR NOPARITY; “,
а для запрета прерываний:
“ Port[INT_REG] := 0;”.
Для передачи байта необходимо дождаться завершения передачи предыдущего байта, однако время ожидания не должно быть слишком большим (при нормальной работе оно не превышает периода минимальной частоты следования тактовых импульсов, т.е. 1/110 секунды). Условие завершения передачи предыдущего байта, и, соответственно, выхода из цикла опроса регистра STATUS может быть выражено, например, так:
“Port[STATUS] AND DATA_OUT <> 0;”.
Теперь можно выводить байт, записав его значение по адресу BASE. Для расчета времени ожидания можно использовать функцию GetTime ( использует WINDOS.TPU ).
Для приема байта необходимо контролировать содержимое регистра STATUS и время ожидания, как и в случае передачи, только условием приема будет:
“Port[STATUS] OR DATA_IN <> 0;”,
а условием отсутствия ошибки при приеме:
“ Port[STATUS] AND (FRAME_ERROR OR OVERRUN) = 0;”.
В этом случае можно считывать байт из порта BASE.
Программа обмена данными по COM-порту может быть протестирована путем установления внутренней заглушки, соединяющей вход с выходом, что достигается записью в порт MODEM константы LOOPBACK:
“Port[MODEM] := LOOPBACK;”.
ЗАДАНИЕ
Написать программу на языке высокого уровня, реализующую передачу символов между двумя компьютерами в обоих направлениях по кабелю для связи через COM-порт. Задание выполняется в парах, при этом каждый студент программирует свой компьютер. Программа должна воспринимать символ, введенный с клавиатуры, и передавать его на второй компьютер, который должен отображать переданный символ на экране. К качеству графического интерфейса требования не предъявляются.
ОБОРУДОВАНИЕ И ВСПОМОГАТЕЛЬНЫЕ СРЕДСТВА
Компьютеры типа IBM PC/AT, кабели для связи компьютеров через COM-порт.
Программа:
Передача (Суворов, Колесова):
program santan;
uses graph,crt,dos,windos;
var d,r:integer;
const
mask:array [0..7] of byte = ($01,$02,$04,$08,$10,$20,$40,$80);
BASE = $2f8;
IN_REG = BASE;
LOW_DIV = BASE;
HIGH_DIV = BASE+1;
INT_REG = BASE+1;
INT_ID_REG = BASE+2;
CONTROL = BASE+3;
MODEM = BASE+4;
STATUS = BASE+5;
M_STATUS = BASE+6;
B_110 = $410;
B_150 = $300;
B_115200 = $1;
{dIVISOR = 0x80;}
BIT_8 =3;
STOP_1 = $1;
{STOP_2 =}
NOPARITY = $0;
EVEN = $18;
ODD = $8;
FIXPARITY = $20; { parity bit fixation 100000b }
DTR = $1;
RTS = $2;
OUT1 = $4;
OUT2 = $8;
LOOPBACK=$10;
DATA_IN = $1;
OVERRUN=$2;
PARITY_ERR = $4;
FRAME_ERR = $8;
INT_REQ = $10;
DATA_OUT = $20;
CTS = $10;
DSR = $20;
RI = $40;
DCD = $80;
var b:byte;
{-------------------------------------------------------------------------}
procedure sendbyte(b:byte);
begin
repeat until port[status] and data_out<>0;
port[base]:=b;
end;
{-------------------------------------------------------------------------}
function GETBIT(B:BYTE;POS:BYTE):byte;
begin
if b and mask[pos]<>0 then getbit:=1 else getbit:=0;
end;
{------------------------------------------------}
var i:byte;
PROCEDURE PRINTBYTE(B:BYTE);
VAR I:INTEGER;
BEGIN
WRITELN;
FOR I:=7 downTO 0 DO begin
write(getbit(b,i));
if i=4 then write(' ');
end;
END;
{----------------------------------------------------------------------------}
begin
clrscr;
port[$2fb]:=128;
port[$2f8]:=$10;
port[$2f9]:=4;
port[$2fb]:=3;
port[$2f9]:=0;
port[$2fc]:=0;
for i:=1 to 10 do begin
readln(b);
sendbyte(b);
end;
end.
Прием (Семенов, Суворова):
program santan;
uses graph,crt,dos,windos;
var d,r,a:integer;
const
mask:array [0..7] of byte = ($01,$02,$04,$08,$10,$20,$40,$80);
BASE = $3f8;
IN_REG = BASE;
LOW_DIV = BASE;
HIGH_DIV = BASE+1;
INT_REG = BASE+1;
INT_ID_REG = BASE+2;
CONTROL = BASE+3;
MODEM = BASE+4;
STATUS = BASE+5;
M_STATUS = BASE+6;
B_110 = $410;
B_150 = $300;
B_115200 = $1;
{dIVISOR = 0x80;}
BIT_8 = $3;
STOP_1 = $1;
{STOP_2 =}
NOPARITY = $0;
EVEN = $18;
ODD = $8;
FIXPARITY = $20; { parity bit fixation 100000b }
DTR = $1;
RTS = $2;
OUT1 = $4;
OUT2 = $8;
LOOPBACK=$10;
DATA_IN = $1;
OVERRUN=$2;
PARITY_ERR = $4;
FRAME_ERR = $8;
INT_REQ = $10;
DATA_OUT = $20;
CTS = $10;
DSR = $20;
RI = $40;
DCD = $80;
{-------------------------------------------------------------------------}
procedure getbyte(var b:byte);
begin
repeat until port[status] or DATA_IN<>0;
b:=port[base];
end;
{-------------------------------------------------------------------------}
function GETBIT(B:BYTE;POS:BYTE):byte;
begin
if b and mask[pos]<>0 then getbit:=1 else getbit:=0;
end;
{------------------------------------------------}
PROCEDURE PRINTBYTE(B:BYTE);
VAR I:INTEGER;
BEGIN
WRITELN;
FOR I:=7 downTO 0 DO begin
write(getbit(b,i));
if i=4 then write(' ');
end;
END;
{----------------------------------------------------------------------------}
var b:byte;
begin
clrscr;
port[$3Fb]:=128;
port[$3f8]:=$10;
port[$3F9]:=$04;
port[$3FB]:=$03;
port[$3f9]:=$00;
port[$3FC]:=$00;
for a:=0 to 10 do
begin
readln;
getbyte(b);
writeln(b);
end;
readln end.
10
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.















