Программирование модемов


Коммуникационная программа CHAT - часть 14


_install_com ENDP

; ; восстановление векторов прерываний ; _restore_com PROC FAR

push bp mov bp,sp push si

; отмечаем COM-порт как неактивный

mov si,CURRENT_AREA mov installed[si],0

; восстанавливаем вектор прерывания

mov ah,25H mov al,int_com[si] mov dx,old_com_off[si] mov bx,old_com_seg[si] push ds mov ds,bx int 21h

pop ds

pop si mov sp,bp pop bp ret

_restore_com ENDP

; ; открыть COM порт ; ; сброс буферов передатчика и приемника, ; инициализация регистров UART 8250 ; разрешение прерываний от UART 8250 ; (программирование контроллера прерываний) ; ; [bp+6] = скорость обмена ; [bp+8] = способ соединения - M(Модем), D(Нуль-модем) ; [bp+10] = четность - N(ONE), O(DD), E(VEN), S(PACE), M(ARK) ; [bp+12] = число стоповых бит 1, 2 ; _open_com PROC FAR

push bp mov bp,sp push si

mov si,CURRENT_AREA

; запрещаем прерывания

cli mov ax,[bp+6] mov baud_rate[si],ax mov bh,[bp+8] mov device_conn[si],bh mov bl,[bp+10] mov parity[si],bl mov ch,[bp+12] mov stop_bits[si],CH

; сбрасываем буферы и указатели

mov start_s_data[si],0 mov end_s_data[si],0 mov start_r_data[si],0 mov end_r_data[si],0 mov size_s_data[si],0 mov size_r_data[si],0

; проверяем, установлен ли уже обработчик прерываний

test installed[si],1 jnz reset_uart jmp exit_open

reset_uart:

; устанавливаем регистры UART 8250

; сбрасываем регистр управления модемом

mov al,0 mov dx,MCR[si] out dx,al jmp $+2

; сбрасываем регистр состояния линии

mov dx,LSR[si] in al,dx jmp $+2

; сбрасываем регистр данных

mov dx,DATREG[si] in al,dx jmp $+2

; сбрасываем регистр состояния модема

mov dx,MSR[si] in al,dx

; определяем делитель частоты тактового генератора

mov ax,50 mul DIV50 div baud_rate[si] mov bx,ax

; переключаем регистр данных и регистр управления прерываниями ; для ввода делителя частоты тактового генератора

mov dx,LCR[si] mov al,80H out dx,al jmp $+2

; вводим младший байт делителя частоты тактового генератора

mov dx,WORD PTR DLL[si] mov al,bl out dx,al jmp $+2

; вводим старший байт делителя частоты тактового генератора




Начало  Назад  Вперед