RESPUESTA A LA PREGUNTA 2715 - ENSAMBLADOR http://www.lawebdelprogramador.com /*Configuracion del puerto serie creo que fueron bajados de internet*/ //Serie.h #include #include #define RXTX 0x3f8 #define DivL 0x3f8 #define DivH 0x3f9 #define IntReg 0x3f9 #define Intid 0x3fa #define FifoCrtl 0x3fa #define LineCrtl 0x3fb #define LineStatus 0x3fd void inicializar() { ioperm(RXTX, 6, 1); outb(0x80, LineCrtl); outb(0, DivH); outb(0x08, DivL); outb(0x3a, LineCrtl); outb(0, IntReg); } void inicializar_9600() { ioperm(RXTX, 6, 1); outb(0x80, LineCrtl); outb(0, DivH); outb(0x0c, DivL); outb(0x3a, LineCrtl); outb(0, IntReg); } void mostrar_error(char dato) { if(dato & 0x80) printf(\"Error en el registro FIFO recibidor\\n\"); if(dato & 0x10) printf(\"Break\\n\"); if(dato & 0x08) printf(\"Error de Framing\\n\"); if(dato & 0x04) printf(\"Error de Paridad\\n\"); if(dato & 0x02) printf(\"Error de Overrun\\n\"); } int rx(char *dato) { char status; status = inb(LineStatus); if(status & 0x9e) return -1; // error else if(status & 0x01) { // llego un dato ? *dato = inb(RXTX); return 1; // dato valido } return 0; // no leyo } void rx_palabra(char *cad) { char dato; int estado; do { estado = rx(&dato); printf(\"%c\", dato); // <- con esta linea veo que si lo recibo //if(estado == 1) { *cad = dato; cad++; //} else if(estado == -1) mostrar_error(dato); //else if (estado == 0) { printf(\"Estado == 0\\n\"); break; } } while(!( estado == 1 && dato == \'\\0\')); // llego un caracter y fue el nulo } void tx(char dato) { while((inb(LineStatus) & 0x40) == 0 /*|| 1*/) usleep(1); // esta libre el shift ? outb(dato, RXTX); } void tx_palabra(char *cad) { do { tx(*cad); printf(\"Caracter: %c\\n\", *cad); cad++; // sig caracter usleep(10); } while(*cad != 0); // puntero al caracter de la palabra } ************************************************************************************/ /*Configuracion del puerto serie HASAN/GEDZAC 2005*/ /*Free ware haz con el lo que se te hinche la gana*/ //Transmite.h #include #include #include\"serie_.h\" //tx int main() { int i; char cadena[100]; inicializar(); while(1) { printf(\"Ingrese la cadena: \"); scanf(\"%s\", cadena); tx_palabra(cadena); } tx_palabra(\"0\"); ioperm(RXTX, 6, 0); return 0; } /**************************************************************************************/ /*Configuracion del puerto serie HASAN/GEDZAC 2005*/ /*Free ware haz con el lo que se te hinche la gana*/ //recibe.c #include #include #include\"serie_.h\" //#include\"viejo/itd.h\" //rx int main() { char palabra[100], status; char dato; int i; inicializar(); while(1) { status = inb(LineStatus); if(status & 0x01) { dato = inb(RXTX); printf(\"Recibimos: %c\", dato); } } ioperm(RXTX, 6, 0); return 0; } alberto gonzalez albertoglz@tutopia.com