Realicé la superposición de video en una aplicación que requirió sondeo durante la visualización de datos. Si tiene un FSR de repuesto disponible, inserte:
btfsc INTCONx,RCIF ; I forget which INTCON it's in
movff RCREG,POSTINC2 ; Or whichever FSR is free
al menos una vez cada 16 líneas (puede ser más conveniente hacerlo en cada línea). Sólo tres ciclos por línea. Si no tiene un FSR de repuesto disponible, pero su código de pantalla se expande en lugar de en bucle, entonces al menos una vez cada dieciséis líneas debe usar:
movff INTCONx,SerStatus+N ; N=0 for the first one, 1 for the next, etc.
... and then (not necessarily immediately)
btfsc SerStatus+N
movff RCREG,SerData+N
a un costo de tres ciclos en una línea y dos en otra; al final de la pantalla:
lfsr 0,SerData
btfsc SerStatus+0
movff SerData+0,POSTINC0
btfsc SerStatus+1
movff SerData+1,POSTINC0
btfsc SerStatus+2
movff SerData+2,POSTINC0
...
movlw (SerData & 255)
subwf FSR0L,w
; W will now hold number of bytes received
; Data will be in SerData+0 to SerData+(W-1)
El truco es no preocuparse por averiguar qué hacer con los datos mientras se muestra la pantalla. Simplemente tíralo a algún lugar y resuélvelo más tarde.