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



              

Регистр состояния модема - часть 2


} bit_reg;

unsigned char byte;

} MSR;

В качестве примера рассмотрим программу, которая считывает и отображает на дисплее состояние некоторых регистров асинхронного адаптера. Сначала программа запрашивает номер COM-порта, состояние регистров которого вы хотите узнать. Затем она получает базовый адрес регистров этого асинхронного адаптера. Базовый адрес регистров данного асинхронного адаптера программа получает через область переменных BIOS. Вычисление базового адреса выполняется функцией com_address():

#include "sysp_com.h"

/** *.Name com_address * *.Title Определяет адрес заданного COM-порта. * *.Descr Эта функция определяет адрес базового регистра * COM-порта. Адрес берется из области переменных * BIOS. * *.Proto unsigned com_address( int port ); * *.Params int port - номер асинхронного адаптера: * 0 - COM1, 1 - COM2, 2 - COM3, 3 - COM4. * *.Return Адрес базового регистра асинхронного порта. * Если порт не установлен, возвращается 0, * если неправильно задан параметр, то -1. * *.Sample com_adr.c **/

unsigned com_address( int port ) {

unsigned base_address;

// возвращаем -1, если заданный асинхронный порт // не COM1, не COM2, не COM3 и не COM4

if(( port > 4 ) ( port < 0 )) return( -1 );

// считываем из области переменных BIOS базовый адрес данного порта

base_address = *(( unsigned _far * ) FP_MAKE( 0x40, port * 2 ));

return( base_address ); }

Старые версии BIOS могут самостоятельно определить наличие и адреса только первых двух COM-портов. Таким образом, если на вашем компьютере установлен асинхронный последовательный порт COM3 или COM4, то без дополнительной инициализации данная программа может просто "не увидеть" эти порты.

После определения базового адреса COM-порта, программа считывает состояние регистров данного порта и отображает их на дисплее.

Итак, приведем основной модуль программы:

// REGISTER.C

#include "uart_reg.h" #include "sysp_com.h" #include <graph.h>

unsigned com_address( int );




Содержание  Назад  Вперед