|
|
Программирование COM портов
|
Порт 3F8h. Этот порт соответствует регистру передавемых данных. Для передачи в порт 3F8h необходимо записать байт передаваемых данных. После приема данных от внешнего устройства они могут быть прочитаны из этого порта. В зависимости от состояния бита управляющего слова, выводимого в управ- ляющий регистр с адресом 3F8h, назначение порта 3F8h изменяться. Если этот бит равен 0,порт используется для записи передаваемых данных.Если же этот бит равен 1, порт используется для вывода значения младшего байта делителя частоты тактового генератора. Изменяя содержимое делите- ля, можно изменять скорость передачи данных.
Старший байт делителя записывается в порт 3F9h. Зависимост скорости передачи данных от значе- ния делителя частоты приведины в таблице 1: Таблица 1. | Делитель | Скорость передчи в бодах. | Делитель | Скорость передчи в бодах. | | 1040 | 110 | 24 | 4800 | | 768 | 150 | 12 | 9600 | | 384 | 300 | 6 | 19200 | | 192 | 600 | 3 | 38400 | | 96 | 1200 | 2 | 57600 | | 48 | 2400 | 1 | 115200 | Порт 3F9h. Порт используется как регистр управления прерываниями от асинхронного адаптера или (после вывода в порт 3F9h байта с установленым в 1 стар- шим битом) для вывода значения старшего байта делителя частоты такто- вого генератора. В режиме регистра управления прерываниями порт имеет следующий формат. Таблица 2. | Бит | Значение | | 0 | 1 - разрешемие прерывания при готовности принимаемых данных. | | 1 | 1 - разрешение прерывания после передачи байта (когда выхо - дной выходной буфер передачи пуст.) | | 2 | 1 - разрешение прерывания по обнаружении состояния "BREAK" или ошибки. | | 3 | 1 - разрешение прерывания по изменению на разъёме RS-232-C. | | 4-7 | Не используются, должны быть равны 0. | Порт 3FAh. Регистр идентификации прерывания. По его содержимому программа может определить причину прерывания. Формат регистра приведён в таблице 3. Таблица 3. | Бит | Значение | | 0 | 1 - нет прерываний, ожидающих обслуживания. | | 1-2 | 00 - прерывание по линии состояния приёмника, возникает при переполнении приёмника, ошибка чётности или формата данных, или при состоянии "BREAK". Сбрасывается после чтения состо - яния линии и порта 3FDh. - 01 - данные приняты и доступны для чтения. Сбрасывается после после чтения данных из порта 3F8h.
- 11 - Состояние модема. Устонавливается при изменении состояния входных линий CTS, RI, DCD, DSR.
| | 3-7 | Должны быть равны 0. | Порт 3FBh. Управляющий регистр, доступен по записи и чтению. Его формат показан в таблице 4. Таблица 4. | Бит | Значение | | 0-1 | Длинна слова в байтах. 00 - 5 бит. - 01 - 6 бит.
- 10 - 7 бит.
- 11 - 8 бит.
| | 2 | Количество стоповых битов: 0 - 1 бит, 1 - 2 бита. | | 3-4 | Чётность: - 10 - контроль на чётность неиспользуется;
- 01 - контроль на нечётность.
- 11 - контроль на чётность.
| | 5 | Фиксация чётности. При установки этого бита бит чётности всегда принимает зна - чение 0 (если биты 3-4 равны 11) или 1 (если биты 3-4 равны 01) | | 6 | Установка перерыва. Вызывает вывыод строки нулей в качестве сигнала "BREAK" для подключения устройства. | | 7 | 1 - порты 3F8h и 3F9h используется для загрузки делителя частоты тактового генератора; 0 - порты используются как обычно. | Порт 3FCh. Регитр управления модемом. Упровляет состоянием выходных линий DTR, RTS, линий, специфических для модемов OUT1 и OUT2, для запуска диагно- стики при входе асинхронного адаптера, замкнутым на его выход. Формат порта приведён в таблице 5. Таблица 5. | Бит | Значение | | 0 | Линия DTR | | 1 | Линия RTS. | | 2 | Линия OUT1 (запасная) | | 3 | Линия OUT2 (запасная) | | 4 | Запуск диагностики при входе асинхронного| адаптера, замкнутом на его выход. | | 5-7 | Должно быть равно 0 | Порт 3FDh. Регистр состоянии линии. Значение зарядов регистра приведены в таблице 6. Таблица 6. | Бит | Значение | | 0 | Данные получены и готовы для чтения, сбрасываетсь при чтении данных. | | 1 | Ошибка переполнения. Был принят новый байт данных, а предыдущий ещё не был считан программой. Предыдущий байт потерен. | | 2 | Ошибка чётности, сбрасывается после чтения состояния линии. | | 3 | Ошибка синхронизации. | | 4 | Обнаружен запрос на прерывание передачи "BREAK" - длинная строка нулей. | | 5 | Регистр хранения передатчика пуст, в него можно записать новый байт для передачи. | | 6 | Регистр сдвига передатчика пуст. Этот регистр получает данные из регистра хранения и преобразует их в последовательный вид для передачи. | | 7 | Тайм-аут (устройство не связано с компьютером) | Порт 3FEh. Регистр состояния модема. Значения битов указвны в таблице 7. Таблица 7. | Бит | Значение | | 0 | Линия CTS изменила состояние. | | 1 | Линия DSR изменила состояние. | | 2 | Линия IR изменила состояние. | | 3 | Линия DCD изменила состояние. | | 4 | Состояние линии CTS | | 5 | Состояние линии DSR | | 6 | Состояние линии IR. | | 7 | Состояние линии DCD. | Приём и передача данных. Перед записью байта данных в регистр передатчика нужно убедиться, что регистр хранения передатчика свободен, то есть убедиться в том, что передача предыдущего символа завершена. Признаком свободы регистра передатчика является установленный в 1 бит 5 регистра состояния линии с адресом 3FDh. Аналогично передачи данных перед вводом символа из порта приёмника 3F8h следует убедиться, что бит 0 порта 3FDh установлен в 1, то есть что символ принят из линии и находиться в вуферном регистре приёмника.
|
|
-
Assembler,
COM в Ассемблере
В этой статье будет расказано о том, как использовать COM-интерфейсы в ваших программах, написанных на ассемблере. Не будет обсуждаться, что такое COM и как он применяется, но как его можно использовать, программируя на ассемблере. Здесь будет затронуто только применение существующих интерфейсов, а не реализация своих собственных, это будет рассмотрено в другой статье....
-
Assembler,
Пишем свой загрузочный сектор
Мы будем писать загрузочный сектор для трехдюймовой дискеты с файловой системой FAT12. После окончания начальной загрузки программа POST находит активное устройство и загружает с него короткую программу загрузки ОС - загрузочный сектор. Загрузочный сектор это первый физический сектор устройства, в данном случае дискеты и его размет равен всего ничего 512 байт. С помощью этих 512 байт кода мы должны найти основную часть загрузчика операционной системы, загрузить его в память и передать ему управл...
-
Assembler,
Переполнение буфера
В данной статье рассматривается пример использования переполнения стека под Windows 9x на платформе Intel x86. Изложение рассчитано на читателя, понимающего принципы работы персонального компьютера и более чем поверхностно знакомого с программированием....
-
Assembler,
Виртуальный драйвер для обслуживания аппаратных прерываний
Как уже отмечалось ранее, виртуальные драйверы служат прежде всего для виртуализации аппаратуры, то есть для предоставления одновременно выполняемым задачам возможности совместного использования устройств компьютера. Измерительная или управляющая аппаратура, подключаемая к компьютеру с целью создания автоматизированной установки, вряд ли будет эксплуатироваться в многозадачном режиме, однако использование для ее управления виртуального драйвера может заметно сократить программные издержки и умен...
-
Assembler,
Опыт дизассемблирования большой .com программы
В данной статье мне хочется рассказать о дизассемблировании большой программы (графического редактора). Не будучи знатоком ассемблера, не зная до сих пор, как использовать большинство возможностей своего дизассемблера (DisDoc 2.3), я все же решился написать эту статью, так как прекрасно помню, в какой кромешной тьме начинал заниматься дизассемблированием....
-
Assembler,
Оптимизация программ на Assembler
Несмотря на все более широкое распространение языков программирования и интегрированных сред программирования, оптимизация программ на ассемблере остается актуальной темой дискуссий для программистов. Можно упомянуть, например, форум програамистов, проведенный сетью PC MagNet, который стал ареной многочисленых "дуэлей": то один, то другой участник предлагал всем желающим решить небольшую, но интересную задачу программирования - и рассматривал присылаемые решения, ожидая, кто жее и как ...
-
Assembler,
Справочник программиста на персональном компьютере фирмы IBM. Приложения
Основной единицей хранения данных в компьютере является бит. В большинстве микрокомпьютеров восемь битов объединены в байт, при этом каждый бит байта может быть установлен или "включен" (= 1) или сброшен или "выключен" (= 0), допуская 256 разных вариантов. Таким образом, в одном байте можно представить 256 разных симво- лов (расширенный набор кодов ASCII) или целое число в диапазоне от 0 до 255. Хотя мы привыкли записывать эти числа в десятичной форме, они могут зап...
-
Assembler,
Справочник программиста на персональном компьютере фирмы IBM. Ввод/вывод
При асинхронной связи машина посылает или принимает байты информации по одному биту. Временные интервалы между байтами при этом несущественны, но времена между отдельными битами байта очень важны. Сигнал на линии может быть высокого или низкого уровня, что соответствует логическим нулю и единице, и говорят, что линия отмечена (marking), когда уровень высокий, и пустая (spacing), когда уровень низкий....
|
|
|