Погода: -12°C
  • Блин вот уже 3 месяца парюсь нихрена не получается, Поможите кто сможет и захочет...
    Нужна прога, хотя нет.. лучше процедура для делфей, которая могла бы читать и писать данные побитно в 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;

    Вот примерно так.

  • ясен перец... ассемблерная вставка.....
    Спасибо , попробую, хотя я в асме ваще не разбираюсь... знал бы асму, ......
    можно попросит коментарии.....

  • ассемблер я к сожалению не знаю....
    поясните ПЛЗ.

  • Лучше... ничем не заниматься, чем заниматься ничем. (Тацит)

  • Это про биты данных, а можно ли и если можно то как работать с управляющими сигналами....

  • Если не ошибаюсь, в регистре управления 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
    Вроде начинает получатся........

  • Я писал драйвер для того чтобы все работало под NT(win2k*winXP) и под Win95&sons.
    Ассемблерная вставка (а попросту запись в порт))
    будет работать только под Win95/98/2000

    Джордано Бруно секс-форума. =) Забанен за стихотворение.

  • да тут уж не до NT шного ядра..... хоть бы на 9Х разрулить....

  • Zen ты сумел работать с портами под 2000/ХР? А если имеется ISA контроллер, то этот драйвер может и в него писать? Если да, то помоги исходниками.

  • Народ, а подскажите пожалуст, как заделать типа мемо или чото в этом роде, чтоб как чат было (чтоб разноцветными шрифтами и все такое)

    Слово не воробей, с воза упало и топором не вырубишь...

  • 2 Dimano o Mano:
    используй TRichEdit

  • Зенькаю :улыб:

    Слово не воробей, с воза упало и топором не вырубишь...

  • а дальше?

    Слово не воробей, с воза упало и топором не вырубишь...

  • У тебя в папке с делфями есть \Demos\Richedit.
    Там довольно неплохой пример :спок:

  • ага, спасибо, действительно наглядно...

    Слово не воробей, с воза упало и топором не вырубишь...

  • нее... под ХР не пошло... под 9Х вроде проканало но както кривовато.... доделать так и не смог.... в принципе для себя делал, поэтому и крива проканало......

    Под ХР ка таковой я не пробовал.... под 2003 виндой не прошло....

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

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

Записей на странице:

Перейти в форум

Модератор: