Autor Tema: Que es un CBLOCK  (Leído 19079 veces)

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

adhes

  • Visitante
Que es un CBLOCK
« en: 07 de Abril de 2004, 23:58:00 »
Estoy implementando el reloj digital que esta basado en la hoja de aplicacion #AN590 y hay una parte de codigo donde define constantes pero mi duda es ¿Cuel es el proposito de esto?
el codigo es el siguiente:

;--------------------------------------------------------------------------------
[size=12]   CBLOCK   H"0C"; adaptado al mapa de memoria del 16F84
;   VARIABLES
keys      ; H"08"variable location - which keys are pressed? bit0/sw1...
flags      ; H"09"bit flags; 0-SEC, 1-MIN, 2-HRS, 3-CHG, 4-SW1, 5-SW2, 6-SW3
;      ; Not Used
display    ; variable location - which display to update
digit1      ; Rightmost display value
digit2      ; Second display from right
digit3      ; Third    "       "    "
digit4      ; Fourth (and Leftmost)
      ;
      ;   timer variables start at a number that allows rollover in sync with time rollover,
      ;    i.e. seconds starts at decimal 195 so that sixty 1-second increments causes 0.
sec_nth      ; seconds, fractional place
seconds      ; seconds
minutes         ; minutes
hours         ; hours
var      ; variable for misc math computations
count      ; loop counter variable
count2      ; 2nd loop counter for nested loops

   ENDC

;----------------------------------------------------------------------------------
espero que me puedan ayudar...........

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
RE: Que es un CBLOCK
« Respuesta #1 en: 08 de Abril de 2004, 06:15:00 »
La directiva CBLOCK te permite crear una lista de variables que se posicionaran en memoria a partir de la direccion asignada a la primer variable (la direccion despues del comando Cblock), incrementando en una.
Esto permite adaptar rapidamente el software a otro PIC donde el inicio de RAM es diferente...

Yo utilizo otra forma que es asi:

VAR1    equ   0CH;   primer direccion
VAR2 equ VAR1 + 1 ; segunda direccion igual a 0CH + 1
VAR3 equ VAR2 + 1 ; tercer direccion igual a 0CH + 2


Y asi sigues de la misma forma, es lo mismo que utilizar CBLOCK, pero me cuesta menos escribirlo de esa forma, es una cuestion de gustos....
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado adrian2a1

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 75
RE: Que es un CBLOCK
« Respuesta #2 en: 08 de Abril de 2004, 12:47:00 »
En la mayoría de las aplicaciones el propósito de las directivas CBLOCK  y ENDC  es asignar direcciones (generalmente de memoria RAM de datos) a muchas etiquetas. La lista queda enmarcada entre las directivas CBLOCK y ENDC.

Un ejemplo típico de utilización:

   CBLOCK   0x0C   ; Las variables se posicionan a partir de esta posición de RAM.
   Centenas   ; La variable “Centenas” ocupa la posición 0x0C de RAM.
   Decenas      ; La variable “Decenas” ocupa la posición 0x0D de RAM.
   Unidades   ; La variable “Unidades” ocupa la posición 0x0E de RAM.
   ENDC

El valor que acompaña a la directiva CBLOCK (0x0C en el anterior ejemplo), indica el valor de arranque para el primer nombre del bloque de etiquetas. Si este valor no es encontrado, la primera constante recibirá el valor inmediatamente superior al de la ultima constante del CBLOCK anteriormente definido. Por ejemplo, si a lo largo del programa del ejemplo anterior se encontrase la siguiente definición de variables, ocuparían las posiciones que se indican.

   CBLOCK   ; Las variables se posicionan a partir de la posición de RAM definida
         ; por el último bloque CBLOCK.
   Operando   , La variable “Operando” ocupa la posición 0x0F de RAM.
   Resultado   , La variable “Resultado” ocupa la posición 0x10 de RAM.
   Auxiliar      , La variable “Auxiliar” ocupa la posición 0x11 de RAM.
   ENDC


Si el primer CBLOCK en el archivo fuente no define ningún comienzo los valores asignados empiezan con el cero, que corresponde a la zona SFR de la RAM de datos,  normalmente no es correcto ya que sobrescribiría los datos de esta zona y el programa no funcionaría correctamente.

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: Que es un CBLOCK
« Respuesta #3 en: 08 de Abril de 2004, 13:40:00 »
Hola, yo empleo CBlock, y es muy facil de agregar o quitar  nuevos registros, considero que es lo mas facil, en lugar que tener que escribir cada EQU e ir contando o verificando en que direccion lo mandas...  asi solo escribes a partir de los registros especiales... y te olvidas de enumerar posiciones de memoria...


Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

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

adhes

  • Visitante
RE: Que es un CBLOCK
« Respuesta #4 en: 10 de Abril de 2004, 22:30:00 »
Gracias he comprobado que si es una asigancion secuencial de memoria a variables contenida en el CBLOCK ahora me a surgido una duda y es con el reloj84.asm de Denis he documentado gran parte del codigo y hecho unas cuantas modificaciones en hardware basicamente con el tipo de displays pero aun no entiendo bien del todo como es que se determinan adjustes como es que restan 9 nths de los minutos, 34 nths de las horas no visualizo de donde salen, ya revise la hoja tecnica AN590 donde exponen el diseño pero no me dice mucho...

si alguien sabe ????

voy abrir otro tema donde vuelva a pedir ayuda y a subir lo que he realizado...


 

anything