Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RenatoWParisotto

Ajuda Comunicação Serial Em C++

Recommended Posts

Tenho um problema de acesso a porta com1, o programa abaixo funciona perfeitamente no windows XP 32 bits, porem em dos 6.22 não acessa a porta, foi compilado em turboc 3.0, CPU AMD Athlon XP 3000+, msdos funciona bem, no comando MODE o dos acessa a porta normalmente, segue o codigo do programa:





#include<stdio.h>

#include<conio.h>

#include<bios.h>

#define SETTINGS (_COM_9600 | _COM_CHR8 | _COM_EVENPARITY | _COM_STOP1) /* baud rate = 9600, 8 data bits, even parity bit, 1 stop bit */



/////////////////////////////////// protótipos///////////////////////////////////

void display(char *, int);



/////////////////////////////////// inicio do programa ///////////////////////////////////

void main(void)

{

unsigned in, out, status, count_in=0, count_out=0;

int port, i;



char msg_in[75], msg_out[75];

textbackground(BLACK);

clrscr();

gotoxy(3, 1);

textcolor(GREEN);



cprintf("Full-Duplex PC para PC Communicação via RS-232 Serial Port usando 'C':Chatting");



gotoxy(7, 3);

textcolor(LIGHTCYAN);



cprintf("Chat entre PCs");



gotoxy(15, 5);

textcolor(LIGHTGRAY);



cprintf("Selecione a Porta (Digite '0' para COM1 ou '1' para COM2) : ");



scanf("%d",&port);

textcolor(LIGHTGRAY + BLINK);



cprintf("\n Pressione ESC para sair, Pressione Enter para enviar a mensagem de saída");



gotoxy(10, 9);

textcolor(MAGENTA + BLINK);

putch(1);



cprintf("-Mensagem de saída");



gotoxy(53, 9);

textcolor(BLUE + BLINK);

putch(1);



cprintf("-Mensagem recebida");



window(10, 11, 70, 23);

textbackground(YELLOW);

clrscr();



/* Exibição da Comunicação */

window(1, 25, 80, 25);

textbackground(BLUE);

textcolor(YELLOW);

clrscr();



/* Entrada de texto */

window(1, 1, 80, 25);

gotoxy(2, 25);

putch(2);

_bios_serialcom(_COM_INIT, port, SETTINGS);

window(4, 25, 80, 25);



///////////////////////////////////inicio do programa principal ///////////////////////////////////



for(; ;)

{

status=_bios_serialcom(_COM_STATUS, port, 0);



if (status & 512)

printf("\n\t\a Overrun Error");



if (status & 1024)

printf("\n\t\a Parity Error");



if (status & 2048)

printf("\n\t\a Framing Error");



if(status & (512|1024|2048)) /* if any error */

break;



if(status & 256) /* if data ready */

{

if((out=_bios_serialcom(_COM_RECEIVE, port, 0) & 255)!=0)

msg_in[count_in++] = out;



if(out=='\r')

{

display(msg_in, BLUE);

count_in=0;

gotoxy(count_out+1, 1);

}

}



if(kbhit()) /* if a keystroke is currently available */

{

gotoxy(count_out+1, 1);

in=getche(); /* get a character by echoing onto the screen */



if(in==27) /* if ESC */

break;



if(in=='\b' && count_out>0)

{

count_out=count_out-2;

cprintf(" \b");

}

else

msg_out[count_out]=in;



if(count_out==74)

{

in='\r';

msg_out[74]='\r';

}



count_out++;



if(in=='\r')

{

display(msg_out, MAGENTA);

for(i=0; i<count_out; i++)

_bios_serialcom(_COM_SEND, port, msg_out);

count_out=0;

clrscr();

}

}

}

}



/////////////////////////////////// funções////////////////////////////////////////////



void display(char arr[75], int COLOR)

{

static int line=1;

int j;



window(10, 11, 70, 23);



gotoxy(1, line);



textcolor(COLOR);



textbackground(YELLOW);



cprintf("\n");



putch(1);



for(j=0; arr[j]!='\r'; j++)

putch(arr[j]);



line=wherey();



window(4, 25, 80, 25);



textcolor(YELLOW);



textbackground(BLUE);

}

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.