como hacer una tabla muy extensa con un pic

Hola he sido autodidacta hasta ahora porque no tengo a nadie que me enseñe a usar pics asi que espero que alguien me pueda ayudar con un problema por favor, mi problema es el siguiente:
Estoy usando un pic 16f877A al cual le asigno una entrada en el puerto B y quiero que para cada cambio de un bit me genere una salida de 19.16 osea que vaya desde cero a 4905, estos valores los debo mostrar en 4 dispalys de 7 segmentos.
Lo que estoy haciendo es poner 2 tablas muy extensas de 256 valores hexadecimales por los puertos C (unidades y decenas) Y D (centenas y millares), esto lo mando a decoders y de ahi a los displays, pero llega un momento que el pic se "traba" desde un valor en adelante, no se si se llene la memoria o que pasa porque no me marca error ni nada. Por favor quien me pueda ayudar con mi problema o decirme de que otro modo lo puedo resolver estare muy agradecido. aqui esta el programa por si lo quieren checar
 

Adjuntos

  • Tabla extensa.doc
    65.5 KB · Visitas: 84
el manejo de tablas extensas en un PIC requiere de ciertos cuidados... veo en tu programa que solo estas cargando PCL y esa es la razon de que se pierda el programa... para que funciones primero tienes que cargar PCLATH con la parte alta de la direccion de la tabla y despues hacer la busqueda con PCL del modo siguiente:

Código:
	ORG 0x0200	;Se obliga al compilador a escoger una direccion definida

tabla1:	movlw	h'02'		;cargamos parte alta de la direccion en pclath
		movwf	pclath		;
		movf	salto,w		;cargamos el valor de busqueda en w
		addwf	pcl,f		;salta a buscar valor
		retlw	(valor1)
		retlw	(valor2)
		retlw	(valor3)
		....
		....
		....
		retlw	(valor251)	;ojo, como ya se usaron 4 direcciones para hacer
							;el preparativo de salto solo podemos tener una
							;tabla de 251 valores (251+4=255)

	ORG 0x0300	;Se obliga al compilador a escoger una direccion definida

tabla2:	movlw	h'03'		;cargamos parte alta de la direccion en pclath
		movwf	pclath		;
		movf	salto,w		;cargamos el valor de busqueda en w
		addwf	pcl,f		;salta a buscar valor
		retlw	(valor1)
		retlw	(valor2)
		retlw	(valor3)
		....
		....
		....
		retlw	(valor251)	;ojo, como ya se usaron 4 direcciones para hacer
							;el preparativo de salto solo podemos tener una
							;tabla de 251 valores (251+4=255)
 
Atrás
Arriba