C/Visual C - Solo 8 caracteres por linea

 
Vista:
sin imagen de perfil

Solo 8 caracteres por linea

Publicado por rekordobes (2 intervenciones) el 05/12/2008 21:29:45
Hola, buenas tardes amigos
Tengo un problema al querer transmitir e imprimir un array, e creado un pequeño programita para transmitir datos via puerto serie(un chat entre dos maquinas) lo que ocurre es que cuando la maquina receptora recive el mensaje me imprime solo ocho caracteres en una misma linea luego ejecuta un salto de linea imprime otros ocho y asi dependiendo del largo del mensaje. les paso el codigo que es muy sencillo para ver si me pueden ayudar, desde ya muchisimas gracias y suerte a todos.
Pdta: perdon por la falta de acentos, se me a desconfigurado el teclado, prometo arreglarlo para la proxima ; )

Ejemplo de impresion en pantalla:
hola ami
gos, bien
venidos

#include <stdio.h>
#include <conio.h>

#define ENTER 13
#define ESCAPE 27

/*Definimos el puerto serie COM1*/
#define PUERTO 0x3F8
#define LONG_MAX 1000

/*La funcion inicializar se encarga de enviar todos los parametros necesarios para inicializar el puerto*/
void inicializar();

/*Inicio del programa*/
void main(void)
{

char tecla;
int pos = 0;
int i = 0;
char mensaje[LONG_MAX];

clrscr();
inicializar();//llamamos a la funcion inicializar para que prepare el puerto

while (tecla != ESCAPE)//Mientras no presionemos escape para salir del programa
{
if (inportb(PUERTO+5)&1)
{
textcolor(LIGHTRED);
for (i=0;((inportb(PUERTO+5)&1)); i++)
{
cprintf("%c",inportb(PUERTO));
}
printf(" ");
}

textcolor(LIGHTGREEN);
if (kbhit())//preguntamos si se presiono alguna tecla
{
tecla = getch();

if (tecla!=ESCAPE && tecla!=8 )//preguntamos si es distinto de escape
{
if (tecla==ENTER)//preguntamos si la tecla presionada es un enter
{
mensaje[pos] = tecla;
printf(" ");
i = 0;
while(mensaje[i]!= ENTER && i < LONG_MAX)
{
outportb(PUERTO,mensaje[i]);//enviamos la cadena, letra por letra, al puerto
i++;
}
pos=0;

}
else
{
mensaje[pos] = tecla; //guardamos la tecla presionada
cprintf("%c",mensaje[pos]); //imprimimos el caracter
++pos;
}
}
}
}
}

void inicializar()
{
outportb(PUERTO+1,0);// Turn off interrupts - Port1
outportb(PUERTO+3,0x80);//SET DLAB ON
outportb(PUERTO+0,0x0C);// 9,600 BPS
outportb(PUERTO+1,0x00);//Set Baud rate - Divisor Latch High Byte
outportb(PUERTO+3,0x03);// 8 Bits, No Parity, 1 Stop Bit
outportb(PUERTO+2,0XC7);//FIFO Control Register
outportb(PUERTO+4,0X0B);//Turn on DTR, RTS, and OUT2
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Solo 8 caracteres por linea

Publicado por Tom (619 intervenciones) el 09/12/2008 22:43:35
No te preocupes por lo de los acentos, con las faltas de ortografía casi ni se nota XD

Creo que tu problema podría estar aquí:

outportb(PUERTO+4,0X0B);//Turn on DTR, RTS, and OUT2

Parece que pones un valor (OUT2) que puede valer si has acivado las interrupciones, pero no cuando las has desactivado.

No recuerdo muy bien estas cosas, pero prueba a poner 0x03 en lugar de 0x0B.
Y, ajusta el FIFO después de haber hecho esto, no antes.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar