Muy Buenas amigos de todoPIC
Estoy usando un PIC24FJ128GA310.
Nuevamente vengo con preguntas e inquietudes que espero por favor me ayuden a resolver.
En otro foro preguntaba por el protocolos MODBUS, y les comento que tengo un problema o mas bien no se como hacer para recibir la trama que recibo por el UART. La funcion que me permite hacer esto es el siguiente :
void Recibir_Trama_Modbus(){
unsigned int ConRX_1, ConRX_2, Cont;
ConRX_2 = 0x001F;
ConRX_1 = 0x00FF; Cont = 0; Cont_valor_trama = 0;
while (Cont < 256){
if( int2 > 0){
Trama[Cont++] = Dato2;
ConRX_1 = 0x00FF; int2 = 0;
}
ConRX_1--;
if( ConRX_1 == 0 ){ ConRX_1 = 0x00FF; ConRX_2--;
if( ConRX_2 == 0 ){ Trama[Cont] = 0x00; Cont_valor_trama = Cont; Cont = 256; int2 = 0;}
}
}
// for(i=0;i<Cont_valor_trama;i++){ U2(Trama[i]); }
Interpretacion_Trama();
// for(i=0;i<Cont_valor_trama;i++){ Trama[i]=0; }
U2MODEbits.WAKE = 1; U1MODEbits.WAKE = 1;
}
Como se daran cuenta mi trama la recibo en el vector "Trama".
Cuando mando un dato por el UART de inmediato se interrumpe el programa y se va para el siguiente metodo de interrupcion del UART2
void __attribute__ ((interrupt, no_auto_psv)) _U2RXInterrupt(void) {
int2 = 1;
Dato2 = U2RXREG;
IFS1bits.U2RXIF = 0;
}
Ahora bien, tengo una interrpución por desbordamiento del Timer3 en el que tengo lo siguiente:
void __attribute__ ((interrupt, no_auto_psv)) _T3Interrupt(void){
Accion_Alarma();
if( int2 > 0 ){_T3IE = 0; Recibir_Trama_Modbus();}
_T3IF=0;
}
En el que en teoría he de asegurar que siempre este pendiente de que se active la bandera int2 que me ha de indicar que se ha interrumpido por haber recibido un dato por el UART2 y se haga lo correspondiente.
Mi problema reside en que tengo metodos While donde la unica forma de que se salga es q ue se presione un pulsador o una bandera cambie de valor o algo asi, y cuando estoy dentro de ellos, al momento de mandar una trama, solo recibo UN DATO, el ultimo por lo general, por ende mi Trama[] solo contiene un solo valor y de ahi que no pueda interpretar que fue lo que se me fue enviado.
Recalco que esto solo me suecede cuando estoy dentro de un While. Mi interes radica en que no quiero que el programa se salga de esos While sino que haga lo que este especificado en ellos y respondan simultaneamente a la trama recibida.
De antemano Agradeciendoles su atención y pronta respuesta.