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
}
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
0