Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
13/04/2006 #1


Duda básica con código
Tengo el siguiente código para PIC16F84:

Código:
movlw HIGH primo;
movwf PCLATH;
movlw 5;
call primo;

primo:
addwf PCL,F;
retlw 1;
retlw 2;
retlw 3;
retlw 5;
retlw 7;
retlw 11;
retlw 13;
retlw 17;
Mi duda esta en:

¿Qué función tienen las instrucciones movlw HICH primo y movwf PCLATH? ¿Funcionaría

correctamente el programa sin estas instrucciones?¿Bajo que condiciones?

Gracias, espero sus respuestas.
14/04/2006 #2


No estoy seguro, pero supongo que esto es solo un fragmento del codigo, siendo asi
cargar el pclath es necesario ya que este contiene la parte alta del contador de programa es decir el numero que contenga el pcl + pclath sera la posicion de memoria donde ira el apuntador del micro a extraer las instrucciones, en este caso la mayoria de las veces llamamos a una tabla desentendiendonos del pclath, pero esto solo funciona si te encuentras en la primera pagina , osea los primeros 255 posiciones de memoria (8 bits del pcl) cuando estas en una pagina diferente el pclath debera aumentarse ( ya que no se incrementa en forma automatica en las gama baja y media ) para que el contador de programa no se pierda.



ok
14/04/2006 #3


Ok, gracias por la información. Ademas de tu información, me puse a buscar por la red. Y al final las respuestas a mis preguntas me quedaron asi:

1-Obtiene la parte alta de la dirección de la subrutina asignada, en nuestro caso “primo” y la guarda en PCLATH.

2-No funcionaria bien, porque debemos tener en cuenta que el PC (Program Counter) esta formado por 13 bits, del 0 al 7 corresponden a PCL(parte baja del PC)y del 8 al 12 corresponden a PCLATH(parte alta del PC) y puesto que saltamos a una tabla, a través de una subrutina, es necesario el valor de PCLATH para volver de ella y que el PC pueda apuntar a la siguiente instrucción.

3-En caso de no ser así las condiciones de funcionamiento no serían las mismas al volver de la tabla para el PC

Creo que son todas correctas no?

PD: Como bien decias, si es parte de otro código
15/04/2006 #4


shakaran dijo:
2-No funcionaria bien, porque debemos tener en cuenta que el PC (Program Counter) esta formado por 13 bits, del 0 al 7 corresponden a PCL(parte baja del PC)y del 8 al 12 corresponden a PCLATH(parte alta del PC) y puesto que saltamos a una tabla, a través de una subrutina, es necesario el valor de PCLATH para volver de ella y que el PC pueda apuntar a la siguiente instrucción.
shakaran no se si entendí bien pero a mi modo de verlo ese código precisamente usa los 13 bits y sí funcionaría correctamente.

Saludos
15/04/2006 #5


Claro, estoy de acuerdo contigo, ese código si funciona bien para los 13 bits. Pero la pregunta tiene sentido inverso, es decir, "¿Funcionaria correctamente si prescindieramos de ese codigo?".

Saludos
17/04/2006 #6


shakaran dijo:
Claro, estoy de acuerdo contigo, ese código si funciona bien para los 13 bits. Pero la pregunta tiene sentido inverso, es decir, "¿Funcionaria correctamente si prescindieramos de ese codigo?".

Saludos
Y no, no funcionaria... es que si prescindis de ese código estas obviando como funciona el Program Counter del PIC

Solo sería válido si el código está dentro de la misma página y si el PCLATH está apuntando a dicha página!

Recordar que el PCLATH se puede grabar a mano y realmente el Program Counter lo tendrá en cuenta con un call o un goto.

Puedes estar en el RomBank0 , la tabla estar en el RomBank0 y aun así el código no funcionaría si el PCLATH apunta a otro RomBank.

No se si quedó claro.

Saludos
17/04/2006 #7


Oks, perfectamente muchas gracias
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.