Получение данных из LPT порта.

Тема в разделе "WASM.ELECTRONICS", создана пользователем Игорь, 2 сен 2006.

  1. Игорь

    Игорь New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2006
    Сообщения:
    4
    Подскажите пожалуйста, как прочитать данные из девайса через регистр DATA LPT порта.
    Меня интересует алгоритм действий формата: "записать такое-то число в такой-то регистр...". Или пошлите куда нибудь, где можно это прочитать. Может кто этим занимался? А то ничего конкретнее описания выводов, (причём иногда даже без нумерации) я не нашёл. Информации много, а как конкретно её применить непонятно. Заранее спасибо
     
  2. VBKesha

    VBKesha New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    39
    mov dx,0x378
    in ax,dx
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    VBKesha
    Адрес может быть другим, AFAIK.
     
  4. Игорь

    Игорь New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2006
    Сообщения:
    4
    Спасибо, но не выходит. Вывод по адресу 0x378 сколько угодно. В идеале железка типа КР580ВВ55 должна получать с него данные и выдавать обратно другие данные. На практике же выставляю байт с помощью "крокодильчиков" при отключенной железке и по команде in получаю в лучшем случае то что было положено в регистр DATA ранее командой OUT. Материнка у меня не очень древняя т.е. двунаправленность поддерживается. В BIOSе стоит режим EPP. Копался с сетке на эту тему, везде только общие описания. Какие то дополнительные регистры, FIFO?, DMA?, ничего не понял. Может надо что то включить или какой то сигнал на регистр STATUS подать?
     
  5. Игорь

    Игорь New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2006
    Сообщения:
    4
    Т.е. как я понял перед тем как читать байт из порта 0х378 нужно сначала записать по адресу 0х37А число 10h. Это установит бит 5 регистра Control в единицу, что в свою очередь переведёт линии D0..D7 в высокоимпедансное состояние. (светодиоды, подлюченные к кабелю должны погаснуть). Тогда можно выставлять данные извне. Всё равно ей, гадине, что то ненравится. Что я не так делаю?
     
  6. Игорь

    Игорь New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2006
    Сообщения:
    4
    Всё! Разобрался!! Всё работает. Если кому интересно, то у контроллера LPT кроме стандартных регистров Data (смещение 0h), Status (1h) и Control (2h) есть ещё гнусный дополнительный регистр управления со смещением 402h в котором 3 старших бита это код режима работы порта. Если записать туда код 001 (число 34h) то порт переходит в режим PS/2 в котором возможен ввод информации. Теперь можно переключать направление регистра Data битом 5 регистра Control (0-вывод 1-ввод). Подробнее можно прочитать в книге М.Гук "Аппаратные интерфейсы ПК", а лучше В.Кулаков "Программирование на аппаратном уровне".
     
  7. martensit

    martensit New Member

    Публикаций:
    0
    Регистрация:
    20 май 2007
    Сообщения:
    1
    Игорь
    Игорь! А как прочитать из порта в среде Си-Билдер. Пробовал, как ты пишешь не получается! У меня есть п/программка записи в ЛПТ. По адресу 378h пишет хорошо,
    но если я пытаюсь сделать как ты говоришь:
    1) посылаю по адресу 77Ah число 34h
    2) посылаю по адресу 37A число 10h
    то на линиях D0-D7 нет высокоимп. состояния.
    Почему? Может я те так тебя понял?
    Сообщи пожалуйста. Хорошо бы, если бы ты дал свой телефон для оперативности.
     
  8. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
  9. SergX

    SergX New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    19