импульсы амплитудой +5В.По идее на переднем положительном фронте импульса должно
вызываться прерывание IRQ7(INT 0Fh).Так вот задача состоит в том, чтобы
перехватить это прерывание и обработать эго по своему.Я написал прогу на
asm под ДОС , но она почему-то не работает.Подскажите pleaz в чем причина????
;Драйвер для LPT1 порта
.model small
.stack 100h
.data
msg db "Driverя LPT port",'$'
old_int dd ?
.code
start proc near
mov ax,@data
mov ds,ax
mov ah,09h
mov dx,offset msg
int 21h
;сохранить адрес предыдущего обработчика прерывания
mov ax,350Fh ;AH=35 AL=номер прерывания
int 21h ;Функция DOS : определить адрес
;обработчика прерывания(возвращает в ES:BX)
mov word ptr old_int,bx ;запомнить смещение
mov word ptr old_int+2,es ;запомнить сегмент
;установить наш обработчик
push ds ;сохранить ds
push cs ;Настроить DS на сегмент кода DS:=CS
pop ds
mov dx,offset int0Fh
mov ax,250Fh
int 21h
mov dx,27Ah ;Вкл двунаправленный обмен данными
mov al,32
out dx,al
in al,21h ;Разрешить прерывание
and al,7Fh ;от LPT порта
out 21h,al
pop ds ;восстановить ds
;ОСНОВНАЯ ПРОГА
mov ah,1 ;Ожидание нажатия
int 21h ;на любую клавишу
;конец основной проги
in al,21h ;Запретить прерывание
or al,80h ;от LPT порта
out 21h,al
push ds ;восстановить предыдущий
pop es ;обработчик прерывания
mov ds,word ptr es

mov dx,word ptr es

mov ax,250Fh
int 21h
mov ax,4C00h
int 21h
start endp
int0Fh proc far ;Обработчик IRQ7
push ax ;Сохранение
push bx ;регистров
push es
push ds
mov ax,0b800h ;Вывести на экран
mov es,ax ;символ 'H' для
mov bx,0 ;контроля,т.е если
mov al,'H' ;вывелось 'Н' значит
mov es:[bx],al ;перехват удался
inc bx
mov al,1
mov es:[bx],al
mov al,20h ;Послать команду контроллеру прерываний
out 20h,al ;о завершении обработки прерывания
pop ds
pop es
pop bx
pop ax
sti
iret
int0Fh endp
end start