Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Примеры работы с последовательным портом на низком уровне



Работа с последовательным портом на низком уровне аналогична работе с параллельным – вначале определяем базовый адрес порта, затем работаем с его регистрами. Главная отличительная особенность состоит в необходимости установки параметровCOM-порта перед началом работы.

 

Приведем пример программы настройки параметров порта (скорость
4800 Кбод, 1 стоп-бит, четность, 8 бит/слово):

mov ax, 40h

mov es, ax ; в es - сегмент = 0040h

mov dx, es:[00] ; dx = базовый адрес порта COM1

mov COM1_adr, dx ; запомнили адрес порта COM1 в переменной

add dx, 3 ; DX=адресу регистра управления

mov al, 80h ; Установили бит DLAB - настройка делителя

out dx, al ; Рабочая скорость - 4800 Кбод

dec dx

dec dx ; DX=адресу старшего байта делителя скорости

mov al, 0

out dx, al

dec dx ; DX=адресу младшего байта делителя скорости

mov al, 18h ; Установка младшего байта делителя

out dx, al

add dx, 3 ; DX=адресу регистра управления

mov al, 00011011b ; DLAB=0, четность, 1 стоп-бит, 8 бит/слово

out dx, al

dec dx

dec dx ; DX=адресу регистра разрешения прерываний

mov al, 00h ; Прерывания запрещены.

out dx, al

Пример чтения байта с ожиданием без использования прерываний:

mov dx, COM1_adr ; DX=базовому адресу COM1

add dx, 5 ; DX=адресу регистра состояния

Wait:

in al, dx ; чтение байта состояния

test al, 01h ; Бит 1="1" (принят байт)

jz wait ; Нет - ждем

sub dx, 5 ; DX=адресу регистра приемника

in al, dx ; чтение принятого байта.

Пример передачи байта из AH (без контроля готовности приемника):

mov dx, COM1_adr ; DX=базовому адресу COM1

add dx, 5 ; DX=адресу регистра состояния

Wait:

in al, dx ; чтение байта состояния

test al, 40h ; Бит 6=1 (готов к передаче очередного байта)

jz wait ; Нет - ждем

sub dx, 5 ; DX=адресу регистра передатчика

mov al, ah

out dx, al ; Передача.

 

Асинхронная последовательная передача данных

Перед тем как использовать CОМ-порт, необходимо понять принцип асинхронной передачи. Данные передаются через последовательный порт порциями в один бит за единицу времени. В этом состоит отличие последовательного порта от параллельного, который осуществляет передачу данных порциями в один байт за единицу времени. Передача данных называется асинхронной потому, что длина интервала времени между передачей очередного байта информации (по 1 биту за единицу времени) не имеет никакого значения. Поэтому основными являются синхронизация и последовательность передачи цепочки бит, которые в конечном итоге составляют байт или другую информационную единицу.

Каждый байт данных, передаваемых через последовательный порт, состоит из последовательности сигнальных битов:

1. Один стартовый бит.

2. Восемь битов данных (в некоторых случаях 7).

3. Необязательный бит четности.

4. Один или два конечных бита.

Между передачей каждого байта может проходить некоторый промежуток времени.

Время простоя канала передачи для этого режима довольно велико. Младший бит передаваемой «порции» данных имеет нулевое значение, старший бит, завершающий очередную «порцию» данных, принимает значение, равное единице. Старший бит сигнализирует о начале передачи нового байта, который считывается в канал за один цикл, начиная с младшего бита. Биты данных передаются вслед за необязательным битом четности. В конце пересылаются один или два бита, сигнализирующих о конце очередной «порции» данных, считанных за один цикл. Завершающие (конечные) биты определяют минимальное время между передачей двух байтов. Обычно число завершающих битов не имеет большого значения, поэтому вы можете использовать либо один, либо два завершающих бита в зависимости от того, какое их число используют передающий и принимающий порты.

Бит четности, если он присутствует в передаваемом сообщении, используется для контроля корректности передачи и поиска ошибок. Контроль передачи может проводиться как на четность (контрольный разряд равен сумме по модулю двух информационных разрядов, и общее число единичных разрядов четно), так и на нечетность (контрольный разряд не равен сумме по модулю двух информационных разрядов, и общее число единичных разрядов нечетно).

Скорость передачи битов по каналу измеряется в бодах (бит в секунду). Наименьшей скоростью передачи информации считается
300 бод. Эта скорость передачи использовалась в старых модемах (сейчас большинство модемов позволяют достигать скорости передачи от 1200 до 56 000 бод). Семейство компьютеров IBM PC поддерживают скорость передачи данных до 115 200 бод.

Сигналов, предусмотренных CОМ-интерфейсом, намного больше, чем будет указано в данной работе. Это обусловлено тем, что он первоначально разрабатывался как устройство поддержки модема. В связи с этим, если порт используется совместно с другими устройствами, то многие из его сигналов просто в этом случае не нужны. Эти сигналы используются для установления протокола аппаратного уровня между модемом и компьютером при условиях: 1) компьютер еще не передавал информацию, но уже готов к ее передаче; 2) передача данных от модема к компьютеру еще не осуществлялась.

Ошибка кадрирования ( ошибка, возникающая при передаче порции данных, передаваемой канальным уровнем сетевого взаимодействия) фиксируется в случае, если частоты синхpонизиpующих импульсов двух портов значительно отличаются друг от друга. Как вы можете догадаться, последовательный порт после того, как он обнаружил стартовый бит, выделяет pегистp ввода, который за каждый цикл считывает один бит. Длина этого цикла определяется скоростью передачи данных. Однако время нахождения бита в peгистpe определяется тактовой частотой системы. Если частота компьютеpа-пpиемника недостаточна для покрытия частоты компьютеpа-источника, то происходит потеря полученного бита (так как pегистp занят), в связи с чем и pегистpиpуется ошибка кадрирования (framing error).

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.