UHuh
no te puedo ayudar con c++ solo se un poco assembler
la idea seria algo
como esto ,primero cargas al puntero FSR con la direccion de adonde queres guardar el dato por
ejemplo 22H ,envias el comando al grabador luego se activara la interrupcion por RX ya que el
grabador te devolvera la respuesta ,atiendes la interrupcion y vuelcas el dato de RCREG al
registro INDF ,bueno en assembler sin mucho detalle seria algo como esto...
;**************************************
INTER BTFSS PIR1,RCIF ;compruebas si hubo interrupcion?
GOTO SALE ;sales si no hubo
BCF PIR1,RCIF ;borras el flag
MOVF RCREG,W ;carga el registro INDF con el dato recivido
MOVWF INDF
INCF FSR,F ;incrementas el puntero para la proxima entrada
MOVF FSR,W ;comparas si llegaste al maximo valor del puntero
XORLW 36H ;solo guardas 20 datos
BTFSS STATUS,Z
GOTO SALE ;si no es igual sales
GOTO VER ;si son iguales es decir fin de toma de datos saltas a ver?
SALE CLRF RCREG
RETFIE
;****************************************
;fijate de actualizar el registro de interrupcion y de salvar el registro STATUS y demas
VER MOVLW 22H ;cargas el puntero FSR ;
MOVWF FSR
MOVF INDF,W ;en W tienes el dato que se guardo durante la captura
;asi sigues incrementando el valor del FSR hasta llegar al valor 36H
Lamento no saber mas que assembler ,si te das una vuelta por el Foro apartado Lenguaje en C
seguramente algun forero te pueda ayudar mucho mas
Saludos!