User software should ensure the appropriate interrupt bits are clear prior to enabling an interrupt
Imagino que es por eso. Deberias limpiar el Flag de interrupcion: BCF PIR1,RCIF , antes de habilitar la interrupcion general. ( Y salir de la misma )
Y no me convence el codigo xD Por que estas leyendo un flag que siempre esta activo y podrias usar el registro SFR para moverte entre todos los Registros DatosX si los tenes seguidos, me explico:
cada vez que entra por que esta lleno el buffer, entras a la interrupcion,
desactivas interrpcion global,
limpias flag,
guardas en donde apunta SFR (usando el registro INF 00h),
incrementas SFR,
preguntas si llego al limite datoA asi lo haces volver a dato1,
habilitas de nuevo las interrupciones,
salis de interrupcion.
Si necesitas todos los datos si o si, pone una bandera para que el programa principal entre cuando se leyeron los 10 datos y limpia la bandera para comenzar de nuevo
Es lo que haria yo pensandolo un poco. Pero si te anda asi Genial, cada uno con su forma de programar xD..