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

         

Запись в последовательный порт


Нам осталось сделать функцию, которая могла бы записывать символы в последовательный порт. Для выполнения этого достаточно записать данные в регистр поддержки передачи. Однако мы должны сделать так, чтобы одновременно выполнялись два условия:

§

Во-первых, ISR не может быть активен;

§          Во-вторых, регистр поддержки передачи должен быть пуст.

Первое условие выполняется как само собой разумеющееся. Однако второе должно быть проверено с помощью пятого бита регистра состояния линии. Если этот бит установлен, передатчик пуст и мы можем послать в порт следующий символ.

Листинг 14.3 содержит программу для передачи символа.

Листинг 14.3. Функция

Serial_Write.

Serial_Write(char ch)

{

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

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

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

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

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

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

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

_asm cli

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

_outp(open_port + SER_THR, ch);

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

_asm sti

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

Обратите внимание на одну хитрость, примененную в функции Serial_Write:

она запрещает прерывания перед записью символа в порт и затем вновь разрешает их.



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