Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Передача данных по lpt

578
31 августа 2009 года
o_serg
93 / / 08.09.2003
Добрый день, пишу программу для передачи данных по lpt порту. Купил кабель нуль модемный lpt распайка у него странная в интернете такой не нашел. Виндоус и тотал командер соединяются по этому кабелю без проблем, скорость передачи 50 килобайт/сек. Все что я смог сделать это 10 килобайт/сек в полубайтном режиме.
Распайка кабеля похожа на http://www.nestor.minsk.by/kg/2008/27/kg82716.html, но разница в том, что линии Strobe(1), Init(16), AutoLF(14), selin(17) заведены друг на друга, т.е. на одном штекере вывод 1 и на второй штекер он подключен к выводу 1. Как это вообще работает не понимаю, ведь все эти четыре вывода являются выходами и не должны работать на вход?
Я понимаю что можно просто кабель перепаять нормально, но хочеться разобраться как работает Тотал командер с такой скоростью.
Подскажите пожалуйста, нет ли у кого алгоритма работы Total commander'a при передаче через lpt. У кого есть хоть какие нибудь идеи, поделитесь пожалуйста...
578
03 сентября 2009 года
o_serg
93 / / 08.09.2003
Код:
function GetLPTByte(): char;
var
  ok, res: byte;
begin
// первый полубайт
  ok := $80;
  hLpt.WritePort( LPTPort, 0, $10 ); // готов принять
  while ( ok and $80 <> 0 ) and ( not cancel ) do begin
    ok := hLpt.ReadPort( LPTPort, 1 ); // ждем передачи
  end;
  res := ( ( ok xor $80 ) shr 3 ) and $F;
  hLpt.WritePort( LPTPort, 0, $8 ); // принял и обрабатываю
  ok := 0;
  while ( ok and $80 = 0 ) and ( not cancel ) do begin
    ok := hLpt.ReadPort( LPTPort, 1 ); // ждем готовности к приему
  end;
// второй полубайт
  ok := $80;
  hLpt.WritePort( LPTPort, 0, $10 ); // готов принять
  while ( ok and $80 <> 0 ) and ( not cancel ) do begin
    ok := hLpt.ReadPort( LPTPort, 1 ); // ждем передачи
  end;
  hLpt.WritePort( LPTPort, 0, $8 ); // принял и обрабатываю
  res := res + ( ok xor $80 ) shl 1;
  ok := 0;
  while ( ok and $80 = 0 ) and ( not cancel ) do begin
    ok := hLpt.ReadPort( LPTPort, 1 ); // ждем готовности к приему
  end;
// байт принят
  Result := char( res );
end;

procedure SendLPTByte( send: char );
var
  ok: byte;
begin
// первый полубайт
  ok := $80;
  while ( ok and $80 <> 0 ) and ( not cancel ) do begin
    ok := hLpt.ReadPort( LPTPort, 1 ); // ждем готовности к приему
  end;
  hLpt.WritePort( LPTPort, 0, byte( send ) and $F + $10 ); // передаем
  ok := 0;
  while ( ok and $40 = 0 ) and ( not cancel ) do begin
    ok := hLpt.ReadPort( LPTPort, 1 ); // ждем удачного приема
  end;
  hLpt.WritePort( LPTPort, 0, 0 );
// второй полубайт
  ok := $80;
  while ( ok and $80 <> 0 ) and ( not cancel ) do begin
    ok := hLpt.ReadPort( LPTPort, 1 ); // ждем готовности к приему
  end;
  hLpt.WritePort( LPTPort, 0, byte( send ) shr 4 + $10 ); // передаем
  ok := 0;
  while ( ok and $40 = 0 ) and ( not cancel ) do begin
    ok := hLpt.ReadPort( LPTPort, 1 ); // ждем удачного приема
  end;
  hLpt.WritePort( LPTPort, 0, 0 );
end;

Вот код функций приема и передачи, что тут может тормозить не понимаю, посмотрите пожалуйста.
551
03 сентября 2009 года
Pavia
357 / / 22.04.2004
hLpt.WritePort( LPTPort, 0, $10 ); - тормозит.
Используй FIFO+DMA.
578
04 сентября 2009 года
o_serg
93 / / 08.09.2003
Если Вы имеете ввиду режим ECP то насколько я знаю с таким кабелем он работать не будет
551
04 сентября 2009 года
Pavia
357 / / 22.04.2004
У LPT есть режимы.
000 SPP или иначе ISA
001 PS/2
010 FIFO использует протокол SPP аналогичен 000, за исключением того что данные отправляются в FIFO и LPT автоматически выполняет рукопожатие.
011 ECP
100 EPP
101 резерв
110 тестовый режим
111 конфигурационный режим

Я имею ввиду режим 010.
578
04 сентября 2009 года
o_serg
93 / / 08.09.2003
действительно этот режим я упустил, но по нему вообще нет в инетернете информации.
Нашел только как его включить.
Будет ли он работать с таким кабелем, как с ним вообще работать, может у вас есть что то по этому поводу?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог