Модемы и факс-модемы. Программирование для MS-DOS и Windows

       

Первая телекоммуникационная программа


Теперь мы приведем первую телекоммуникационную программу AUX_TEST, управляющую асинхронным последовательным адаптером на уровне регистров. Программа инициализирует регистры COM-порта, устанавливая новую скорость передачи информации и формат передаваемых данных. Затем программа в цикле передает коды клавиш, нажатых на клавиатуре в COM-порт и считывает из него принятые данные, отображая их на экране.

Программа работает с асинхронным адаптером COM1. Для правильной работы необходимо замкнуть вместе контакты 2 и 3 разъема COM1. В этом случае данные передаваемые в COM-порт сразу же принимаются им обратно.

Главный файл программы AUX_TEST представлен в листинге 5.2.

Листинг 5.2. Файл AUX_TEST.C

#include <stdio.h>

#include <conio.h>

#include "sysp_com.h"

void main(void);

void main(void) {

     

AUX_MODE amd;

     

aux_stat(&amd, 0);

     

printf("\nСостояние порта COM1:"

                    

"\nКод длины символа:    %d"



                    

"\nКод числа стоп-битов: %d"

                    

"\nКонтроль четности:    %d"

                    

"\nСкорость передачи:    %lu",

                    

amd.ctl_aux.ctl_word.len,

                    

amd.ctl_aux.ctl_word.stop,

                    

amd.ctl_aux.ctl_word.parity,

                    

(unsigned long)amd.baud);

     

amd.baud = 115200;

     

aux_init(&amd, 0, 0);

     

printf("\n\nТестирование асинхронного адаптера."

                    

"\nНажимайте клавиши!"

                    

"\nДля завершения работы нажмите CTRL-C"

                    

"\n");

     

for(;;) {

            

// Вводим символ с клавиатуры и передаем его

            

// в асинхронный адаптер

            

aux_outp(getch(), 0);

            

// Вводим символ из асинхронного адаптера и

            

// отображаем его на экране

            

putchar(aux_inp(0));

     

}

}

После запуска программы AUX_TEST вызывается функция aux_stat, определенная в нашем приложении. Она заполняет структуру amd типа AUX_MODE, записывая в нее информацию о текущем режиме COM-порта.


Информация, записанная в этой структуре, отображается на экране. Изменяем поле baud структуры amd, содержащее значение скорости передачи данных, записывая в нее число 115200. Затем функция aux_init, определенная в программе, увеличивает скорость передачи информации до 115200 бит/с.

Затем начинает выполняться бесконечный цикл, в котором вводится символ с клавиатуры и передается в COM-порт:

aux_outp(getch(), 0);

Сразу после передачи кода нажатой клавиши в COM-порт, вводим символ из этого же порта и отображаем его на экране:

putchar(aux_inp(0));

Чтобы завершить работу программы, достаточно нажать комбинацию клавиш <Ctrl+C>.

Включаемый файл SYSP.H, представленный в листинге 5.3, содержит описания функций aux_stat, aux_init, aux_inp, aux_outp и определение структуры AUX_MODE.

Листинг 5.3. Файл SYSP.H

void aux_stat(AUX_MODE *mode, int port);

int  aux_init(AUX_MODE *mode, int port, int imask);

void aux_outp(char chr, int port);

char aux_inp(int port);

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;

Теперь перейдем к рассмотрению функций aux_stat, aux_init, aux_inp и aux_outp, определенных в программе AUX_TEST.


Содержание раздела