Как настроить опрос COM-порта по прерыванию int 14h? - C (СИ)
Формулировка задачи:
Мне нужно инициализировать сом порт и затем по прерыванию int 14h считывать данные из ком порта. Инициализацию на с++ сделал по простому (компилятор Турбо С, MS-DOS) (только пока настроена только инициализация и очищение фифо буфера для приема данных и вот есть код на ассемблере с этим прерыванием как настроить код на с++ по прерыванию int14h? (просто чтение данных из порта, передавать ничего не нужно)
#include <stdio.h> #include <dos.h> int main(void) { unsigned char result; int port = 0x3F8; /* serial port 1 */ result = inportb(port); printf("baza+0 stenie dannyx %c\n",result); outportb(port+3,0x80); /*set dlab on*/ outportb(port+1,0x00); /*starschiy bait scorosti*/ outportb(port+0,0x0C); /*scorosti mlads bait 9600*/ outportb(port+3,0x03);/* set dlab off,8bit,no perity,1 stop bit */ outportb(port+1,0x01); /*preryvanie po priemu*/ inportb(port+3); /*zadergka ignorirovan*/ outportb(port+2,0xC7); /*FIFO registr */ outportb(port+4,0x0b); /*DTR,RTS,OUT2*/ inportb(port+0); /*obnulenie bufera*/ return 0; }
.MODEL tiny .DATA .CODE .386 org 100h START: for_loop: mov dx,0 mov ah,3 int 14h mov dx,3FCh bt ax,4 jb @3 @2: mov al,00001001b jmp @4 @3: mov al,00001011b @4: out dx,al jmp for_loop mov ah,4ch int 21h END START
Решение задачи: «Как настроить опрос COM-порта по прерыванию int 14h?»
textual
Листинг программы
#include <stdio.h> #include <dos.h> int main(void) { unsigned char result; int port = 0x3F8; /* СCOM1 */ int flag=0; printf("Инициализация порта\n"); outportb(port+3,0x80); /*Установка dlab on*/ outportb(port+1,0x00); /*старший байт скорости порта*/ outportb(port+0,0x0C); /*младший байт скорости 9600*/ outportb(port+3,0x03);/* установка режимов работы set dlab off,8bit,no perity,1 stop bit */ outportb(port+1,0x01); /*настраиваем прерывание по приему данных*/ inportb(port+3); /*задержку игнорируем*/ outportb(port+2,0xC7); /*включаем FIFO регистр*/ outportb(port+4,0x0b); /*DTR,RTS,OUT2*/ inportb(port+0); /*обнуления буфера без сохранения*/ while (flag==0) /*включаем прерывание по поcтуплению данных в буфер*/ { result = inportb(port+2); if (result>195) /*Проверяем 4й бит регистра IIR (baza+2)*/ { result = inportb(port); /*если в буфере появился символ считываем его и выводим на экран*/ printf("%c",result); } /*и ждем поступлен ие следующего символа в буфере*/ } /*while*/ /*getch();*/ return 0; } /*main*/
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д