Программирование игр для Windows. Советы профессионала


Коммуникационная программа: NLINK - часть 3


// помещаем символ в буфер

ser_buffer[ser_end] = ser_ch;

++char_ready;

// Восстанавливаем состояние контроллера прерываний

_outp(PIC_ICR,Ox20);

// Разрешаем работу с буфером

serial_lock = 0;

} // конец функции

///////////////////////////////////////////////////////////   

int Ready_Serial()

{

// функция возвращает значение, отличное от нуля,

// если есть в буфере есть символы и 0 - в противном случае

return(char_ready);

} // конец функции

///////////////////////////////////////////////////////////

int Serial_Read() {

// функция возвращает последний записанный

//в программный буфер символ

int ch;

// ждем завершения функции обработки прерывания

while(serial_lock){}

// проверяем/ есть ли в символы в буфере

if (ser_end != ser_start)

{

// изменяем значение начальной позиции буфера

if (++ser_start > SERIAL_BUFF_SIZE-1) ser_start = 0;

// читаем символ

ch = ser_buffer[ser_start];

//в буфере стало одним символом меньше

if (char_ready > 0) --char ready;

// возвращаем символ вызвавшей функции

return(ch);

// конец действий, если буфер не пуст

else

// буфер был пуст - возвращаем 0

return(0) ;

}// конец функции /////////////////////////////////

Serial_Write(char ch)

{ // эта функция записывает символ в буфер последовательного порта,

// но вначале она ожидает, пока он освободится.

// Примечание: эта функция не связана с прерываниями-

// и запрещает их на время работы

// ждем освобождения буфера

while(!(_inp(open_port + SER_LSR) 5 0х20)){}

// запрещаем прерывания

_asm cli

// записываем символ в порт

_outp(open_port + SER_THR, ch);

// снова разрешаем прерывания

_asm sti

} // конец функции /////////////////////////////////////

Open_Serial(int port_base, int baud, int configuration)

{

// Функция открывает последовательный порт, устанавливает его

// конфигурацию и разрешает прерывания при получении символа

// запоминаем базовый адрес порта

open_port = port_base;

// сначала устанавливаем скорость работы

// разрешаем загрузку делителя




Начало  Назад  Вперед



Книжный магазин