Помогите Ламеру! (Delphi)
2888
18
vetal
guru
Блин вот уже 3 месяца парюсь нихрена не получается, Поможите кто сможет и захочет...
Нужна прога, хотя нет.. лучше процедура для делфей, которая могла бы читать и писать данные побитно в LPT так чтоб на вход ей например подавать номер провода в порте, бит чтение\запись, и что необходимо установить 1или0 на этом проводе. причем так чтобы значение сохранялось до тех пор пока оно не будет изменено........
Нужна прога, хотя нет.. лучше процедура для делфей, которая могла бы читать и писать данные побитно в LPT так чтоб на вход ей например подавать номер провода в порте, бит чтение\запись, и что необходимо установить 1или0 на этом проводе. причем так чтобы значение сохранялось до тех пор пока оно не будет изменено........
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;
Вот примерно так.
// послать байт в регистр данных 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;
Вот примерно так.
ясен перец... ассемблерная вставка.....
Спасибо , попробую, хотя я в асме ваще не разбираюсь... знал бы асму, ......
можно попросит коментарии.....
Спасибо , попробую, хотя я в асме ваще не разбираюсь... знал бы асму, ......
можно попросит коментарии.....
ассемблер я к сожалению не знаю....
поясните ПЛЗ.
поясните ПЛЗ.
Это про биты данных, а можно ли и если можно то как работать с управляющими сигналами....
Если не ошибаюсь, в регистре управления 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
То есть всего у Вас 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
Сейчас читают
Пошлые анекдоты МФ))
215837
650
Девоньки, а вот кому женишка хорошего?
10888
127
Можно ли смотреть FULL HD видео с нетбука?
8565
31
Thank's
Вроде начинает получатся........
Вроде начинает получатся........
Я писал драйвер для того чтобы все работало под NT(win2k*winXP) и под Win95&sons.
Ассемблерная вставка (а попросту запись в порт))
будет работать только под Win95/98/2000
Ассемблерная вставка (а попросту запись в порт))
будет работать только под Win95/98/2000
да тут уж не до NT шного ядра..... хоть бы на 9Х разрулить....
Zen ты сумел работать с портами под 2000/ХР? А если имеется ISA контроллер, то этот драйвер может и в него писать? Если да, то помоги исходниками.
Dimano o Mano
activist
Народ, а подскажите пожалуст, как заделать типа мемо или чото в этом роде, чтоб как чат было (чтоб разноцветными шрифтами и все такое)
srf2000
member
2 Dimano o Mano:
используй TRichEdit
используй TRichEdit
Сибиряк
old hamster
У тебя в папке с делфями есть \Demos\Richedit.
Там довольно неплохой пример
Там довольно неплохой пример
Dimano o Mano
activist
ага, спасибо, действительно наглядно...
нее... под ХР не пошло... под 9Х вроде проканало но както кривовато.... доделать так и не смог.... в принципе для себя делал, поэтому и крива проканало......
Под ХР ка таковой я не пробовал.... под 2003 виндой не прошло....
Под ХР ка таковой я не пробовал.... под 2003 виндой не прошло....
Боюсь тупым записыванием в порт ничго ны получится. У меня например ДОСная программа, которая общается с последовательным портом. Там как раз напрямую в порт пишется. Так из под виндов работает очень криво.
Неужели нет для этого соответсвующего VCL во всемогущем инете?
Неужели нет для этого соответсвующего VCL во всемогущем инете?