Использование прерываний
Так как процесс последовательной передачи данных протекает достаточно медленно, имеет смысл выполнять его в фоновом режиме, используя прерывания по окончании передачи или приема символа. Напомним, что порту COM1 соответствует аппаратное прерывание INT0Ch, а COM2 - INT 0Bh.
Для разрешения прерываний необходимо установить в 1 биты регистра управления прерываниями, соответствующие тем прерываниям, которые мы желаем обрабатывать.
Когда произошло прерывание, программа-обработчик прерывания должна проанализировать причину прерывания, прочитав содержимое регистра идентификации прерывания с адресом baseadr + 2.
Не забудьте, что в конце обработчика аппаратного прерывания должна находиться последовательность команд:
mov al, 20h out 20h, al
iret
В противном случае возможно "зависание" программы.
Может случиться так, что одновременно произойдет несколько прерываний. В этом случае бит 0 регистра идентификации прерывания будет установлен в 1. Если такая ситуация имеет место, перед завершением обработки прерывания вам надо снова прочитать регистр идентификации прерывания и обработать следующее прерывание. Так следует поступать до тех пор, пока бит 0 регистра идентификации прерывания не станет равным нулю.
Ниже мы приведем некоторые полезные сведения о контроллере прерываний.