//----------FUNCION PARA PUERTO SERIAL--------------------- //ESTA FUNCION ESPERA UN CARACTER DEL PUERTO SERIAL //DURANTE UN LAPSO "timeout". SI NO HAY CARACTER EN EL BUFFER //DE RECEPCION REGRESA DE LA FUNCION. SI HAY ALGUN CARACTER //LA FUNCION TOMA EL VALOR DE ESE CARACTER. char timed_getc() { long timeout; timeout=0; while(!kbhit()&&(++timeout<21000)) // 100 milisegundos delay_us(10); if(kbhit()) //¿hay caracter en buffer? return(getc()); else { return(0); } } //-------FUNCION PARA PUERTO SERIAL------------------------ //RECIBE HASTA 5 CARACTERES ASCII DEL PUERTO SERIAL, //TERMINADOS CON UN "CR" Y ENVIA ECO POR CADA UNO DE ELLOS //ACOMODA LOS CARACTERES EN UN ARREGLO CON FORMATO DE STRING //EN EL PROGRAMA PRINCIPAL, DEBE DEFINIRSE ANTES UN ARREGLO //CON CUALQUIER NOMBRE (por ejemplo "array"), DE 6 ELEMENTOS, //PARA LLAMAR A LA FUNCION: //RCVECO(&array); RCVECO(int *x) { char a; for(a=0;a<7;a++) //RECIBE NUMERO TERMINA CON "CR" {*(x+a)=getchar(); if (*(x+a)==13)goto wo; //13="CR" putchar(*(x+a));} wo: *(x+a)=0; //caracter null } //como activar y desactivar el puerto serial: //repite: //******************************************************************* //TRISA=0; //ESTAS LINEAS ACTIVAN PUERTO SERIAL //TRISB=0xFF; //SPEN=1; //.... AQUI SIGUE PROGRAMA QUE USA EL PUERTO SERIAL //******************************************************************* //SPEN=0; //DESACTIVA PUERTO SERIAL //TRISB=0; //PUEDE USARSE EL LCD LIBREMENTE //Y LOS LEDS DEL PUERTO B //.... AQUI SIGUE PROGRAMA QUE USA EL LCD Y LOS LEDS //******************************************************************* //CREN=0; //PREPARA REACTIVACION DEL PUERTO SERIAL //CREN=1; //EXPRESIONES NECESARIAS PARA VOLVER //z=RCREG; //A USAR EL PUERTO. LA VARIABLE z PUEDE //z=RCREG; //SER CUALQUIERA Y SOLO SIRVE PARA //z=RCREG; //DESCARGAR EL BUFFER DE RECEPCION RCREG //******************************************************************* //goto repite;