Autor Tema: EEPROM y BANk0 & bank1  (Leído 2399 veces)

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

Desconectado RPI

  • PIC10
  • *
  • Mensajes: 2
EEPROM y BANk0 & bank1
« en: 18 de Junio de 2007, 19:36:22 »
Hola!! esta es mi primera vez...y me gustaria saber si me podeis ayudar.
 Necesito crear una rutina de acceso a la eeprom y que me asigne los valores almacenados a los bancos0 y 1 de la ram para configurar el pic.
 Mediante direccionamiento indirecto puedo ir eligiendo la posicion,pero estoy un poco perdido
 ¿alguien me puede decir por donde comenzar?

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: EEPROM y BANk0 & bank1
« Respuesta #1 en: 18 de Junio de 2007, 21:59:07 »
Hola aqui te mando un subrutinas que yo utilizo normalmente para grabar los datos en la EEPROM y leerlas, y verificarlas

Lectura de la EEPROM:

                         BCF              STATUS,RP0         ;Esta instruccion se puede omitir si ya estoy en el banco 0
                         MOVLW         0X20                    ;este valor puede ser cualquiera ya que va hacer una pocición de la memoria
                         MOVWF         EEADR                 ;eeprom
                         BSF              STATUS,RP0         ;se pone a uno ya que EECON1 esta en el banco 1
                         BSF              EECON1,RD          ;comienza la lectura del direccionamiento, en este caso 0X20
                         BCF              STATUS,RP0         ;Banco 0 (normalmente se trabaja en este banco)
                         MOVF           EEDATA,W            ;Paso el contenido de la eeprom a la memoria de trabajo


Notese que la última instrucción (MOVF) se puede cambiar por MOVFW y en la tercer columna, no hace falta especificar en donde o sea                  MOVFW         EEDATA

Escritura:


                      BCF                STATUS,RP0         ;Banco cero porque EEADR esta en el banco 0
                      MOVLW           0X18                    ;dirección de la memoria a ser grabada
                      MOVWF           EEADR                 ;direccionamiento indirecto en este caso 0X18
                      MOVLW           0X12                    ;Este es el valor que se va a grabar en la pocición 0X18 de la eeprom
                      MOVWF           EEDATA               ;Direccionamiento indirecto del valor a ser grabado
                      BSF                STATUS,RP0         ;Banco 1
                      BSF                EECON1,WREN      ;Permiso de escritura de la eeprom, si no se habilita esto, no se logra nada
                      MOVLW           0X55                    ;A continuación se realiza unos pasos obligatorios para lograr grabar
                      MOVWF           EECON2
                      MOVLW           0XAA
                      MOVWF           EECON2
                      BSF                EECON1,WR         ;Comienza la escritura
ESPERO          BTFSC            EECON1,WR          ;¿Terminó la grabación?
                      GOTO             ESPERO               ;No, espero
                      BCF                STATUS,RP0        ;Si, paso al banco 0



Verificación:



                   BCF                 STATUS,RP0
                   MOVLW            0X22                     ;posicion de la memoria a verificar
                   MOVFW            EEADR
                   BSF                 STATUS,RP0
                   BSF                 EECON1,RD
                   BCF                 STATUS,RP0
                   MOVLW            0X15                     ;Dato a ferificar
                   SUBWF             EEDATA,W
                   BTFSS              STATUS,Z              ;¿La resta dió cero? eso quiere decir que es el valor
                   GOTO              ERROR                   ;No
                   ......                                              ;Si


Los puntos suspencivos quiere decir que continuas a tu manera igual pasa en la instruccion anterio


Bueno, espero que te sirva, si no lo entendes avisame.

Saludos :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: EEPROM y BANk0 & bank1
« Respuesta #2 en: 19 de Junio de 2007, 01:51:01 »
hola RPI en que pic tas haciendo tu programa? porque la rutina de leon_pic es para un pic parecido al 16F84A
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: EEPROM y BANk0 & bank1
« Respuesta #3 en: 19 de Junio de 2007, 02:15:40 »
Muy buena observación. Pues si, es un pic 16f84a

Saludos  :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado RPI

  • PIC10
  • *
  • Mensajes: 2
Re: EEPROM y BANk0 & bank1
« Respuesta #4 en: 19 de Junio de 2007, 02:36:55 »
yo estoy aprendiendo con el 16F877, luego cuando vuelva del trabajo os pondre mi rutina para leer y grabar aunque la he sacado del datasheet, el problema viene cuando quiero almacenar todo el banco0 y banco1 de la ram en la eeprom para configurar el pic

Desconectado ErnestAl

  • PIC10
  • *
  • Mensajes: 37
Re: EEPROM y BANk0 & bank1
« Respuesta #5 en: 25 de Junio de 2007, 19:15:21 »
Hola RPI, por propia experiencia se que los comienzos siempre son dificiles por eso te recomiendo que hagas como yo y empieces por lo mas bajo, con eso y el datasheet se pueden hacer grandes cosas....yo he realizado la siguiente rutina para que mediante direccionamiento indirecto se pueda guardar en la eeprom, nose si estara bien espero que alguien me corrija!!!!
;programita para grabar la configuracion del pic
;en la eeprom del 16F877, para ello usamos
;direccionamiento indirecto
         list   P=16F877
         #include <p16f877.inc>
   
         ADDR_L      equ      0x21  ;direccion donde guardamos
         DATA_L      equ      0x23  ;dato a guardar
         conta      equ      0x24
         org         0x00
         nop         ;libre para usar
         nop
main      movlw      0xFF   ;como en los bank0 y 1 hay un total
         movwf      conta   ;de 255 dir, ire decrementando para almacenar
         bcf         STATUS,IRP
         movlw      H'00'
         movwf      FSR   

bucle      call      ob_dato    ; obtenemos por dir indirecto el dato
         call      guarda   ;lo guardamos
         decfsz      conta,f
         goto      bucle
         goto      fin


;***********************rutinas**************
ob_dato      movf      INDF,W
         movwf      DATA_L
         movf      FSR,W
         movwf      ADDR_L
         incf      FSR,f
         return
guarda      bsf         STATUS,RP0
         bsf         STATUS,RP1
         btfsc      EECON1,WR
         goto      $-1
         bcf         STATUS,RP0
         bcf         STATUS,RP1
         movf      ADDR_L,W
         bsf         STATUS,RP1
         MOVWF      EEADR
         bcf         STATUS,RP1
         movf      DATA_L,W
         bsf         STATUS,RP1
         MOVWF      EEDATA
         bsf         STATUS,RP0
         bcf         EECON1,EEPGD
         bsf         EECON1,WREN
         bcf         INTCON,GIE  ;COPIADO DEL DATASHEET
         movlw      0x55
         movwf      EECON2
         movlw      0xAA
         movwf      EECON2
         bsf         EECON1,WR
         bcf         EECON1,WREN
         RETURN

fin         

         END



PD: al programa le falta rellenar los registros de los bankos 0 y 1 pero como simulacro espero que este bien, ¿que opinais?