Программирование модемов© Александр Фролов, Григорий ФроловТом 4, М.: Диалог-МИФИ, 1993, 236 стр. Включаемые файлы для программSYSP_COM.H/* SYSP_COM.H - include-файл для примеров, приведенных в книге */ /** *.Name FP_MAKE * *.Title Макро для составления FAR-указателя * *.Descr Макро составляет FAR-указатель, пользуясь * значениями сегмента и смещения * *.Params FP_MAKE(seg,off) * seg - сегмент; * off - смещение * *.Return FAR-указатель seg:off **/ #define FP_MAKE(seg,off) ((void far *) \ ((((unsigned long) (unsigned)(seg)) << 16L) | \ ((unsigned long) (unsigned) (off)))) #pragma pack(1) /* Идентификатор BIOS */ typedef struct _BIOS_ID_ { char date[8]; unsigned reserve; char pc_type; } BIOS_ID; typedef struct _AUX_MODE_ { union { struct { unsigned char len : 2, // длина символа stop : 1, // число стоп-битов parity : 2, // контроль четности stuck_parity : 1, // фиксация четности en_break_ctl : 1, // установка перерыва dlab : 1; // загрузка регистра делителя } ctl_word; char ctl; } ctl_aux; unsigned long baud; // скорость передачи данных } AUX_MODE; int aux_init(AUX_MODE *, int, int); // инициализация // асинхронного адаптера void aux_stat(AUX_MODE *, int); // определение режима // асинхронного адаптера void aux_outp(char, int); // вывод символа в // асинхронный адаптер char aux_inp(int); // ввод символа из асинхронного // адаптера BC_CONST.H// BC_CONST.H // определение констант для Turbo C и Borland C #define _COM_INIT 0 #define _COM_SEND 1 #define _COM_RECEIVE 2 #define _COM_STATUS 3 #define _COM_CHR7 0x02 #define _COM_CHR8 0x03 #define _COM_STOP1 0x00 #define _COM_STOP2 0x04 #define _COM_NOPARITY 0x00 #define _COM_EVENPARITY 0x18 #define _COM_ODDPARITY 0x08 #define _COM_110 0x00 #define _COM_150 0x20 #define _COM_300 0x40 #define _COM_600 0x60 #define _COM_1200 0x80 #define _COM_2400 0xa0 #define _COM_4800 0xc0 #define _COM_9600 0xe0 UART_REG.H// UART_REG.H /** *.Name FP_MAKE * *.Title Макро для составления FAR-указателя * *.Descr Макро составляет FAR-указатель, пользуясь * значениями сегмента и смещения * *.Params FP_MAKE(seg,off) * seg - сегмент; * off - смещение * *.Return FAR-указатель seg:off **/ #define FP_MAKE(seg,off) ((void far *) \ ((((unsigned long) (unsigned)(seg)) << 16L) | \ ((unsigned long) (unsigned) (off)))) #pragma pack(1) // регистр управления прерываниями #define ICR_N 1 typedef union _ICR_ { struct { unsigned char in_ready : 1; unsigned char out_ready : 1; unsigned char err : 1; unsigned char change : 1; unsigned char reserv : 4; } bit_reg; unsigned char byte; } ICR; // регистр идентификации прерывания #define IIDR_N 2 typedef union _IIDR_ { struct { unsigned char no_inter : 1; unsigned char inter_id : 2; unsigned char reserv : 5; } bit_reg; unsigned char byte; } IIDR; // регистр управления модемом #define MCR_N 4 typedef union _MCR_ { struct { unsigned char dtr : 1; unsigned char rts : 1; unsigned char out1 : 1; unsigned char out2 : 1; unsigned char diag : 1; unsigned char reserv : 3; } bit_reg; unsigned char byte; } MCR; // регистр состояния модема #define MSR_N 6 typedef union _MSR_ { struct { unsigned char change_cts : 1; unsigned char change_dsr : 1; unsigned char change_ri : 1; unsigned char change_dcd : 1; unsigned char cts : 1; unsigned char dsr : 1; unsigned char ri : 1; unsigned char dcd : 1; } bit_reg; unsigned char byte; } MSR; // регистр состояния линии #define LSR_N 5 typedef union _LSR_ { struct { unsigned char in_ready : 1; unsigned char overflow : 1; unsigned char parity : 1; unsigned char synxr : 1; unsigned char break_detect : 1; unsigned char out_ready : 1; unsigned char shift_ready : 1; unsigned char taimout : 1; } bit_reg; unsigned char byte; } LSR; // управляющий регистр #define LCR_N 3 typedef union _LCR_ { struct { unsigned char len : 2; unsigned char stop : 1; unsigned char parity : 2; unsigned char stuck_parity : 1; unsigned char en_break_ctl : 1; unsigned char dlab : 1; } bit_reg; unsigned char byte; } LCR; #pragma pack() int test_com( unsigned ); |