TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: lu8djr en 16 de Febrero de 2018, 11:05:57
-
Buenos días!!!!
Tengo un problema que no alcanzo a descifrar. Estoy desarrollando un contador ascendente y descendente usando un pic 16f84a y 4 display led.
El código tiene varios años de realizado, y hace poco decidí agregarle funcionalidades que no tenia. Una de ellas es que guarde en EEPROM el ultimo numero ingresado para, en el caso de corte de energia inicie desde donde estaba.
Pero el dolor de cabeza comenzo cuando agregue las rutinas para esto. Adjunto el codigo para que evaluen:
Concretamente en la simulación me hace SALTOS RAROS cuando retorna de CALL eepromvrf luego de esto me hace saltos que no siguen la lógica. Lo curioso es que quitando estas rutinas la simulación es correcta :5]
Gracias por su tiempo
-
Pone la tabla cerca del comienzo y no vas a tener mas problemas.
Tu problema es que la tabla ahora recae sobre la direccion de PC 0x117, cuando vos realizas una instruccion sobre el PCL, la parte "alta" la toma de PCLATH
Entonces al momento de ejecutar el ADDWF el calculo te tira PCLATH:(0x17+W) como PCLATH es 0, se produce un "salto" a la direccion de PC 0x018
Esto ocurre con instrucciones que afectan al PC directamente a sus registros, los CALL y RETURN guardan y usan todo el PC, por eso no hubo problemas de ejecutar el CALL desde el comienzo
Soluciones hay 2. O tenes en cuenta el PCLATH, en este caso si es el unico lugar donde tenes tablas y actuas sobre el PC, pone el PCLATH a 1.
O mover la tabla al comienzo, asi el PCLATH se mantiene en 0 y no te preocupas por el mismo.
EDIT: Ahh y una cosa mas...
test_dece
movlw .9
subwf dece,w
btfss STATUS,C
goto test_cent ; dece es menor que 9
btfss STATUS,Z
goto clr_dece ; dece es mayor que 9
goto test_cent ; dece es igual a 9
clr_dece
clrf dece
test_cent
Es mas simple, jugando con la logica:
test_dece
movlw .10
subwf dece,w
btfsc STATUS,C
clrf dece
test_cent
-
Gracias !!! MIL!!!
Desprolijidad fea lo de la tabla... Me gusto la solución mas lógica!!! en fin ya aprendere!!!
Muchisimas gracias por su tiempo