Производит опрос состояния последовательного порта
*Вход:
АН = 03h
DX = номер стыка (0 - СОМ1, 1- СОМ2 и т. д.)
*Выход:
АН = состояние линии (см. функцию 00h) AL = состояние модема
*Примечание:
Возвращает состояние линии (см. функцию 00h) и состояние модема.
Существуют специальные программы, обеспечивающие передачи информации между двумя компьютерами по последовательному каналу. Одна из них включена в версию Norton Commander версии 3.0. Для работы с этой командой запустите версию 3.0 Norton Commander, F9 - войдите в меню, на правой или левой панели выберите в меню команду Link. Предварительно необходимо соединить кабелем два PC. Команда Link предлагает выбрать порты (СОМ1 , или COM2 ) и тип данной машины( Master - ведущая машина или Slave - ведомая машина ). Для одной машины выберите Master, а для другой Slave. Можно установить так же ускоренную или обычную скорость передачи. После установок параметров запустить команду Link. Запуск произвести одновременно на обоих PC. Для установления связи требуется 5-10 секунд, если за это время связь не установилась надо попробовать изменить значение портов, например, СОМ1 заменить на COM2 и перезапустить команду.
Пример выполнение работы
Работа выполняется на двух компьютерах, соединенных кабелем, подключенным к стыку 25-штырь-ковыми разъемами. Чаще всего 25-штырьковый разъем подключается к порту COM2, поэтому при составлении программы в первую очередь следует использовать порты COM2. Работа состоит из двух частей: Для каждого варианта задания составляются две программы работы: для передающей (OUT.ASM ) и для принимающей ( INP.ASM ) машин. Ниже приведен пример программирования СОМ1 для передачи и приема символа. В примере общие процедуры работы со стандартными устройствами ввода/вывода выделены в отдельный файл LIB.ASM. С помощью директивы ассемблера INCLUDE <имя файла> LIB.ASM вставляется в обе программы, в место, определенное директивой INCLUDE. Эта директива имеет вид INCLUDE <имя файла>, где <имя файла> - имя файла (если необходимо указывается директория), содержащего любые данные, которые директива вставляет в программу при трансляции вместо себя.
;Программа передачи символа через СОМ1
; OUT.ASM
data segment
messi db 13,10, 'Передача символа : "
char db "A" ; передаваемый символ
db "$"
mess2 db 13,10,'Символ передан. Код завершения : $'
coderet db ?
data ends
code segment
assume cs:code,ds:data
start: mov ax,data; Инициализация регистра
mov ds,ax ; сегмента данных DS
call initrs232 ; инициализация интерфейса RS-232
mov dx,offset soob1 ; Вывод сообщения
call print_text ; на экран
; Передача символа
mov ah,l ; Номер функции 1
mov al,char ; Передаваемый символ Char
mov dx,0 ; Номер используемого интерфейса COM1
int 14h ; Передача символа по сети
mov coderet, ah ; Сохраняем код завершения прерывания
mov dx,offset mess2 ; Вывод сообщения о завершении
call print_text ; передачи символа по сети
mov al,coderet ; Вывод кода возврата
call print_al ; (Выводимый код вAL)
mov ax,4C00h ; Завершение программы
int 21h ; и выход в DOS
include lib.asm ;Подключение библиотеки процедур
code ends
end start
Файл INP.ASM:
; INP.asm
data segment
mess db 13,10,'Принят символ "
char db ?,'$'
mess1 db 13,10,'Код завершения $'
data ends
code segment
assumecs:code,ds:data,ss:stack
Start:
mov ax, data ; Инициализация регистра
mov ds,ax ; сегмента данных DS
call initrs232 ; Инициализация интерфейса RS-232
;Прием символа mm:
mov ah, 2 ; Функция чтения символа
mov dx, 0 ; Читаем из линии СОМ1
int 14h ; Прием символа
or ah,ah ; Проверяем ошибку
jne mm ; Бесконечный цикл до получения символа
; Получили символ, печатаем его
mov char.al
mov dx, offset mess
call print_text
; Печатаем регистр статуса линии (код возврата)
mov dx,offset mess1
call print_text
xchg al,ah
call print_al
; Завершаем работу, выходим в DOS
mov ax,4C00h
int 21h
include lib.asm
code ends
end Start
; библиотека стандартных процедур
; имя файла на диске - LIB.ASM
initrs232 proc near ; инициализация порта СОМ1
push ds ; сохране-
push cs ;ние
pop ds ;регистров
mov al,l 1111111b ;скорость передачи 9600бод, контроль на четность,
; 2 стоповых бита, длина слова 8 бит
mov ah,Oh ; номер функции
xor dx.dx ; COM1
int 14h ; вызов прерывания
mov dx,offset cs:init ; вывод
call print_text ; сообщения
call print_al ; вывод
xchg al,ah ; сообщений
mov dx,offset cs:statusl ; о
call print_text ; статусе
call print_al ; линии
pop ds
ret
initrs232endp
print_al proc near ; процедура вывода шестнадцатиричного числа из AL
push ax ; сох-
xor ah, ah ; раня-
push ds ; ем
push ax ; co-
push bx ; дер-
push cx ; жи-
push dx ; мое
push di ; регистров
push cs ; устанавливаем
pop ds ; ds на cs
mov ex,16;
print_n: ;
mov bx,16 ; основание системы
xor dx,dx ; счисления
div bx ; деление32х16
mov di,dx ; остаток в di
mov b1, byte ptr cs:print_table[di] ; 16-тиричную цифру из таблицы
mov di,cx ; цифру
mov byte ptr cs:print_buf[di],bl ; в буфер вывода
cmp ax,0h ; частное = 0
jle print_nl ; да
loop print_n ; на следующую цифру
print_ nl: ;
mov di,cx ;
mov al, byte ptr cs:print_buf[di]
mov bx,07 ; цвет
mov ah.0Eh
int10h
inc cx
cmp cx,17
jne print_nl
pop di ; восста-
pop dx ; навлива-
pop cx ; ем
pop bx ; co- pop ax ; дер-
pop ds ; жи-
pop ax ; мое
ret ; регистров
print_al endp
print_text proc near ; вывод на экран сообщений
push ax
mov ah,09H
int 21H
pop ax
ret
print_text endp
print_table db "0123456789ABCDEF"
print_buf db 17 dup (0)
init db 13,10,"Инициализация порта СОМ1"
db 13,10,"Регистр статуса модема $"
statusl db 13,10, "Регистр статуса линии $"
Варианты заданий.
1. Передать, принять и напечатать строку символов произвольной длины ( до100 символов ).
2. Передать, принять и напечатать копию экрана с учетом цвета символов.
3. Организовать пересылку сообщений между машинами ( форма диалога ).
4. Передать из одной машины в другую файл произвольной длины.
5. Передать из одной машины в другую директорию и имя файла, хранящегося в принимающей машине, которая выдает сообщение о результатах поиска файла.
6. Передать из одной машины в другую файл произвольной длины, которая по мере приема выводит его на экран.
7. Передать из одной машины в другую копию экрана с атрибутами цвета, создать в принимающей машине файл, хранящий копию переданного экрана.
8. Передать системное время, установить в принимающей машине новое ситемное время равное переданному.
Контрольные вопросы
1. В каких единицах измеряется скорость работы стыка?
2. Какие параметры устанавливаются при инициализации последовательного порта?
3. Какие функции работы с RS-232 предоставляет BIOS?
4. Как осуществить связь по стыку с помощью Norton Commander?
5. Как установить скорость передачи последовательного порта 9600 бод?