rio



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.
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.
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
Escrito originalmente por FirmSoft
Muchisisimas gracias hombre "x" ... no tienes nick que te identifiqueo 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!
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!
Escrito originalmente por maunixEscrito 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.


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
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
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