Трабла с чтением Status в LPT

Тема в разделе "WASM.ELECTRONICS", создана пользователем yureckor, 8 июн 2005.

  1. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    Надо мне программку, которая читает данные из LPT со status контактов

    ACK(10) ;6

    BUSY(11) ;7

    PE(12) ;5

    SLCT(13) ;4

    ERROR(15) ;3

    Но как-то они странно читаются:
    Код (Text):
    1.  
    2. без всего 01111b
    3. 7 - 00000000
    4. 6 - 11000000
    5. 5 - 10100000
    6. 4 - 10010000
    7. 3-  10001000
    8.  


    замыкаю по одному с землей, control значения ставлю в 255.

    (если читать из data шины, то все нормально- всегда 11111111b, при замыкании контакта на землю, соответственно в том бите 0)

    Кто-нибудь знает в чем дело?
     
  2. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    пока постил, понял что значение всегда xor %1000000

    но почему так, и почему при подаче 0 на контакт значение инвертированное?
     
  3. Sh355

    Sh355 New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2004
    Сообщения:
    56
    Потому что сигнал инверсный? Обычно обозначается чертой сверху над названием.
     
  4. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    yureckor

    режим порта саотрел какой выставлен ?
     
  5. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    хотя какая разница
     
  6. Red Alert

    Red Alert New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2005
    Сообщения:
    20
  7. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    Я уже сделал, мож кому пригодится
    Код (Text):
    1.  
    2. ;---
    3. thread_lpt_prc proc par1:DWORD
    4. pushad
    5.  invoke sleep, 2000
    6.  @@1:
    7.   invoke sleep, 5
    8.   CP [thread_exit], 0, NZ, @@kon
    9.   inv_win Out32, 037Ah, 255 ;выставили control- готовы читать
    10.   inva_win Inp32, 0379h ;читаем данные status
    11.   and eax, 11111000b
    12.   xor eax, 01111000b ;сигнал инверсный, кроме 7 бита
    13.   CP eax, [last_eax], Z, @@1
    14.   ;ACK(10)         ;6
    15.   ;BUSY(11)        ;7
    16.   ;PE(12)          ;5
    17.   ;SLCT(13)        ;4
    18.   ;ERROR(15)       ;3
    19.   mov [last_eax], eax
    20.   mov ebx, eax
    21.   mov ecx, eax
    22.   and ebx, 10000000b
    23.   and ecx, 01000000b
    24.   shr ebx, 1
    25.   shl ecx, 1
    26.   and eax, 00111111b
    27.   or eax, ebx
    28.   or eax, ecx
    29.   shr eax, 3
    30.   mov ebx, eax
    31.  
    32.   ;в ebx 4-0 бит по порядку контактов, биты Status 76543
    33.   ...
    34.   ...
    35.   ...
    36.  
    37.  jmp @@1
    38. @@kon:
    39. popad
    40. ret
    41. thread_lpt_prc endp
    42.  


    Для работы использовал библиотеку Inpout32.dll