Re: Не могу повесить обработчик СОМпорта под ДОСом
От: Аноним  
Дата: 13.07.04 11:39
Оценка:
Здравствуйте, gep, Вы писали:

gep>Вот прога:


gep>    .186
gep>
это даже не под 286?
gep>IRQ_h    proc far

gep>    pusha
gep>    mov dx, COM+2
gep>    in al, dx
gep>IRQ_1:    and ax, 0110b
gep>
ah неопределен
gep>    inc cl
gep>
cl неопределен
gep>    cmp ax, 0100b
gep>
ax неопределен
gep>    jne IRQ_2
gep>    mov dx, COM
gep>    in al, dx
gep>;    mov recv_b, al
gep>
;ds непоределен или писать по cs
gep>IRQ_2:    mov dx, COM+2
gep>    in al, dx
gep>    test al, 1
gep>    jz IRQ_1
gep>
не понял, это по чему цикл?
gep>    mov al, 20h
gep>    out 20h, al
gep>    popa
gep>    mov cl, 0FFh
gep>
портим cl
gep>    iret

gep>recv_b    db 0FFh

gep>IRQ_h    endp

gep>    ;инициализация
gep>init    proc near
gep>    call ie_des  ;запрет прерываний СОМ
gep>    ;прерывание СОМ порта на себя
gep>    mov ah, 25h
gep>    mov al, IRQ
gep>    push cs
gep>    pop ds
gep>    mov dx, offset IRQ_h
gep>    int 21h
gep>    ;разрешим прерывание IRQ5
gep>    in al, 21h
gep>    and al, 11011111b ;IRQ5
gep>    out 21h, al
gep>    call ini_com ;настройка СОМ порта
gep>    mov ax, 0B800h

gep>    mov es, ax
gep>    mov cl, 0
gep>
обмен с обработчиком прерываний надо делать через память а не через регистры
gep>mainl:    xor ax, ax
gep>    xor di, di
gep>    mov al, cl
gep>    push ax
gep>    and ax, 0Fh
gep>    mov bx, offset htable
gep>    xlatb
gep>    mov es:[di], al
gep>    inc di
gep>    inc di
gep>    pop ax
gep>    shr ax, 4
gep>    xlatb
gep>    mov es:[di], al
gep>    jmp mainl

gep>exit:    ret

gep>htable    db "0123456789ABCDEF"


gep>COM    = 02E8h ;адрес СОМ4
gep>IRQ    = 0Dh   ;прерывание СОМ4 IRQ5-INT(переставил вручную, для того чтобы
gep>             ;попасть в первый контроллер перываний)

gep>init    endp

gep>    end start

gep>



gep>После запуска ведет себя следующим образом. Как только разрешаються прерывания в контроллере прерываний происходит одно прерывание. Еще до того как начинаеться цикл mainl. И все — хотя в порт данные точно поступают и другие программы их могут ловить.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.