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