Autor Tema: Guardar valores en RAM  (Leído 3205 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado arcachofo

  • PIC16
  • ***
  • Mensajes: 126
    • Foro para usuarios Linux.
Guardar valores en RAM
« en: 11 de Octubre de 2008, 13:41:00 »
Hola a todos...
El tema se trata de hacer 24 mediciones y guardar esos valores en RAM, entonces me gustaría hacer una rutina sencilla, por ejemplo usar un contador 24 a 0 y que me guarde el valor medido en un lugar de memoria dependiendo del contador, algo así como 0x20+contador,... es esto posible o tengo que declarar todas las variables con sus nombres?

Creo que se puede hacer con FSR e INDF... este código sería válido?:

movf contador,w
addlw 0x20
movwf FSR
movf medida,w
movwf INDF

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: Guardar valores en RAM
« Respuesta #1 en: 11 de Octubre de 2008, 21:15:04 »
Como bien apuntas para lo que quieres hacer necesitas usar el FSR y el INDF, y usar estos registro para implementar un arreglo de 24 caracteres, lo primero que debes hacer es definir el inicio de tu arreglo , esto es , Datos:.20, luego cargas FSR (que viene a ser un registro puntero ) con la direccion de datos ,  Luego debes hacer un ciclo que se repita 24 veces haciendo lo siguiente:

  • Colocar el valor que quieres guardar en FSR
  • incrementar FSR, (para guardar el siguiente dato)
  • repetir 24 veces , y ya esta

Esto en lenguaje ensamblador seria algo asi :

Código: ASM
  1. list      p=16F84A            ;directiva list para definir procesador
  2.         #include <p16F84A.inc>        ;definicion de registros especificos(SFRs)
  3.  
  4.         __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
  5.  
  6.      
  7. ;***** Definicion de Variables
  8.  
  9.          CBLOCK 0x0C
  10.  
  11.          Datos:.24                          ;definimos el inicio del arreglo donde se guardan los datos
  12.          cont                                  ;para controlar el ciclo
  13.          Dato                                 ;Variable que guarda el dato leido
  14.         ENDC
  15.  
  16.  
  17.         ORG    0x00
  18.        
  19.         goto        Inicio
  20.  
  21.  
  22.  
  23. Inicio
  24.  
  25.        movlw       Datos                   ;movemos la direccion de inicio del arreglo a W
  26.        movwf       FSR                      ;FSR apunta al inicio del arreglo
  27.        clrf            Cont                     ;el contador comienza en cero
  28.  
  29. Ciclo
  30.        movf   Dato,W                  ;Tomamos el valor que queremos guardar en el arreglo
  31.        movwf   INDF                     ;y lo guardamos , esto es, Datos[FSR] = Dato
  32.        incf   FSR,F                    ;incrementamos FSR (FSR ++)
  33.        incf   Cont,F                   ;Cont ++
  34.        movf   Cont,W
  35.        xorlw   .24                       ;comparamos Cont con 24
  36.        btfss   STATUS,Z             ;Cont == 24?
  37.        goto   Ciclo                    ;No => seguimos en el ciclo
  38.        sleep                         ;Si => terminamos
  39.      
  40.    END

Esto te sirve para usar un arreglo, si piensas usar dos o mas arreglos al mismo tiempo, puedes definirte apuntadores en RAM (i, j,k) e ir actualizando el valor de FSR con el apuntador que quieras antes de actualizar el INDF

Saludos
« Última modificación: 11 de Octubre de 2008, 21:17:07 por sander »
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado arcachofo

  • PIC16
  • ***
  • Mensajes: 126
    • Foro para usuarios Linux.
Re: Guardar valores en RAM
« Respuesta #2 en: 11 de Octubre de 2008, 23:59:17 »
Muchas gracias sander... creo que me ha quedado claro, y como siempre aprendo más cosas de las que pregunto :)
Entonces..." datos: .24 " define una variable de 24 Bytes... no? ; esto es nuevo pra mí
xor da como resultado 0 solo si los dos elemntos son iguales... cuando el resultado es 0 STATUS,Z se pone a 1... pensaba que esto solo era para operaciones aritméticas, pero veo que tambien con operaciones lógicas.

Luego está el tema de recuperar los datos... pero supongo que será igual, dando un valor a FSR y leyendo INDF... no?
osea: FSR=datos, luego para acceder al registro x, FSR=FSR+x y entonces: dato=INDF.