Autor Tema: Escritura en la flash de un 877A  (Leído 1607 veces)

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

Desconectado Sacahe

  • PIC12
  • **
  • Mensajes: 68
Escritura en la flash de un 877A
« en: 04 de Julio de 2006, 15:22:10 »
Que tal compañeros???
Bueno les comento:
Hice un programita que me escribe en la memoria flash de programa una serie de datos (un programa que prende y apaga un led) a partir de la direccion h'90'. El programa principal que me hace la secuencia de escritura de la flash funciona bien menos cuando con un "goto" lo mando a la direccion h'90', es decir, la instruccion goto h'90' no hace el salto que deseo para luego ejecutar el otro progamita (led on/off), si no que se queda ahi mismo "pegado" cuando lo simulo en mplab y en el proteus...Este es el programa resumidito


inicio   clrf   eeadrh
       movlw   h'90'
       movwf   eeadr
   
       movlw   h'01'
     movwf   eedath    
     movlw   h'86'   
     movwf   eedata
   
     call   writeflash
   
     incf   eeadr   . . .
       .     .
       .     .
       .     .
       .     .
   
     goto   h'90'   ---> aca se queda pegado y no salta a la direccion 90



Porque no salta?....Amigos espero nuevamente su colaboracion...GRACIAS

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Escritura en la flash de un 877A
« Respuesta #1 en: 04 de Julio de 2006, 20:20:22 »
Amigo dificil adivinar si tener todo el código.

Pero dejame comentarte algo, si haces una escritura de la flash 'durante la ejecución' lo que cambiará será la memoria de programa y deberás simular con la ventana "Program Memory" la sección de código que deseas ver!

No podrás hacerlo desde la ventana EDIT con el texto porque sencillamente no es código que sea generado por el ensamblador, sino que se genera durante la ejecución por el simulador.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Sacahe

  • PIC12
  • **
  • Mensajes: 68
Re: Escritura en la flash de un 877A
« Respuesta #2 en: 04 de Julio de 2006, 20:58:33 »
Amigos este es el codigo completo:

LIST   P=16F877A      ;TIPO DE PROCESADOR
   INCLUDE   "P16F877A.INC"      ;DEFINICON DE LOS SFR

   __CONFIG _XT_OSC & _CP_OFF & _PWRTE_ON & _WDT_OFF & _BODEN_ON & _WRT_OFF & _LVP_OFF & _CPD_OFF & _DEBUG_OFF
      
   
INICIO     ORG   H'0000'
       GOTO   START
         
;****************************************************************
WRITEF   
      BANKSEL   EECON1         ;BANCO3
      
      BSF      EECON1,EEPGD   ;SELECCIONAMOS ACCESO A LA FLASH
      BSF      EECON1,WREN      ;SE HABILITA ESCRITURA EN LA FLASH
      BCF      INTCON,GIE      ;SE PROHIBEN LAS INTERRUPCIONES
      MOVLW   H'55'
      MOVWF   EECON2
      MOVLW   H'AA'
      MOVWF   EECON2
      BSF      EECON1,WR      ;SE DA LA ORDEN DE ESCRITURA
      NOP
      NOP
      
      BSF      INTCON,GIE      ;SE HABILITAN LAS INTERRUPCIONES
      BCF      EECON1,WREN      ;SE PROHIBE LA ESCRITURA DE NUEVOS DATOS
      
      BANKSEL   EEADR         ;BANCO2
                        ;
      RETURN
;****************************************************************
START
      BANKSEL   EEADR         ;BANCO2
            
      CLRF   EEADR         ;LIMPIAMOS PARTE BAJA DEL DIRECCIONADOR DE LA FLASH
      CLRF   EEADRH         ;LIMPIAMOS PARTE ALTA DEL DIRECCIONADOR DE LA FLASH
      
      MOVLW   H'90'
      MOVWF   EEADR
      
      MOVLW   H'01'
      MOVWF   EEDATH
      MOVLW   H'86'
      MOVWF   EEDATA
   
      CALL   WRITEF

      INCF   EEADR,1

      MOVLW   H'16'
      MOVWF   EEDATH
      MOVLW   H'83'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
      
      MOVLW   H'10'
      MOVWF   EEDATH
      MOVLW   H'06'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
      
      MOVLW   H'12'
      MOVWF   EEDATH
      MOVLW   H'83'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
      
      MOVLW   H'14'
      MOVWF   EEDATH
      MOVLW   H'06'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
      
      MOVLW   H'20'
      MOVWF   EEDATH
      MOVLW   H'09'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
      
      MOVLW   H'10'
      MOVWF   EEDATH
      MOVLW   H'06'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
      
      MOVLW   H'20'
      MOVWF   EEDATH
      MOVLW   H'09'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
;==========================================      
      MOVLW   H'28'
      MOVWF   EEDATH
      MOVLW   H'04'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1

      MOVLW   H'30'
      MOVWF   EEDATH
      MOVLW   H'C8'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
      
      MOVLW   H'00'
      MOVWF   EEDATH
      MOVLW   H'A0'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
      
      MOVLW   H'30'
      MOVWF   EEDATH
      MOVLW   H'6E'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
      
      MOVLW   H'00'
      MOVWF   EEDATH
      MOVLW   H'A1'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
      
      MOVLW   H'00'
      MOVWF   EEDATH
      MOVLW   H'00'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
      
      MOVLW   H'0B'
      MOVWF   EEDATH
      MOVLW   H'A1'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
      
      MOVLW   H'28'
      MOVWF   EEDATH
      MOVLW   H'0D'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
;==========================================
      MOVLW   H'0B'
      MOVWF   EEDATH
      MOVLW   H'A0'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
      
      MOVLW   H'28'
      MOVWF   EEDATH
      MOVLW   H'0B'
      MOVWF   EEDATA

      CALL   WRITEF

      INCF   EEADR,1
      
      MOVLW   H'00'
      MOVWF   EEDATH
      MOVLW   H'08'
      MOVWF   EEDATA

      CALL   WRITEF

      GOTO   H'0090'
;==========================================
      END

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Escritura en la flash de un 877A
« Respuesta #3 en: 05 de Julio de 2006, 08:42:52 »
Sacahe primero que todo te quiero comentar que tu código si funciona.

El problema está en "qué" es lo que estas grabando a partir de 0x0090.

He visto y tu código genera lo siguiente:


   Address         Mnemonico

   0090            CLRF PORTB                             
   0091            BSF STATUS, 0x5                       
   0092            BCF PORTB, 0                           
   0093            BCF STATUS, 0x5                       
   0094            BSF PORTB, 0                           
   0095            CALL 0x9                               
   0096            BCF PORTB, 0                           
   0097            CALL 0x9                               
   0098            GOTO 0x4                               
   0099            MOVLW 0xc8                             
   009A            MOVWF 0x20                             
   009B            MOVLW 0x6e                             
   009C            MOVWF 0x21                             
   009D            NOP                                   
   009E            DECFSZ 0x21, F                         
   009F            GOTO 0xd                               


En el address 0x0095 hay un "call" a la línea 0x0009.  Eso hace que tu programa haga cualquier cosa.

Pero simulando, el puntero va perfectamente a 0x0090 ejecuta las líneas en secuencia hasta que llega a ese call.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)