Grabar en la EEPROM del 16F877A

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.
 
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
 

Adjuntos

  • teclado_128.txt
    3.4 KB · Visitas: 270
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...
 
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
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.

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
 
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.
 
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
 
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:
Código:
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.
 
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.
 
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
 
Atrás
Arriba