Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Чтение с драйвера LPT в Delphi

9.9K
13 февраля 2007 года
AndreiPH
18 / / 24.02.2006
Есть драйвер для установки, подключенной через LPT. Драйвер написан на ассемблере. Как в Delphi читать данные с этого драйвепа непосредственно?
257
14 февраля 2007 года
kosfiz
1.6K / / 18.09.2005
[quote=AndreiPH]Есть драйвер для установки, подключенной через LPT. Драйвер написан на ассемблере. Как в Delphi читать данные с этого драйвепа непосредственно?[/quote]
для того, чтобы читать из драйвера надо использовать систему ввода-вывода. для этого драйвер должен создать устройство, через которое ему и будут направляться запросы на чтение. если это реализовано в драйвере, то чтение данных из драйвера будет осуществляться с помощью функции ReadFile. вместе с ней также надо будет использовать CreateFile, CloseHandle.
9.9K
14 февраля 2007 года
AndreiPH
18 / / 24.02.2006
Спасибо за ответ.
Я у меня появилось еще несколько вопросов.
Вот часть кода драйвера.
Код:
[size=-2]
GetACP  Proc NEAR   ; Подпрограмма чтения данных из АЦП
    Public  GetACP

    PUSH    EBP
    MOV EBP,ESP
    Push    EBX
    Push    ECX
    Push    EDX

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Mov AH,0        ; Получить
    Int 1AH     ; значение текущего времени в тиках
    And DX,3
    Mov T1,DX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

M4: Mov DX,RLPT_SI   ; Регистр состояния порта
    In  AL,DX        ; Проверить готовность контроллера
    Test    AL,01000000b ;  к приему очередного байта
    JNE M4S
   
    Mov AH,0        ; Получить
    Int 1AH     ; значение текущего времени в тиках
    And DX,7
    Sub DX,T1
    Cmp DX,2
    JNE M4
    Mov EAX,-1
    Jmp RErr

M4S:    Mov EBX,[EBP+8]
    MOV AX,[EBX]    ; AX - номер канала АЦП
    And AX,3        ; Номер канала м.б. в диапазоне 0...3

    Mov DX,RLPT_D   ; Регистр данных порта
    Out DX,AL       ; Послать байт в порт

    Mov DX,RLPT_SO  ; Регистр управления

    Mov AL,00000101b    ; Выдать сигнал установленных данных
    Out DX,AL       ;  {тактовой частоты нет!}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Mov AH,0        ; Получить
    Int 1AH     ; значение текущего времени в тиках
    And DX,3
    Mov T1,DX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
M5: Mov DX,RLPT_SI  ; Регистр состояния приема
    In  AL,DX       ; Подождать пока
    Test    AL,01000000b    ;  контроллер
    JE  M5S     ;  прочитает данные

    Mov AH,0        ; Получить
    Int 1AH     ; значение текущего времени в тиках
    And DX,7
    Sub DX,T1
    Cmp DX,2
    JNE M5
    Mov EAX,-2
    Jmp RErr

M5S:    Mov DX,RLPT_SO  ; Регистр управления
    Mov AL,00000100b    ; Снять сигнал
    Out DX,AL       ;  выставленных данных

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    Mov DX,RLPT_SO
    Mov AL,00100110b    ; Установить режим приема данных из порта
    Out DX,AL       ;  и установить флаг готовности приема данных

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Mov AH,0        ; Получить
    Int 1AH     ; значение текущего времени в тиках
    And DX,3
    Mov T1,DX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
M6: Mov DX,RLPT_SI
    In  AL,DX       ; Проверить не пришел ли байт
    Test    AL,00001000b
    JNE M6S

    Mov AH,0        ; Получить
    Int 1AH     ; значение текущего времени в тиках
    And DX,7
    Sub DX,T1
    Cmp DX,2
    JNE M6
    Mov EAX,-3
    Jmp RErr

M6S:    Mov DX,RLPT_D
    In  AL,DX        ; Принять младший байт АЦП
    Mov BL,AL        ; Сохранить его в регистре {BL}


    Mov DX,RLPT_SO
    Mov AL,00100100b ; Установить режим приема данных из порта
    Out DX,AL        ;  и погасить флаг готовности приема данных


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Mov AH,0        ; Получить
    Int 1AH     ; значение текущего времени в тиках
    And DX,3
    Mov T1,DX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
M7: Mov DX,RLPT_SI
    In  AL,DX        ; Подождать окончания переходных процессов
    Test    AL,00001000b
    JE  M7S

    Mov AH,0        ; Получить
    Int 1AH     ; значение текущего времени в тиках
    And DX,7
    Sub DX,T1
    Cmp DX,2
    JNE M7
    Mov EAX,-4
    Jmp RErr

; Прием старшего байта
M7S:    Mov DX,RLPT_SO
    Mov AL,00100110b    ; Установить режим приема данных из порта
    Out DX,AL       ;  и установить флаг готовности приема данных

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Mov AH,0        ; Получить
    Int 1AH     ; значение текущего времени в тиках
    And DX,3
    Mov T1,DX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
M8: Mov DX,RLPT_SI
    In  AL,DX       ; Проверить не пришел ли байт
    Test    AL,00001000b
    JNE M8S

    Mov AH,0        ; Получить
    Int 1AH     ; значение текущего времени в тиках
    And DX,7
    Sub DX,T1
    Cmp DX,2
    JNE M8
    Mov EAX,-5
    Jmp RErr

M8S:    Mov  DX,RLPT_D
    In   AL,DX      ; Принять старший байт АЦП
    Mov  BH,AL      ; Сохранить его в регистре {BH}


    Mov DX,RLPT_SO
    Mov AL,00100100b ; Установить режим приема данных из порта
    Out DX,AL        ;  и погасить флаг готовности приема данных

;Call WaitT

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Mov AH,0        ; Получить
    Int 1AH     ; значение текущего времени в тиках
    And DX,3
    Mov T1,DX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
M9: Mov  DX,RLPT_SI
    In   AL,DX      ; Подождать окончания переходных процессов
    Test AL,00001000b
    JE   M9S

    Mov AH,0        ; Получить
    Int 1AH     ; значение текущего времени в тиках
    And DX,7
    Sub DX,T1
    Cmp DX,2
    JNE M9
    Mov EAX,-6
    Jmp RErr

M9S:    Mov  DX,RLPT_SO
    Mov  AL,00000100b   ; Выключить режим приема данных из порта
    Or   AL,00000100b   ; Выключить подачу тактовой частоты
    Out  DX,AL      ;  и погасить флаг готовности приема данных
    Nop
    Nop

    Mov AX,BX

    Mov EBX,[EBP+12]    ; Передать данные в вызывающую программу
    Mov [EBX],AX
    Mov EAX,0

;Call WaitT
RErr:
    Pop EDX
    Pop ECX
    POP EBX
    POP EBP
    Ret

GetACP  EndP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

WaitT   Proc NEAR
    Push    ECX

    Mov ECX,100
W:  Dec ECX
    Cmp ECX,0
    JNE W

    Pop ECX
    Ret
WaitT   EndP

CODE    ENDS
    End;
[/size]


Как я понял процедура GetACP это чтение данных с порта. Как эти данные сразу загонять в прогу?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог