Помогите Ламеру! (Delphi)
2764
18
Блин вот уже 3 месяца парюсь нихрена не получается, Поможите кто сможет и захочет...
Нужна прога, хотя нет.. лучше процедура для делфей, которая могла бы читать и писать данные побитно в LPT так чтоб на вход ей например подавать номер провода в порте, бит чтение\запись, и что необходимо установить 1или0 на этом проводе. причем так чтобы значение сохранялось до тех пор пока оно не будет изменено........
vetal
procedure SendLpt0(b:byte);
// послать байт в регистр данных LPT1
begin
asm
mov DX, $378
mov b, AL
out (DX), AL
end;
end;

var LastB:byte; //то что послали последний раз

procedure SetLPTbit(nb:byte); // установить nb-й бит (nb=0..7)
var bb:byte;
begin bb:=1 shl nb;
LastB:=LastB or bb; SendLpt0(LastB)
end;

procedure ClrLPTbit(nb:byte); // сбросить nb-й бит (nb=0..7)
var bb:byte;
begin bb:=not (1 shl nb);
LastB:=LastB and bb; SendLpt0(LastB)
end;

Вот примерно так.
Максимыч
ясен перец... ассемблерная вставка.....
Спасибо , попробую, хотя я в асме ваще не разбираюсь... знал бы асму, ......
можно попросит коментарии.....
Максимыч
ассемблер я к сожалению не знаю....
поясните ПЛЗ.
Spartac
Это про биты данных, а можно ли и если можно то как работать с управляющими сигналами....
vetal
Если не ошибаюсь, в регистре управления LPT младшие 4 бита пишутся а остальные 4 читаются.
То есть всего у Вас 12 проводов на выход и 4 на вход.
Правда у тех что пишутся 1 соответствует где низкий а где высокий уровень. Поэтому для единообразия (чтобы 1 всегда соответсвовала высокому) я сделал так

procedure SendLpt1(b:byte);
var bb:byte;
begin
bb:=((not b) and $0F) xor $04;
asm // это просто вывод байта bb в порт $37A
mov DX, $37A
mov AL, bb
out (DX), AL
end;
end;

Чтение старшего полубайта так же просто

procedure GetLpt1(var b:byte);
begin
asm // это просто ввод байта b из порта $37A
mov DX, $37A
in AL, (DX)
mov b, AL
end;
b:=b and $F0 ; // это не обязятельно, но мне так удобнее
end;

Это все работает, если в BIOS установлен режим SPP для LPT1
P.S. в моем предыдущем примере ошибка -
должно быть mov AL,b вместо mov b,AL
Максимыч
Thank's
Вроде начинает получатся........
vetal
Я писал драйвер для того чтобы все работало под NT(win2k*winXP) и под Win95&sons.
Ассемблерная вставка (а попросту запись в порт))
будет работать только под Win95/98/2000
Zen
да тут уж не до NT шного ядра..... хоть бы на 9Х разрулить....
vetal
Zen ты сумел работать с портами под 2000/ХР? А если имеется ISA контроллер, то этот драйвер может и в него писать? Если да, то помоги исходниками.
Народ, а подскажите пожалуст, как заделать типа мемо или чото в этом роде, чтоб как чат было (чтоб разноцветными шрифтами и все такое)
Dimano o Mano
У тебя в папке с делфями есть \Demos\Richedit.
Там довольно неплохой пример :спок:
Сибиряк
ага, спасибо, действительно наглядно...
нее... под ХР не пошло... под 9Х вроде проканало но както кривовато.... доделать так и не смог.... в принципе для себя делал, поэтому и крива проканало......

Под ХР ка таковой я не пробовал.... под 2003 виндой не прошло....
vetal
Боюсь тупым записыванием в порт ничго ны получится. У меня например ДОСная программа, которая общается с последовательным портом. Там как раз напрямую в порт пишется. Так из под виндов работает очень криво.

Неужели нет для этого соответсвующего VCL во всемогущем инете?