TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: todopic en 26 de Julio de 2002, 21:35:00

Título: paginas del F84 (PicListLatina)
Publicado por: todopic en 26 de Julio de 2002, 21:35:00
Esto es de un email de la piclislatina
Cada pagina de memoria de programa tiene 255 posiciones o sea H"FF" en el caso
del 16F84A se tienen cuatro paginas, pues solo tiene 1023 posiciones o sea 1K de
memoria de programa.
 
Primera pagina     H"000" ~ H"0FF"
Segunda pagina   H"100" ~ H"1FF"
Tercera pagina     H"200" ~ H"2FF"
Cuarta pagina      H"300" ~ H"3FF"
 
Si quieres poner la parte la tabla en la parte alta de la primera pagina, entiendo que
es el comienzo, o sea desde el inicio de la segunda pagina.
Con la directiva ORG le indicas al ensamblador en donde quieres poner el codigo, en el
caso de la tabla seria:
 
    ORG H"100"
Tabla  addwf   PCL,F
            DT         literales,..,..,

Si tienes que saber en que dirección estas, eso es facil, solo tienes que leer los
registros PCL y PCLATH el primero es la parte baja del contador de programa
el segundo es la parte alta.
Si tu preocupacion es por un call o goto, no te hagás problemas ya que estos manejan
todo el rango de memoria RAM del 16F84A, en otros pics es diferente y hay que
leer las hojas de datos primero, en donde se complica es cuando lo haces con
mnemonicos que tienen como destino la modificación directa del registro PCL,
como en las tablas con addwf PCL,F en estos casos si tienes que tener en cuenta
y cargar a mano el registro PCLATH, para esto exiten dos directivas al ensamblador:
 
    movlw    HIGH Tabla
    movwf   PCLATH
    movf      Valor,W      ;El registro Valor tiene el valor pasado a la tabla
    addwf    PCL,F
    DT          literales,..,..,
 
La directiva LOW devuelve la parte baja del contador de programa "8 bits"
y la directiva HIGH devuelve la parte alta del contador de programa, o sea
lo que va en el registro PCLATH. También exite la directiva $ que significa el
lugar actual o sea la dirección en donde está el mnemonico, te doy un ejemplo
que utilizo mucho para no poner etiquetas.
 
    btfsc  PULSADOR      ;¿Se liberó el pulsador?
   goto    $ - 1               ;No, vuelve desde el lugar actual menos 1 o sea a btfsc PULSADOR
 
   Otro caso podria ser mover la parte alta del lugar actual, esto se haria con:
   molw    HIGH $
   o tambien 2 direcciones más relativo al lugar en donde se está, esto es muy utilizado!!
   movlw  HIGH $ + 2  
 
También exiten dos directivas mas al ensamblador que trabajan en forma similar
estas son para manejar codigos relocalizables (MPLINK), pero también andan en
codigo absoluto, estas son, Pagesel y Pageselw la primera retoca solo los bits del registro
PCLATH la segunda lo carga completo como con movlw  HIGH Tabla, ejemplo :
 
    Pagesel Tabla
o
   Pageselw Tabla
 


Nestor A. Marchesini
Chajari-Entre Rios-Argentina
ICQ # 50983752 nick colo
nestorm@bitbyte.com.ar
http://www.deselectronica.com.ar

Título: RE: paginas del F84 (PicListLatina)
Publicado por: valtasarr en 02 de Mayo de 2004, 15:36:00
Ya muy interesante esto aclara un poco mis dudas y sobre todo mi problema ahora bien, como hago yo para hacer un call o un goto a una etiqueta que por cantidad de codigo a sido situada en otra pagina? Es un 16F877. El Mplab me da el error de "Crossin page boundary,Ensure that bits are set" que parece ser que hay que poner no se que para que la llamada sea posible a esa direccion del programa. Para ello parece que hay las instrucciones lcall y lgoto y entiendo que con esto el Mplap pone esos bits. Haciendo esto el mensaje del Mplab ya no es el mismo y me dice que Setting page bits. Pero el resultado es el mismo, todo va bien asta que se hace la llamada y hay es cuando se va todo al carajo el pic se vuelve loco, hace lo que le dala gana y se resetea volviendo al inicio. Es cierto que en esa etiqueta se vuelve a llamar a rutinas de la pagina cero, sera que hay que volver a poner esos bits , cual sera el valor de esos bits? Por favor si alguien tiene un ejemplo de esto que me lo pase porfa que estoy parao, llevo una semana que no puedo crear y es que lo que mas me gusta de estos chismes es eso la opcion de la creatividad para realizar cualquier tonteria. Poder crear.
Título: RE: paginas del F84 (PicListLatina)
Publicado por: MGLSOFT en 03 de Mayo de 2004, 06:04:00
Esno es un mensaje de error, es una advertencia, si miras bien dice Warning, antes del mensaje...
Puedes compilar sin problemas...
Título: RE: paginas del F84 (PicListLatina)
Publicado por: valtasarr en 03 de Mayo de 2004, 09:17:00
No se si esatre haciendo mal pero por lo menos a mi lo que pone es mensaje no warning. Ahora no me acuerdo pero tiene numero y todo y creo que es el 307 o 306, bueno el caso es que es un mensaje el cual no indica en si un error sino que tenga el guenta los bits de pagina  y ese es mi problema que no se usarlos, ni entiendo muy bien para que sirven.
Título: RE: paginas del F84 (PicListLatina)
Publicado por: FirmSoft en 09 de Octubre de 2004, 22:39:00
   puede ser que de todo esto haya entendido algo... estoy con un programa para un pic F877... el programa es extenso, pesa unos 6K y la memoria total del pic es de 8k... ahora bien, yo hice rutinas y llamadas a las mismas, pero en ningun lugar le especifico el banco donde se encuentra... compilo y  me tira 0  errores y 89 warning... pregunta... ES NECESARIO ESPECIFICAR EL BANCO PARA QUE BUSQUE UNA RUTINA????.... EL MPLAB LO HACE AUTOMATICAMENTE???... PORQUE LOS PIC NO SON COMO LOS MOTOROLA... EN LOS MOTOROLAS NO EXISTEN BANCOS, ES TODO DE CORRIDO... Espero me hayan entendido, Gracias por las respuestas futuras  
Título: RE: paginas del F84 (PicListLatina)
Publicado por: Elena2000 en 13 de Octubre de 2004, 06:07:00
Hola Jonnyman,

Mira, haciendo un resumen muuuuuy resumen, la diferencia principal entre un microprocesador motorola y un pic es su arquitectura:

MOTOROLA: basados en arquitectura Von-Neuman
* Programa y datos son almacenados en la misma memoria principal. Es decir, los datos, programa, E/S, timers comparten el mismo espacio de memoria.
* Tienen un único bus de datos.

PICS de MICROCHIP: basados en arquitectura Harvard
* Bus de datos y bus de instrucciones separados.
* Direccionamiento separado para datos e instrucciones

Título: RE: paginas del F84 (PicListLatina)
Publicado por: PWRINVITRO en 14 de Octubre de 2004, 10:52:00
SALUDOS!!... es cierto q el 877 tienen 8k de memoria de programa, pero dividida en 4 paginas... lo q hace muy engorroso la programacion de software mayores a 2k ya q cada pagina es de ese tamaño, las paginas son la 0,1,2 y 3, lamentablemente el 877 no direcciona directamente a las paginas 1,2 o 3 hay q setear unos bits que tiene el pclatch para poder cabiarse de pagina lo q lo hace mas engorroso aun.... pero hay una forma muy sencilla de conseguir el acceso a estas paginas, es importante saber que si una rutina esta an la pagina 2 y es llamada de la pagina 0 culakiera otra q no sea la pagina donde la ruitna se encuentra el micro se reiniciara o no arrancara... lo que yo hago es colocar las rutinas mas largas y las tablas en la pagina 1,2,3 segun necesite espacio, y tratar en lo maximo q el cuepro principal del programa y las rutinas mas usadas tales los retardos y dato y control de la lcd en la pagina 0... para colocar las rutinas en una pagina selecionada lo haces con la directiva ORG XXXXH las X representan el inicio de la pagina y debajo de eso colocas lo q kieras de esa manera ya estas poniendo el codigo en el lugar q kieres... ahora el problema esta en q si yamas a una rutina que se encuentra en la pagina 2 por ejemplo es dificil determinar en dodne se encuetra para cambiarte de pagina y ademas de eso esa posicion va estar variando segun vayas programando asi q hay 2 instrucciones muy comodas q hacen todo el trabajo que son PAGESEL y LCALL....
PAGESEL(SELECIONA PAGINA)
LCALL(LONG CALL O LLAMADO LARGO)
ejemplo:

voy a llamar una rutina que no esta en pagina 0  desde la pagina 0, tampoco se donde esta ubicada la rutina, la rutina se llama EJEMPLO
PAGINA 0

                   PAGESEL        EJEMPLO
                   LCALL            EJEMPLO
                   ;continua progrmanando


ORG       XXXXH;(COLOCA LAS RUTINAS EN OTRA PAGINA)

RUTINA
....
....
.....
RETURN


RUTINA
.....
...
RETURN

EJEMPLO    MOVLW          "H";carga el ascii de H en el acumulador
                  RETURN
espero te ayude!!!!!!!!!!!!


Título: RE: paginas del F84 (PicListLatina)
Publicado por: MGLSOFT en 14 de Octubre de 2004, 15:44:00
Sino te encuentras comodo con nuestros amados PICs, te recomiendo la linea 18Fxxx que tiene el sistema de pagina unica de MotorHola.

Estuve a punto de escribir Chotorola, je..je..
Título: RE: paginas del F84 (PicListLatina)
Publicado por: FirmSoft en 15 de Octubre de 2004, 15:54:00
   Muchas gracias por esas respuestas... son de inmensa ayuda ... ahora una pregunta, decias:

muy comodas q hacen todo el trabajo que son PAGESEL y LCALL....

Esas instrucciones, porque no estan en el repertorio de instrucciones del PIC??? ... programo el F877 y ahora entiendo porque mi problema en un programa de 6 k de memoria... al parecer es el tema de que las rutinas que tengo estan en lugares diferentes... lo voy a solucionar usando lo que me has otorgado, pero la duda es esa... dime... las instrucciones PAGESEL y LCALL funcionarian en cualquier PIC??? ... Gracias por la respuesta y Saludos!
Título: RE: paginas del F84 (PicListLatina)
Publicado por: PWRINVITRO en 15 de Octubre de 2004, 19:48:00
Bueno lo q pasa es que en realidad no son instrucciones... son directivas que generan un codigo preprogramado osea una rutina q hace el cambio de pagina tal cual si tu programaras esa rutina y la yamaras a cada rato.... asi como esas hay muchisimas estan las directivas banksel, bankisel, if, then , else, code, udata, idata, tambien estan las directivas para los macros!!!! y otras mas..  y por supuesto q todas funcionan con todos los PIC´s de todas las series... un detaye q se me paso con el 877 a veces la directiva LCALL se pega no en todos los casos pero si esto sucede no lo uses... solo pon un CALL normal!!!!.....
Título: RE: paginas del F84 (PicListLatina)
Publicado por: FirmSoft en 16 de Octubre de 2004, 07:49:00
   Muchisisimas gracias hombre "x" ... no tienes nick que te identifique o no veo cuan sea ... ahora una preguntita mas para rematar con todo... Decias:

asi como esas hay muchisimas estan las directivas banksel, bankisel, if, then , else, code, udata, idata, tambien estan las directivas para los macros!!!! y otras mas..

Existe algun documento que aclare y muestre todas las directivas existentes para PICs... si no entendi mal, esas son directivas del MPASM... corrigeme si me equivoco... Esas directivas, explicadas y detalladas, existen en algun documento... tu como las conociste?.. si conoces alguna web que contenga la info, podrias compartirla conmigo... Desde ya muuuuchisimas gracias y un abrazo desde Arg. Entre Rios! ... GRACIAS CHAMIGO!
Título: RE: paginas del F84 (PicListLatina)
Publicado por: PWRINVITRO en 16 de Octubre de 2004, 10:05:00
OK.... bueno me contenta que te haya servido mi ayuda.... si son directivas del mpasm y te voy a enviar el documento en un mensaje privado ya q he intentado subir varios archivitos muy utiles y hasta ahora no he podido pórq me dice q no tengo espacio y los archivos son menores a 100k.... por cierto mi nick en PWRINVITRO lo q pasa es q segun me explico TODOPIC tienen un problema con los nuevos usuarios y no aparece el nick... la verdad yo ni cuenta me habia dado.... de todas maneras en mi firma dice mi nick tambien!!!    SUERTE!!!!
Título: RE: paginas del F84 (PicListLatina)
Publicado por: FirmSoft en 16 de Octubre de 2004, 10:58:00
Ahh!!... pense que te habias puesto un nock sin texto ... Agradesco toda tu ayuda y esperare ansioso el documento que mensionas... Quisiera invitarte a que veas unos posts nuevos que he publicado en el foro... son algunas dudas que tengo con respecto a codigo... talves tengas las respuestas a varias de mis preguntas... Gracias nuevamente y Saludos!
Título: RE: paginas del F84 (PicListLatina)
Publicado por: batmand en 03 de Diciembre de 2004, 07:38:00
Hola a todos, soy bastante nuevo en esto, pero me parecio muy util esto de tener las directivas que comentan explicadas, por eso me gustaria si alguien puede enviarme ese archivo al que hace referencia PWRINVITRO, necesito leer todo lo que haya sobre pics e instrucciones para avanzar un poco.

Gracias de antemano.
Pueden enviarmelo al correo privado o a djjgalizia@yahoo.com.ar

Saludos
Dalocorio
Título: RE: paginas del F84 (PicListLatina)
Publicado por: FirmSoft en 26 de Diciembre de 2004, 20:52:00
   Hola Dario, te envie el archivo a tu correo. Saludos y Felices Fiestas!!! PayasoRebotadoNavidadmuñeco de nieveFumador
Título: RE: paginas del F84 (PicListLatina)
Publicado por: FirmSoft en 04 de Enero de 2005, 00:06:00
   Porque en Mplab me sale un mensaje avisando que no se puede reemplazar la macro PAGESEL por el codigo correspondiente???... intento solucionar un problema de paginas y tablas en un PIC16F84A.. Alguien puede darme una manito?.. Gracias y Saludos! Payaso
Título: RE: paginas del F84 (PicListLatina)
Publicado por: todopic en 04 de Enero de 2005, 06:26:00
Hola, para los que buscan las directivas, está este manual    o este otro....

Suerte! Rebotado

Norberto
Título: RE: paginas del F84 (PicListLatina)
Publicado por: FirmSoft en 04 de Enero de 2005, 15:35:00
   No es un error, es un aviso que dice que no puede reemplazar la directiva por su codigo correspondiente... es devido a que programo un F84A ??? ... como puedo reemplazar lo del pageset para saltar a la direccion 0x100 donde tengo 2 tablas que deben retornar un valor ?. Gracias y Saludos! Payaso
Título: RE: paginas del F84 (PicListLatina)
Publicado por: ale_x_bal en 03 de Diciembre de 2005, 08:44:00
Hola soy un nuevo Usuario, yo tambien recien estoy conociendo al pic , pero en verdad ya sabia hace muchos años de el, no se si tu pudieras tambien enviarme a mi correo esos archivos, yo tambien conosco las intruccion pero no habia escuchado nunca de los que tu dices ... mi correo es :
ale_x_bal@hotmail.com

Muchas Gracias
Título: RE: paginas del F84 (PicListLatina)
Publicado por: maunix en 05 de Diciembre de 2005, 19:14:00
Escrito originalmente por todopic
Esto es de un email de la piclislatina
Cada pagina de memoria de programa tiene 255 posiciones o sea H"FF" en el caso
del 16F84A se tienen cuatro paginas, pues solo tiene 1023 posiciones o sea 1K de
memoria de programa.



Quiero hacer aquí una corrección ya que puede generar confusión con algún novato.

Cada página de datos tiene 2048 posiciones, es decir 2K.  
Hay algunos pics que tienen 1024 posiciones, es decir 1K. de 0h a 03FFh, pero esto sería media página.

No se porqué mencionas lo de 0xff... además si tomas de 0 a ff tienes 256 valores, pero esto de ninguna manera compone una página.  Una página,  o ROM BANK (así le llama microchip) es de 2048 bytes.

En los PIC16F,  las RAMBANK, o los bancos de memoria RAM,  son de un máximo de 128 bytes (cabe la aclaración ya que de acuerdo al pic del cual estemos hablando tal vez no tenga la página completa).  Pueden tener hasta 4 páginas de Ram, como es el caso del PIC16F876 y PIC16F877 solo por citar un par de ejemplos.

Título: RE: paginas del F84 (PicListLatina)
Publicado por: maunix en 05 de Diciembre de 2005, 19:21:00
Escrito originalmente por valtasarr
No se si esatre haciendo mal pero por lo menos a mi lo que pone es mensaje no warning. Ahora no me acuerdo pero tiene numero y todo y creo que es el 307 o 306, bueno el caso es que es un mensaje el cual no indica en si un error sino que tenga el guenta los bits de pagina  y ese es mi problema que no se usarlos, ni entiendo muy bien para que sirven.


Los bits de página, le dicen al PIC en que página está la subrutina.
Como no le alcanzan sus bits para direccionar todas posiciones de memoria con una sola instrucción (son de 14 bits) entonces,  nececsita una instrucción "extra" para saber donde dirigir el Program Counter al recibir un call o un goto.

Te recomiendo que releas varias veces la datasheet DS30292 y ahí encontrarás un esquema muy claro de que bits son los que se agregan.

Como técnica simple utiliza lo siguiente:

Codigo:

_rutinaenRamBank0:
   pagesel   _rutinaenRamBank1
   call   _rutinaenRamBank1
   nop            ;aqui vuelve luego de retornar de la subrutina
               ;pero tiene los bits seteados para pagina 1
   pagesel   _rutinaenRamBank0   ;seteo los bits para pagina 0
   goto   _rutinaenRamBank0               


_rutinaenRamBank1:
   nop
   ...
   ...
   ...
   return



pagesel es un macro del compilador, lo que hace es setear los bits STATUS,RP0 y STATUS,RP1 automáticamente de acuerdo a la ubicación del código que le sigue.

Se usa asi:

   pagesel   _subrutina

Y el compilador generará los bsf o bcf del STATUS,RP0 y STATUS,RP1 automáticamente dependiendo de donde esté alojada la subrutina.

Espero haber sido claro y suerte con los 16F877!
Título: RE: paginas del F84 (PicListLatina)
Publicado por: maunix en 05 de Diciembre de 2005, 19:28:00
Escrito originalmente por FirmSoft
  Muchisisimas gracias hombre "x" ... no tienes nick que te identifique loco o no veo cuan sea Payaso ... ahora una preguntita mas para rematar con todo... Decias:

asi como esas hay muchisimas estan las directivas banksel, bankisel, if, then , else, code, udata, idata, tambien estan las directivas para los macros!!!! y otras mas..

Existe algun documento que aclare y muestre todas las directivas existentes para PICs... si no entendi mal, esas son directivas del MPASM... corrigeme si me equivoco... Esas directivas, explicadas y detalladas, existen en algun documento... tu como las conociste?.. si conoces alguna web que contenga la info, podrias compartirla conmigo... Desde ya muuuuchisimas gracias y un abrazo desde Arg. Entre Rios! ... GRACIAS CHAMIGO!Rebotado


Toda esta info está en la página de Microchip,  es solo cuestion de buscar.
Este es la ultima version del manual de MPASM,  MPLINKER y MPLIB

http://ww1.microchip.com/downloads/en/DeviceDoc/33014J.pdf

Saludos
Título: RE: paginas del F84 (PicListLatina)
Publicado por: maunix en 05 de Diciembre de 2005, 19:30:00
Escrito originalmente por FirmSoft
  No es un error, es un aviso que dice que no puede reemplazar la directiva por su codigo correspondiente... es devido a que programo un F84A ??? ... como puedo reemplazar lo del pageset para saltar a la direccion 0x100 donde tengo 2 tablas que deben retornar un valor ?. Gracias y Saludos! Payaso


Si posteas la parte del código que te genera problemas, tal vez te podamos ayudar.  

Sino, estaremos "adivinando" cual es el problema real
Título: RE: paginas del F84 (PicListLatina)
Publicado por: todopic en 05 de Diciembre de 2005, 20:50:00
Escrito originalmente por maunix
Escrito originalmente por todopic
Esto es de un email de la piclislatina
Cada pagina de memoria de programa tiene 255 posiciones o sea H"FF" en el caso
del 16F84A se tienen cuatro paginas, pues solo tiene 1023 posiciones o sea 1K de
memoria de programa.



Quiero hacer aquí una corrección ya que puede generar confusión con algún novato.

Cada página de datos tiene 2048 posiciones, es decir 2K.  
Hay algunos pics que tienen 1024 posiciones, es decir 1K. de 0h a 03FFh, pero esto sería media página.

No se porqué mencionas lo de 0xff... además si tomas de 0 a ff tienes 256 valores, pero esto de ninguna manera compone una página.  Una página,  o ROM BANK (así le llama microchip) es de 2048 bytes.

En los PIC16F,  las RAMBANK, o los bancos de memoria RAM,  son de un máximo de 128 bytes (cabe la aclaración ya que de acuerdo al pic del cual estemos hablando tal vez no tenga la página completa).  Pueden tener hasta 4 páginas de Ram, como es el caso del PIC16F876 y PIC16F877 solo por citar un par de ejemplos.




Hola Mauricio, el PCL, por ser 8 bits, solo direcciona 255 lugares....  y si estas trabajando con una tabla, y pasa en esa zona, saltara a quies sabe donde....
microchips no le llamara paginas....  pero que las hay, las hay Sonrisa Gigante

Y el texto no lo escribi yo, es de Nestor Marchesini....

Norberto Giño
Título: RE: paginas del F84 (PicListLatina)
Publicado por: maunix en 20 de Diciembre de 2005, 10:00:00
Norberto no recuerdo haberte mencionado en mi post Sonrisa

De todas formas, la información de Nestos es imprecisa y lleva a confusión.
En alguien que sabe del tema, no pasa nada, lo asume como un error "por apresurado" y nada más, pero para el que recien comienza se le ven muchas complicaciones a la hora de interpretar.

Me ha pasado cuando no sabia algo de un tema, iba y leia algo y no entendia! hasta que leia en otro lado y me daba cuenta que mi 1er lectura era de algo que contenía errores.

Mi intención era aportar información correcta para que no se confunda algún novato, solo eso.

En las notas de aplicación de Microchip se explica excelentemente como direccionar una tabla que sobre pase ese margen de los 256 bytes que pueda sobre pasar al PCL, no me parece nada del otro mundo y prefiero leer algo en inglés bien escrito y conciso que en castellano con errores e imprecisiones.

Saludos

Título: RE: paginas del F84 (PicListLatina)
Publicado por: Mr.pic en 29 de Diciembre de 2005, 22:22:00
hola que tal

yo tamnbien tengo muchas dudas sobre esto del PCL y el cambio de paginas, ya que no se cuando
hay que efectuar tal cambio , pues por lo que me ha pasado y he leido pienso que dicho cambio
debe efectuarse o cuando en una tabla el PCL se pasa de .255 o cuando el codigo de programa
sobrepasa los 2K, no estoy seguro y por eso escribo, ademas porque me pasan dos situaciones que creo yo que tienen
que ver con eso y son las siguientes:

yo estoy programando un 16F877A en asm
mi programa contiene datos para visualizar en una LCD y uun teclado que funciona por interrupcion
en la parte alta del puerto B; como el programa contiene un menu entonces yo utilizo varias tablas
que son las que van mostrando los mensajes en la LCD, analizando el programa hay una parte donde comienza una tabla
posicion para la cual el PCL me muestra que se encuentra en .254 lo que causa que cuando
me va a empezar a mostrar este mensaje el pic vuelve inmediatamente al primer pantallazo
como si hubiese habido un resetpues leyendo me doy cuenta que es porque el PC se desborda leyendo
sobre creo que es porque tengo que cambiarme de pagina; pero como hago esto, no se usar dichas instrucciones para esto
ademas me queda la duda si esto solo lo tengo que hacer en caso del que el PC se desborde mientras corre la tabla es decir digamos que
la tabla acabo de correr bien entonces luego el PC vuelve a empezar y si entonces sigue otra tabla no hay problema?
es que como ya dije mi programa tiene varias tablas y tambien me ocurre que una tablas mas adelante en el programa
el PC me muestra que esta en .6 pero lo que realmente me visualiza el LCD es parte del mensaje
de la primera tabla que tengo en el programa.
otra situacion que me ocurre es que como el teclado funciona por interrupcion, yo pues la subrutina de interrupcion casi al final del programa
y todo iba muy bien, pero a medida que le iba metiendo mas codigo me sucedia que el programa me
mostraba el primer pantallazo perfectamente pero el teclado no servia es decir no se efectuaba la
interrupcion, simule en el MPLAB y todo funciona perfecto, compile y no me salio ni un
error y ningun warning; pude solucionar esto provicionalmente pasando la subrutina de interrupcion
para las primeras lineas de programa, pero entonces me queda la duda de saber si la instruccion
GOTO tiene un limite de lineas de salto, porque yo inicialmente pense que era por lo mismo
de las paginas pero llevo aproximadamente 1000 lineas y tengo entendido que son aproximadamente 2000
por pagina, o es que acaso las interrupciones tienen tambien limitaciones en cuanto a esto.

tambien si alguien sabe quisiera que me dijera como saber cuanto lleva uno de memoria de codigo
es decir como saber que uno lleva 2K o menos o mas para asi saber cuando efectuar el cambio de pagina
y como hacerlo.



gracias


espero pronta respuesta
Título: RE: paginas del F84 (PicListLatina)
Publicado por: maunix en 30 de Diciembre de 2005, 05:30:00
1) Como consejo, utiliza siempre la lectura y actualización del PCL y PCLATH cuando leas tablas, así te olvidas de si la misma sobre pasa o si está a la mitad de un cambio o un desborde del PCL.

2) Para llamar a subrutinas que esten en otras paginas, seteas los bits de pagina o simplemente utilizas el macro pagesel y con eso te alivias de la tediosa tarea.

Es importante que sepas que si llamas a una subrutina en otra página y luego retornas a la página de donde llamaste, los bits de página siguen cambiados! y debieras volverlos a acomodar si es que harás otro salto.

Te paso un ejemplo

Mal llamado
Codigo:


;Rutina en RomBank0

   nop
   pagesel   _SUBRUT1
   call   _SUBRUT1
   nop         ;al retornar la subrutina vuelve aquí

   call   _SBURUT0   ;MAL!!! porque el PCLATH está seteado para el ROMBANK1


_SUBRUT0:         ;subrutina en ROMBANK0
   nop
   nop
   return

_SUBRUT1:         ;subrutina en ROMBANK1
   nop
   nop
   return   




;Empleo CORRECTO
Codigo:

;Rutina en RomBank0

   nop
   pagesel   _SUBRUT1
   call   _SUBRUT1
   nop         ;al retornar la subrutina vuelve aquí

   pagesel   _SUBRUT0
   call   _SBURUT0   ;bien, esto vuelve a setear bits de seleccion de BANK#0

_SUBRUT0:         ;subrutina en ROMBANK0
   nop
   nop
   return

_SUBRUT1:         ;subrutina en ROMBANK1
   nop
   nop
   return   



Espero te sirva y te esclarezca el asunto.

Título: Re: paginas del F84 (PicListLatina)
Publicado por: jhon fm en 25 de Mayo de 2006, 10:12:43
Esto es de un email de la piclislatina
<font color="#00007F">Cada pagina de memoria de programa tiene 255 posiciones o sea H"FF" en el caso
del 16F84A se tienen cuatro paginas, pues solo tiene 1023 posiciones o sea 1K de
memoria de programa.
 
Primera pagina     H"000" ~ H"0FF"
Segunda pagina   H"100" ~ H"1FF"
Tercera pagina     H"200" ~ H"2FF"
Cuarta pagina      H"300" ~ H"3FF"
 
Si quieres poner la parte la tabla en la parte alta de la primera pagina, entiendo que
es el comienzo, o sea desde el inicio de la segunda pagina.
Con la directiva ORG le indicas al ensamblador en donde quieres poner el codigo, en el
caso de la tabla seria:
 
    ORG H"100"
Tabla  addwf   PCL,F
            DT         literales,..,..,

Si tienes que saber en que dirección estas, eso es facil, solo tienes que leer los
registros PCL y PCLATH el primero es la parte baja del contador de programa
el segundo es la parte alta.
Si tu preocupacion es por un call o goto, no te hagás problemas ya que estos manejan
todo el rango de memoria RAM del 16F84A, en otros pics es diferente y hay que
leer las hojas de datos primero, en donde se complica es cuando lo haces con
mnemonicos que tienen como destino la modificación directa del registro PCL,
como en las tablas con addwf PCL,F en estos casos si tienes que tener en cuenta
y cargar a mano el registro PCLATH, para esto exiten dos directivas al ensamblador:
 
    movlw    HIGH Tabla
    movwf   PCLATH
    movf      Valor,W      ;El registro Valor tiene el valor pasado a la tabla
    addwf    PCL,F
    DT          literales,..,..,
 
La directiva LOW devuelve la parte baja del contador de programa "8 bits"
y la directiva HIGH devuelve la parte alta del contador de programa, o sea
lo que va en el registro PCLATH. También exite la directiva $ que significa el
lugar actual o sea la dirección en donde está el mnemonico, te doy un ejemplo
que utilizo mucho para no poner etiquetas.
 
    btfsc  PULSADOR      ;¿Se liberó el pulsador?
   goto    $ - 1               ;No, vuelve desde el lugar actual menos 1 o sea a btfsc PULSADOR
 
   Otro caso podria ser mover la parte alta del lugar actual, esto se haria con:
   molw    HIGH $
   o tambien 2 direcciones más relativo al lugar en donde se está, esto es muy utilizado!!
   movlw  HIGH $ + 2  
 
También exiten dos directivas mas al ensamblador que trabajan en forma similar
estas son para manejar codigos relocalizables (MPLINK), pero también andan en
codigo absoluto, estas son, Pagesel y Pageselw la primera retoca solo los bits del registro
PCLATH la segunda lo carga completo como con movlw  HIGH Tabla, ejemplo :
 
    Pagesel Tabla
o
   Pageselw Tabla
 
</font>


Nestor A. Marchesini
Chajari-Entre Rios-Argentina
ICQ # 50983752 nick colo
nestorm@bitbyte.com.ar
http://www.deselectronica.com.ar