Autor Tema: paginas del F84 (PicListLatina)  (Leído 7975 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado FirmSoft

  • PIC16
  • ***
  • Mensajes: 118
RE: paginas del F84 (PicListLatina)
« Respuesta #15 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

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: paginas del F84 (PicListLatina)
« Respuesta #16 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
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado FirmSoft

  • PIC16
  • ***
  • Mensajes: 118
RE: paginas del F84 (PicListLatina)
« Respuesta #17 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

Desconectado ale_x_bal

  • PIC10
  • *
  • Mensajes: 1
RE: paginas del F84 (PicListLatina)
« Respuesta #18 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

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: paginas del F84 (PicListLatina)
« Respuesta #19 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.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: paginas del F84 (PicListLatina)
« Respuesta #20 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!
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: paginas del F84 (PicListLatina)
« Respuesta #21 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
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: paginas del F84 (PicListLatina)
« Respuesta #22 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
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: paginas del F84 (PicListLatina)
« Respuesta #23 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
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: paginas del F84 (PicListLatina)
« Respuesta #24 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

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Mr.pic

  • PIC10
  • *
  • Mensajes: 8
RE: paginas del F84 (PicListLatina)
« Respuesta #25 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

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: paginas del F84 (PicListLatina)
« Respuesta #26 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.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado jhon fm

  • PIC10
  • *
  • Mensajes: 1
Re: paginas del F84 (PicListLatina)
« Respuesta #27 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