Autor Tema: problema con contador y eeprom de datos  (Leído 2239 veces)

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

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
problema con contador y eeprom de datos
« en: 26 de Enero de 2008, 21:20:50 »
hola,estoy liao con un programa y necesitaba que al realizar el cambio de un bit de uno a cero,se grabe en una direccion de la eeprom de datos,la cantidad de veces que paso de 0 a 1.
lo raro es que en el mplab funciona,pero en el pic no funciona.
lo mas que me hace es grabarme los valores 01h y 02h cuando cambio el bit de 1 a 0.



yo creo que el problema esta en la grabacion de la eeprom de datos.pero si funciona en el mplab porque no en el chip?


PRINCIPAL   GIE0
         call   TIEMPO      
         btfsc   PORTA,4
         BSF      REG_A,6
         BTFSS   PORTA,4
         BCF      REG_A,6
         

         goto   PRINCIPAL

TIEMPO      BANK0
         btfss   REG_A,6               ;comprueva el bit de los minutos del contador de tiempo
         clrf   REG_MIN1            ;borra REG_MIN1
         btfss   REG_A,6               ;comprueva el bit de los minutos del contador de tiempo
         return                     ;si es 0 retorna
         bsf      REG_MIN2,0            ;activa el bit 0 de REG_MIN2
         incf   REG_MIN1,F            ;incrementa REG_MIN1
         movlw   0X03               ;carga el valor 03h en el acumulador
         xorwf   REG_MIN1,W            ;comparalo con REG_MIN1
         btfsc   STATUS,Z            ;si es igual-
         decf   REG_MIN1,F            ;decrementa REG_MIN1
         movfw   REG_MIN1            ;carga REG_MIN1 en el acumulador
         subwf   REG_MIN2,W            ;resta el contenido del acumulador a REG_MIN2
         btfsc   STATUS,C            ;comprueva  REG_MIN2 y si es menor o igual a REG_MIN1
         incf   EEP_MINUTOS,F         ;incrementa EEP_MINUTOS
         
         movlw   0x02               ;carga el valor 02h en el acumulador
         xorwf   REG_MIN1,W            ;comparalo con REG_MIN1      
         btfsc   STATUS,Z            ;y si es igual         
         return                     ;retorna para que no se grabe dos vezes el mismo valor   
         movfw   EEP_MINUTOS            ;carga EEP_MINUTOS en el acumulador
         movwf   DATO_EEPROM            ;carga el contenido del acumulador en DATO_EEPROM
         movlw   0x01
         movwf   DIR_EEPROM
         call   ESCRIBIR_DATO
         return
ESCRIBIR_DATO   
         BANK0         
            movfw   DIR_EEPROM               ;DIRECCION  A ACCEDER
         BANK2
            movwf   EEADR
         BANK0
         movfw   DATO_EEPROM
         BANK2   
            movwf   EEDATA
      
            BANK3
            bcf      EECON1,EEPGD      ;acceso a memoria de datos
            bsf      EECON1,WREN         ;HABILITA ESCRITURA
         GIE0
         
            movlw   0X55
            movwf   EECON2
            movlw   0XAA
             movwf   EECON2
            bsf      EECON1,WR             ;INICIA ESCRITURA
         
ESPERA      btfsc   EECON1,WR
            goto     ESPERA
            bcf      EECON1,WREN          ;deshabilitar escritura en eeprom
         BANK0
            bcf      PIR2,EEIF            
            bcf      EECON1,WR
         movfw   DIR_EEPROM
         call   VERIFICA
         ;GIE1
         
           return
VERIFICA   call   LEER_DATO
         movfw   TEMP_EEP
         subwf   DATO_EEPROM,W
         btfss   STATUS,Z
         goto   ESCRIBIR_DATO
         return
;///////////////////////////////////////////LEER DATO DE MEMORIA EEPROM   ///////////////////////////////////////////////////////   

LEER_DATO   GIE0
         BANK2           
           
             movwf   EEADR            ;escribir direccion de memoria eeprom
         BANK3
             bsf      EECON1,RD         ;ORDEN DE LECTURA
LEE          btfsc   EECON1,RD
            goto      LEE
            BANK2
            movf     EEDATA,W         ;carga valor de eeprom en el registro W
         BANK0
            movwf   TEMP_EEP
         ;GIE1
           return
« Última modificación: 27 de Enero de 2008, 14:56:33 por groundman »
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: problema con contador y eeprom de datos
« Respuesta #1 en: 27 de Enero de 2008, 20:40:32 »
hola,creo haber encontrado el poblema.resulta de que al leer el chip con el programador,este produce un reset.
y el programa empieza de nuevo.no habia caido en esto.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado poseidon20

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 762
Re: problema con contador y eeprom de datos
« Respuesta #2 en: 28 de Enero de 2008, 04:17:26 »
No te preocupes, que a todos nos a pasado que se nos pasa unos pequeños detalles, o conceptos. Pero para eso estamos, y que mejor que tu te hayas dado cuenta del problema, eso queda de experiencia que enriquece  :-)


 

anything