# Grabar en la EEPROM del 16F877A



## ohbuiles (Abr 3, 2006)

Hola todos 

Creo que he entendido las rutinas para escritura y lectura de datos de la EEPROM
del 16f877A (Datasheet  seccion 3.3 pag 37) pero como hago para introducir los
datos con un teclado y visualizarlos en 4 display . Para  un solo digito creo que
se utilizaria el codigo de la tecla y una tabla . Pero como hago por ejemplo para
introducir el 125 y guardarlo en la EEPROM.

Alguna idea o ayuda la agradeceria.


----------



## shakaran (Abr 10, 2006)

En el caso del PIC16F84 y al menos en las practicas que he realizado en la universidad, hemos utilizado este fichero, para leer los datos de un teclado. Bastaria con llamara a la subrutina Key, y leerlo ademas de guardarlo en la EEPROM. Te pongo adjunto en el post el codigo del teclado. Saludos

PD: Renombralo a .inc si quieres incluirlo con "include" en tu programa, o a .asm


----------



## okcomputer (Abr 13, 2006)

creo que tu problema se solucionaria almacenando los valores como un numero ascii a lo sumo ocuparia dos byte en memoria, claro que debes hacer la conversion del dato binario que arroja el teclado, pero eso no es complicado " si y solo si programas en ensamblador o lenguaje maquina" si lo haces en C o en algun otro lenguaje de alto nivel ju quien sabe...


----------



## maunix (Abr 15, 2006)

ohbuiles dijo:
			
		

> Hola todos
> 
> Creo que he entendido las rutinas para escritura y lectura de datos de la EEPROM
> del 16f877A (Datasheet  seccion 3.3 pag 37) pero como hago para introducir los
> ...



Puedes contarme un poquito de que consta tu hardware?

Por 4 display te refieres a display LCD en modo 4 bits? o a 4 digitos de 7 segmentos?

Con respecto a como guardarlo, depende de si hablamos de LCD o de 7 segmentos.

En caso de LCD yo haría  como te apuntó *okcomputer* es decir guardar directamente el ASCII (si solo lo quieres guardar para luego mostrarlo).  

Si usas el 7 segmento entonces yo guardaría cada dígito en una variable diferente,  el valor en cada variable sería de 0x00 a 0x09.

Ahora bien, si tu con este numero quieres calcular cosas,  procesar, etc.  No te servirá tenerlo como ascii ni como un dígito en cada byte.  Deberas almacenarlo en formato hexa, con alguna pequeña rutina que te vaya incrementando una variable en función de la unidad, ,decena o centena.  Una vez guardado en hexa, ya puedes sumar, restar, multiplicar y lo que necesites hacer.

Saludos


----------



## ohbuiles (Abr 18, 2006)

Son 4 display de siete segmentos .

No voy a hacer ningun tipo de calculo.

Es para un contador , y los datos que nesecito introducir por teclado
son para : 1)Colocar el numero en que el contador empezara.2)De a cuanto
incrementara.3)Tiempo que esperara para incrementar si no recibe señal.


Creo que entiendo la solucion de Magio , un byte para cada adisplay?

Pero para introducirlo con el teclado , estoy mal ; como hago por ejemplo
para introducir 1234 . Al teclear 1 , en mi codigo sera el byte de unidades
hasta que introduzca el 2 ; luego 1 pasara a decenas y 2 a unidades ........

El codigo de Shakaran apenas lo voy a revisar , tuve un accidente en motocicleta
y me fracture el  quinto noseque carpio de la mano derecha , fuera tengo que cuidar 
mi bebe de 7 meses .

Gracias  por su ayuda.


----------



## maunix (Abr 19, 2006)

ohbuiles dijo:
			
		

> Creo que entiendo la solucion de Magio , un byte para cada adisplay?



Si es una de las formas, pero podrias inventarte otra si tu quieres.




			
				ohbuiles dijo:
			
		

> Pero para introducirlo con el teclado , estoy mal ; como hago por ejemplo
> para introducir 1234 . Al teclear 1 , en mi codigo sera el byte de unidades
> hasta que introduzca el 2 ; luego 1 pasara a decenas y 2 a unidades ........



Es así, cuando uno hace todo 'a mano' como es en el caso de los microcontroladores, donde no hay windows ni nadie que nos solucione todo, hay que hacerlo uno mismo y ahí uno se da cuenta que hasta lo mas simple no es tan simple. 

Yo que tu la primer digitación la pondría en las unidades, al ingresar otro número, deberás mover la unidad para la decena y el nuevo número pasará a ser la unidad. 



			
				ohbuiles dijo:
			
		

> El codigo de Shakaran apenas lo voy a revisar , tuve un accidente en motocicleta
> y me fracture el  quinto noseque carpio de la mano derecha , fuera tengo que cuidar
> mi bebe de 7 meses .



Lamento mucho que te haya ocurrido esto y espero que puedas salir adelante.

Saludos


----------



## merlosss (Mar 10, 2008)

Hola a todos, queria hacer una pregunta, no sobre el 877 sino del 16F88. Intento grabar una serie de 21 datos en la eeprom direccionando indirectamente con el registro INDF y FSR, pero solo me graba el primero de los datos, y además depurándolo con MPLAB, todos los datos correctos pasan por W con la instruccion MOVF  FSR,0. Aver si hay alguien que me pueda decir dnd esta el error. Dejo aqui la parte del código:

Comienza en bank0:

```
MOVLW	.21
	MOVWF	DATOS
	MOVLW	0x10
	MOVWF	DIRECCION_ESCRIBIR
	MOVLW	0x31
	MOVWF	FSR
SIGUIENTE_DATO
	MOVF 	DIRECCION_ESCRIBIR,0
	BANKSEL	EEADR ; Select Bank of EEADR
	MOVWF 	EEADR ; Data Memory address to write
	BANKSEL	INDF
	MOVF	INDF,0
	BANKSEL	EEADR ; Select Bank of EEADR	
	MOVWF 	EEDATA ; Data Memory Value to write
	BANKSEL EECON1 ; Select Bank of EECON1
	BCF 	EECON1, EEPGD ; Point to DATA memory
	BSF 	EECON1, WREN ; Enable writes
	BCF 	INTCON, GIE ; Disable INTs.
	MOVLW 	0x55
	MOVWF 	EECON2 ; Write 55h
	MOVLW 	0xAA
	MOVWF 	EECON2 ; Write AAh
	BSF 	EECON1, WR ; Set WR bit to begin write
	BSF 	INTCON, GIE ; Enable INTs.
	BCF 	EECON1, WREN ; Disable writes
	BANKSEL	FSR
	INCF	DIRECCION_ESCRIBIR,1
	INCF	FSR,1
	DECFSZ	DATOS,1
	GOTO	SIGUIENTE_DATO
```
Gracias de antemano y saludos a todos.


----------



## LxL (Nov 5, 2010)

Hola!
Yo tengo que grabar unos datos en una eprom... En la escuela tienen el grabador, pero tengo que llevar ya la tabla ya lista.
Pero nose como hacer la tabla, lo que tengo que hacer es pasar de binario a BCD, entonces la idea es que el binario entre como direccion y la salida sea el BCD. Si alguien sabe como hacer esa tabla, me dijeron que con bloc de notas se puede, pero no se como.


----------



## falcondj (Ago 4, 2011)

yo tambien presento el mismo problema solo que yo utlizo el lenguaje c me podrian hechar una mano como hagoa para guardar una clave en la eeprom pero presionando la tecla c de un teclado que cuando cambie de codigo se quede guardada en la eeprom despues de cortar la alimentacion del circuito muchas gracias


----------

