No tienes problemas con los CALL, creo, ya que haces return de cada vez.
No te tienes que preocupar del PCLATH el prgrama solo llega a la posicion 0F3, esto lo puedes ver en el disassembly listing del menu view, de todas maneras con la tabla al principio tampoco los deberias tener. El programa esta muy desordenado y es dificil analizarlo, ya es complicado ver programas hechos por otro y si estan desordenados mas. deberias poner al principio del programa estas directivas:
LIST P=16F84A, ; usar PIC 16F84A
#include <p16f84A.inc>
__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC ; code protec off
; power up timer on
; watchdog off
; oscilador XT
Para no tener que definir tu los SFR y solo definir tus registros.Aqui es este subforo hay un par de programas para hacer esto qe estas haciendo, y finalizados con exito, ademas tienen explicaciones de Brunof, que te aseguro que son muy buenas echales un vistazo. Me gusto mucho tu sistema de envio de datos te lo has currado
Todo este trozo de codigo no lo ejecuta al tener el punto y coma delante lo asume como comentarios.
; incf contador,1
; movf contador,0
; call tabla
; movwf dato
; call enviar_8bits
; ;poner en alto RB6 "habilita septima fila
; bcf portb,6
; bsf porta,2 ;habilita strobe
; movlw .5
; movwf a
;load6 movlw .50
; movwf c
;dec6 decfsz c,1
; goto dec6
; decfsz a,1
; goto load6
; bsf portb,6
; bcf porta,2 ;deshabilita strobe
;cargar 0x90 dato
; incf contador,1
; movf contador,0
; call tabla
; movwf dato
; call enviar_8bits
;poner en alto RB7 "habilita octava fila
; bcf portb,7
; bsf porta,2 ;habilita strobe
; movlw .5
; movwf a
;load7 movlw .50
; movwf c
;dec7 decfsz c,1
; goto dec7
; decfsz a,1
; goto load7
; bsf portb,7
; bcf porta,2 ;deshabilita strobe