JAJA NO SE QUE PASO NO TERMINABA DE REDACTAR MI EXPLICACION SIN QUERER PRESIONE UN TECLA Y SE SUBIO MI RESPUESTA SIN ESTAR TERMINADA AQUI AHORA SI LA DEJO TERMINADA
OJO MIRA....
me supongo que sabes como funciona una tabla, una tabla funciona direccionando el control del programa por medio del contador de programa.
EL CONTADOR DE PROGRAMA COMPLETO EN ESTE PIC CONSTA DE 14 BITS, la parte baja es PCL con la cual puedes direccionar los primeros 8 bits de dicho CONTADOR DE PROGRAMA, de tal manera que si tu tabla se localiza dentro de los primeras 255 lineas de codigo es totalmente valido que borres el direccionamiento de la parte alta que estan en las instrucciones DE TU CODIGO:
movlw HIGH primo y movwf PCLATH
perooo si la tabla se encuentra ubicada mas alla de las primeras 255 lineas entonces el diseñador se ve obligado a cargar la parte alta del CONTADOR DE PROGRAMA PCLATH.
MIRA que sucederia si no lo hacemos, mira suponiendo que la direccion de la instruccion en la MEMORIA DE PROGRAMA se encuentra en el lado derecho de la lista.
DIRECCION CODIGO
PROGRAMA ; borramos las lineas de direccionamiento
; de PCLATH que es la parte alta del PC
0X202 movlw 5 ;W=5
0X203 call primo ;
0X204 primo: ;
0X204 addwf PCL,F; ;PCL=W+F suponiendo que F=0
0X205 retlw 1;
0X206 retlw 2;
0X207 retlw 3;
0X208 retlw 5;
0X209 retlw 7;
0X210 retlw 11; ;el programa DEBERIA BRINCAR AQUI
0X211 retlw 13; ;pero no lo hace por que solo cargamos
0X212 retlw 17; ;PCL y no se direcciono PCLATH de tal
;manera que el codigo en vez de
;direccionar la instruccion 0x210 brincara
;a lo que halla en la direccion por ejemplo
;la 0x010 o la 0x110 dependiendo el ultimo
;valor cargado en PCLATH es por
;eso que hay que ponerle ese 2 en la parte
;alta del PC
DIRECCION CODIGO
0X200 movlw HIGH primo ;A diferencia del codigo anterior
0X201 movwf PCLATH ;este si usa PCLATH y lo hace
0X202 movlw 5; ;pasando la parte alta de primo.
0X203 call primo; ;si vemos, primo esta en la 0x204
;y le estamos metiendo ese 2
; a PCLATH tal y como lo necesita.
0X204 primo: ;movlw carga W con una literal K
0X205 addwf PCL,F; ;(un valor directo),al ser una
0X206 retlw 1; ;etiqueta, entonces se cargara
0X207 retlw 2; ;su direccion directamente pero
0X208 retlw 3; ;con HIGH solo cargamos la
0X209 retlw 5; ;parte alta que es el 2.
0X210 retlw 7;
0X211 retlw 11; ;en este caso el codigo si brincara
0X1FF retlw 13; ;correctamente a esta posicion
0X1FF retlw 17;
espero halla quedado claro, yo en lo personal te recomiendo que siempre carges PCLATH aunque no superes las 255 localidades de memoria, no importa por que simplemente lo cargarias con CERO en dado caso, y de esta forma te olvidas se especulaciones de que si la tabla esta mas alla de 255 o mas para aca.
ALGO BIEN INTERESANTE Y UNA DUDA QUE LES DEJO POR AKI ES ¿QUE SUCEDERIA SI A LA MITAD DE LA TABLA EXISTE UNA TRANSICION DE LA PARTE ALTA DEL PC POR EJEMPLO UN 0x2FF Y EN EL VALOR SIGUIENTE DE LA TABLA TE ENCUENTRES QUE LA INSTRUCCION OCUPA EL 0x300 COMO DIRECCIONO LOS DOS PCLATH EN LA MISMA TABLA?
BUENO ME DESPIDO SALUDOS DESDE ORIZABA Y OJALA TE HALLA SERVIDO MI AYUDA, SI TE SIRVIO NO ME ENOJO SI ME RESPONDES CON SOLO DAR LAS GRACIAS..
ATTE: ALEJANDRO
SALUDOS DESDE ORIZABA, VERACRUZ. MEXICO