Как настроить опрос COM-порта по прерыванию int 14h? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Мне нужно инициализировать сом порт и затем по прерыванию int 14h считывать данные из ком порта. Инициализацию на с++ сделал по простому
#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;
}
(компилятор Турбо С, MS-DOS) (только пока настроена только инициализация и очищение фифо буфера для приема данных и вот есть код на ассемблере с этим прерыванием
.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
как настроить код на с++ по прерыванию int14h? (просто чтение данных из порта, передавать ничего не нужно)

Решение задачи: «Как настроить опрос 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*/

Оцени полезность:

9   голосов , оценка 4.333 из 5