Hola PHLAKO, disculpa la demora,
La interrupcion por transmision serial se activa cuando el buffer de recepcion se llena, es decir, cuando recibe un dato, el microcontrolador pone en alto la bandera RCIF automaticamente para poder identificar el origen de la interrupcion.
Lo que mencionas acerca de la necesidad de llamar a la funcion ReadUSART supongo que se debe a que si no lees el buffer este seguira lleno, lo cual provocaria un llamado constante a la interrupcion convirtiendose asi en un bucle infinito. Te pongo un ejemplo para que entiendas mejor:
#include<p18f4550.h>
#include<delays.h>
#include<usart.h> //Libreria para configurar modulo USART
void int_recepcion(); //Funcion a llamar en la interrupcion
int recepcion;
#pragma code int_alta = 0x08 //INTERRUPCION POR RECEPCION
void int_alta(){
_asm
goto int_recepcion
_endasm
}
#pragma code
#pragma interrupt int_recepcion
void int_recepcion(){ //EN ESTE PUNTO SE ACABA DE RECIBIR UN DATO, EL BUFFER ESTA LLENO
recepcion = ReadUSART(); //LEEMOS EL CONTENIDO DEL BUFFER PARA LIMPIARLO AUTOMATICAMENTE
PIR1bits.RCIF = 0; //APAGAMOS LA BANDERA PARA PERMITIR UNA FUTURA INTERRUPCION
}
void main(){
TRISC = 192; //PUERTO DE TRANSMISION
INTCONbits.GIE=1; RCONbits.IPEN = 1;//HABILITAR INTERRUPCIONES Y PRIORIDAD
INTCONbits.PEIE = 1; //INTERRUPCIONES POR PERIFERICOS (usart)
IPR1bits.RCIP=1; //PRIORIDAD INT RECEPCION
OpenUSART(USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,25); //CONFIGURA MODULO USART
PIE1bits.RCIE = 1; //HABILITA INT RECEPCION
while(1){
//ACA PUEDES OPERAR LA VARIABLE GLOBAL 'recepcion' QUE SE ALTERA POR MEDIO DE LA INTERRUPCION...
mostrar(); //POR EJEMPLO LLAMAR UNA FUNCION QUE ME MUESTRE EL DATO RECIBIDO EN UNA LCD... O ALGO ASI
}
}
Bueno, pues esa es la estructura basica del programa, la funcion mostrar no la coloque pues requiere que configuremos la pantalla LCD... etc etc... pero en esencia el programa lo que hace es estar atento a la recepcion y cuando algun dato llegue asignarselo a la variable 'recepcion'.
Espero que te sea util, cualquier duda posteala e intentare responderte,
Hasta Luego