Autor Tema: EEPROM desde Banco 2 en 16F877  (Leído 2701 veces)

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

Desconectado FER_CBA

  • PIC10
  • *
  • Mensajes: 13
EEPROM desde Banco 2 en 16F877
« en: 04 de Diciembre de 2007, 13:10:04 »
Buenas, estoy probando por primera vez grabar en la eeprom interna de un 16F877 en assembler. los registros q estan en el banco 0 los pude grabar perfectamente por direccionamiento indirecto, peor los que se encuentran en el banco 2 no. Estoy usando los 96 bytes de registros del banco 2. Si no me equivoco el problema viene por la direccion de estos registros que comienzan en 0x110 y sobreasa la capacidad del FSR. probe tambien cargar el FSR con 0x10 (es la equivalente a 0x110 del banco 0), pero ademas poniendo IRP a 1 y FSR, 7 a 0, peor tampoco lo consigo.
No encuentro mas documentacion sobre como hacerlo y copiar el contenido de cada registro a EEDATA genera una rutina muy larga si no es por direccionamiento indirecto. Desde ya muchas gracias.

Desconectado FER_CBA

  • PIC10
  • *
  • Mensajes: 13
Re: EEPROM desde Banco 2 en 16F877
« Respuesta #1 en: 04 de Diciembre de 2007, 14:20:35 »
Hola, las declare con
    cblock 0x0110
REGISTRO1
REGISTRO2
REGISTRO3
    endc

Yo probe con pasarle la dir 0x110 a al FSR pero el mplab me avisa que sale de rango

Desconectado FER_CBA

  • PIC10
  • *
  • Mensajes: 13
Re: EEPROM desde Banco 2 en 16F877
« Respuesta #2 en: 04 de Diciembre de 2007, 15:44:46 »
Les dejo las rutinas de grabacion para ver si se encuentra algun error. La rutina GRABAR es la que deberia copiar los registros del banco 2 a la eeprom , desde 0x110 hasta el final del banco.
La rutina GRABARB0 es la que funciona, y copia los registros restantes q deseo guardar, q estan en el banco 0 a la eeprom, esa funciona ok. Indudablemente no esta leyendo los tados del banco 2 me imagino.

Desconectado FER_CBA

  • PIC10
  • *
  • Mensajes: 13
Re: EEPROM desde Banco 2 en 16F877
« Respuesta #3 en: 04 de Diciembre de 2007, 18:48:31 »
;-------------------------------------------------------------------------------------
;   Rutinas para cambiar de bancos
;-------------------------------------------------------------------------------------
BANCO0   bcf      STATUS,RP0         ;
      bcf      STATUS,RP1      ;
      return               ;
BANCO1   bsf      STATUS,RP0         ;
      bcf      STATUS,RP1         ;
      return               ;
BANCO2   bcf      STATUS,RP0         ;
      bsf      STATUS,RP1         ;
      return               ;
BANCO3      bsf      STATUS,RP0         ;
      bsf      STATUS,RP1         ;
         return               ;
;-------------------------------------------------------------------------------------
;   Rutinas para grabar en EEPROM
;------------------------------------------------------------------------------------
GRABAR   call   BANCO0         ;
   movlw   .94            ;
   movwf   CONTA_EE      ;Cargo el contador para grabar
   clrf   DIR_EE         ;
   call   BANCO2         ;
   movlw   0x10  Copio la direccion del registro a W
   movwf   FSR            ;
REPETIR   bsf      STATUS, IRP      ;
   bcf      FSR,7
   call   BANCO3         ;
ESPERAR   btfsc   EECON1, WR      ;Verifico si termino de grabar
   goto   ESPERAR         ;Espero a que termine de grabar
   call   BANCO0         ;
   movf   DIR_EE,w      ;Copio la direccion de la EEPROM en donde voy a
   call   BANCO2         ;grabar el dato.
   movwf   EEADR         ;Cargo la direccion al registro
   movf   INDF,w         ;Muevo el
   movwf   EEDATA         ;
   call   BANCO3         ;
   bcf      EECON1, EEPGD   ;Indico que voy a grabar en EEPROM
   bsf      EECON1, WREN   ;Habilito la escritura
   bcf      INTCON, GIE   ;Deshabilito las interrupciones
   movlw   0x55         ;Ingreso la clave para grabar
   movwf   EECON2         ;
   movlw   0xAA         ;Ingreso la clave para grabar
   movwf   EECON2         ;
   bsf      EECON1, WR      ;Comenzo la grabacion
   bsf      INTCON, GIE      ;Habilito las interrupciones
   decfsz   CONTA_EE,1      ;
   goto   FALTA         ;Sigo con el banco 2
   goto   GRABARB0      ;Terminne con  los registros del banco 2

FALTA   call   BANCO0         ;
   incf   DIR_EE,1      ;Incremento la direccion  de la EEPROM      
   ;call   BANCO2         ;
   incf   FSR,1         ;Incremento la direccion
   goto   REPETIR         ;

GRABARB0   call   BANCO0         ;
   movlw   .32            ;
   movwf   CONTA_EE      ;Cargo el contador para grabar
   movlw   .94            ;
   movwf   DIR_EE         ;
   bcf      STATUS, IRP
   ;call   BANCO0         ;
   movlw   MOLDE48_A      ;Copio la direccion del registro a W
   movwf   FSR            ;
REPETIRB0        bcf      FSR,7
           bcf      STATUS, IRP
           call   BANCO3         ;
ESPERARB0      btfsc   EECON1, WR      ;Verifico si termino de grabar
        goto   ESPERARB0      ;Espero a que termine de grabar
   call   BANCO0         ;
   movf   DIR_EE,w      ;Copio la direccion de la EEPROM en donde voy a
   call   BANCO2         ;grabar el dato.
   movwf   EEADR         ;Cargo la direccion al registro
   movf   INDF,w         ;Muevo el
   movwf   EEDATA         ;
   call   BANCO3         ;
   bcf      EECON1, EEPGD   ;Indico que voy a grabar en EEPROM
   bsf      EECON1, WREN   ;Habilito la escritura
   bcf      INTCON, GIE   ;Deshabilito las interrupciones
   movlw   0x55         ;Ingreso la clave para grabar
   movwf   EECON2         ;
   movlw   0xAA         ;Ingreso la clave para grabar
   movwf   EECON2         ;
   bsf      EECON1, WR      ;Comenzo la grabacion
   bsf      INTCON, GIE      ;Habilito las interrupciones
   decfsz   CONTA_EE,1      ;
   goto   FALTAB0         ;Sigo con el banco 2
   call   BANCO0         ;
   return               ;

FALTAB0   incf   FSR,1         ;Incremento la direccion
   call   BANCO0         ;
   incf   DIR_EE,1      ;Incremento la direccion  de la EEPROM      goto   REPETIRB0      ;


 

anything