TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: latch en 05 de Octubre de 2005, 16:42:00
-
Hola gente, q tal, estoy realizando un proyecto (en ASM) en donde se deben contar pulsos por RB1, guardar en EEPROM e ir mostrando la cantidad en un LCD. Utilizo registros por cada cifra (es decir, al llegar a d"10" un registro se debe resetear, sumar el siguiente registro y volver a empezar, y asi con todos). Hasta aca todo bien, como no puedo perder la cuenta de los pulsos que se cuentan, en cada pulso los voy guardando, pero cuando hay un reset o una desconexión de la alimentación, se graba cualquier cosa (por lo general un dato mayor a 10) y se pierde la cuenta que se tenia. Como puedo solucionar el problema?Estoy usando el 16F876A.
Espero que se entienda. Desde ya gracias.
latch-
-
Hola latch.
No entiendo muy bien lo que quieres hacer pero... para grabar/leer cualquier dato en la eeprom del pic puedes utilizar estas funciones. Doy fé que funcionan perfectamente.
#############################################
EE_Write
bsf STATUS,RP0 ;Selecciona banco 3
bsf STATUS,RP1 ;Selecciona banco 3
bcf EECON1,EEPGD ; acceso a la memoria FLASH "1" o a la EEPROM "0"
bsf EECON1,WREN ;Permiso de escritura
bcf INTCON,GIE ;Prohibimos acceso a las interrupciones
;---------------------------------------------------------------------------
movlw b"01010101"
movwf EECON2
movlw b"10101010"
movwf EECON2 ;Secuencia establecida por Microchip
bsf EECON1,WR ;Orden de escritura
;---------------------------------------------------------------------------
bsf INTCON,GIE
bcf EECON1,WREN ;Se prohibe la escritura
bcf STATUS,RP1 ;Selección banco 0
bcf STATUS,RP0 ;Selección banco 0
wait btfss PIR2,EEIF
goto wait
bcf PIR2,EEIF
return
#############################################
;EE_Read: Leer un byte de la EEPROM. Se supone al registro EEADR cargado con la direc-
;ción a leer. En EEDATA aparecerá el dato leído.
EE_Read
bsf STATUS,RP0 ; Selecciona banco 3
bsf STATUS,RP1 ; Selecciona banco 3
bcf EECON1,EEPGD ; Para acceder a la memoria de DATOS
bsf EECON1,RD ; Orden de lectura
bcf STATUS,RP0 ; Selecciona banco 2
bsf STATUS,RP1 ; Selecciona banco 2
movf EEDATA,W ; W=EEDATA
return
#############################################
Como se utilizan???
Si queremos guardar el número 235 en la dirección 3 de la eeprom pondremos:
bsf STATUS,RP1 ; BANCO 2
bcf STATUS,RP0
movlw 0x03 ; Dirección 3 de la EEPROM
movwf EEADR
movlw .235 ; Guardamos el número .235
movwf EEDATA
call EE_Write
Justo despues del "call" tendrás en la la direccion 3 de la eeprom el 235.
Ahora aunque apagemos el pic y lo encendamos ese dato no se borrará.
Como leemos ese dato desde la eeprom???
bsf STATUS,RP1 ; BANCO 2
bcf STATUS,RP0
movlw 0x03 ; Miramos en la posicion 0x03
movwf EEADR
call EE_Read
bcf STATUS,RP1 ; Banco 0
bcf STATUS,RP0
movwf NUMERO_EEPROM
En este punto lo que tendremos guardado en "NUMERO_EEPROM" será el valor de la dirección 3 de la eeprom (el 235 que, por ejemplo, habíamos guardado antes).
Espero que te sirva de algo.
Un saludo desde Alicante.
-
No ese no es mi problema, leo y grabo bien la eeprom, el problema es que continuamente se van guardando datos (para no perder la cuenta), y si hay un reset o falla de alimentación se graba cualquier cosa (o sea se pierde la cuenta).
Como protejo los datos de la eeprom ante un reset o como saber por cual iba antes de que se grabe mal? Esa es mi pregunta.
Igual te agradezco la ayuda.
latch.-