Не получается связаться через COM с UPS

Тема в разделе "WASM.ASSEMBLER", создана пользователем senseysensor, 22 мар 2009.

  1. senseysensor

    senseysensor New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2009
    Сообщения:
    17
    Здравствуйте!
    Ситуация следующая. Работаю под DOS. Есть UPS, который работает по протоколу Megatec (http://networkupstools.org/protocols/megatec.html). Подключен он через порт COM1. Использую для "общения" прерывание int 14H. Вот кусочек кода:
    Код (Text):
    1.         xor DX, DX
    2.         xor AH, AH          ;èíèöèàëèçèðóåì ïîðò
    3.         mov AL, 10100011B       ;BAUD RATE..................... : 2400 bps
    4.                             ;DATA LENGTH................... : 8 bits
    5.                             ;STOP BIT...................... : 1 bit
    6.                             ;PARITY........................ : NONE
    7.         int 14H
    8.         ;UPS äîëæåí îòîçâàòüñÿ â ðåãèñòð AX:
    9.         ;AH = ñòàòóñ ëèíèè              AL = ñòàòóñ ìîäåìà
    10.         ;---------------------------------------------------
    11.         ;bit 7: timeout                 bit 7: received line detect signal
    12.         ;bit 6: trans shift reg empty   bit 6: ring indicator
    13.         ;bit 5: trans holding reg empty bit 5: data set ready
    14.         ;bit 4: break detect            bit 4: clear to send
    15.         ;bit 3: framing error           bit 3: delta recv line signal detect
    16.         ;bit 2: parity error            bit 2: trailing edge ring detector
    17.         ;bit 1: overrun error           bit 1: delta data set ready
    18.         ;bit 0: data ready status       bit 0: delta clear to send
    19.        
    20.  
    21.         mov AH, 01H        
    22.         mov AL, "T"
    23.         int 14H
    24.         test    AH, 10000000B
    25.         jnz tst_1
    Всё делаю согласно Megatec... При инициализации прерывание возвращает мне в AX 6000H (т.е. установленные биты 5 и 6 в статусе линии, AH). После этого что бы я не пытался сделать - получить или послать символ - мне в ответ уведомление об ошибке (установленный бит 7 AH при посылке байта и ненулевой AH при получении). И в чём проблема - не пойму :dntknw:(( При запросе статуса порта мне в ответ опять приходит 6000H в регистре AX.

    Пытался исследовать ситуацию программкой Advanced Serial Port Monitor. Всё работает замечательно, упс реагирует согласно протоколу:
    [​IMG]

    Прошу помощи... спасибо заранее!
     
  2. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    Что-нибудь прояснилось?
     
  3. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    А может, ну его это int 14h? Какое-то оно мутное, никогда в моей практике нормально не работало... Легче чисто на портах...
     
  4. senseysensor

    senseysensor New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2009
    Сообщения:
    17
    мне на другом форуме посоветовали действительно забить на int 14H, т.к.
    Так что буду работать с портами, думаю, всё выйдет (никак пока не могу время выкроить).
     
  5. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    Мысль интересная, я и не знал. Тогда получается это прерывание бесполезно, в таком случае и в самом деле надо на него забить. А жаль.
     
  6. senseysensor

    senseysensor New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2009
    Сообщения:
    17
    Напрямую через порты UPS реагирует. Вопрос решён :)