Hola a todos!!! Gracias redpic , eso no lo habia tenido en cuenta, ahora tengo una pregunta es posible recibir por un canal a una velocidad y transmitir por otro a otra velocidad:
por ejemplo :
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,STREAM=CANAL1) // RS232 Estándar
#use rs232(baud=4800, xmit=PIN_B4, rcv=PIN_B5,STREAM=CANAL2)
// CONSTANTES /////////////////////////////////////////////////////////////////
int const lenbuff=70; // Longitud de buffer, Ajustar
// a lo que desees (o te sea posible)
// VARIABLES EN RAM ///////////////////////////////////////////////////////////
int xbuff=0x00; // Índice: siguiente char en cbuff
char cbuff[lenbuff]; // Buffer
char rcvchar=0x00; // último caracter recibido
int1 flagcommand=0; // Flag para indicar comando disponible
// Declaración de Funciones ///////////////////////////////////////////////////
void inicbuff(void); // Borra buffer
int addcbuff(char c); // añade caracter recibido al buffer
void echos(char c); // Eco selectivo sobre RS232
void procesa_comando(void); // Procesa comando
// INTERRUPCIONES /////////////////////////////////////////////////////////////
#int_rda
void serial_isr() { // Interrupción recepción serie USART
rcvchar=0x00; // Inicializo caracter recibido
if(kbhit()){ // Si hay algo pendiente de recibir ...
rcvchar=fgetc(canal1); // lo descargo y ...
addcbuff(rcvchar); // lo añado al buffer y ...
}
}
// Desarrollo de Funciones ////////////////////////////////////////////////////
int addcbuff(char c){ // Añade a cbuff -----------------------
switch(c){
case 0x03: // Enter -> Habilita Flag para procesar
flagcommand=1; // Comando en Main
break;
default:
cbuff[xbuff++]=c; // Añade caracter recibido al Buffer
}
}
void inicbuff(void){ // Inicia a \0 cbuff -------------------
int i;
for(i=0;i<lenbuff;i++){ // Bucle que pone a 0 todos los
cbuff=0x00; // caracteres en el buffer
}
xbuff=0x00; // Inicializo el indice de siguiente
// caracter
}
// Programa Principal /////////////////////////////////////////////////////////
void main() {
fprintf(canal2,"\r\n\** prueba buffer **\r\n\r\n"); // Presenta menú
enable_interrupts(int_rda); // Habilita Interrupción RDA //// declaramos el puerto B como salidas
enable_interrupts(global); // Habilita interrupciones
do {
if(flagcommand){
procesa_comando(); // Si hay comando pendiente de procesar ... lo procesa.
//printf("..\r"); // printf CR
}} while (TRUE);
SLEEP();
}
// Procesador de Comandos /////////////////////////////////////////////////////
void procesa_comando(void){
int i, j;
char salida[lenbuff]; // Argumento de comando (si lo tiene)
disable_interrupts(int_rda);
flagcommand=0; // Desactivo flag de comando pendiente.
j=0;
for (i=0;i<xbuff;i++){
if (cbuff == '')
while((cbuff != 0x4A) & (i<xbuff))
{
salida[j++]=cbuff[i++];
fprintf (canal2,"%c",salida[j-1]); // Monitorizamos el argunmento.
}
i++;
}
inicbuff(); // Borro buffer.
for(i=0;i<lenbuff;i++){ // Bucle que pone a 0 todos los
salida=0x00; // caracteres en el argumento
}
enable_interrupts(int_rda);
}
muchas gracias
saludos