Autor Tema: Problemas de simulación y compilado en MPLAB IDE assembler  (Leído 2175 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado lu8djr

  • PIC10
  • *
  • Mensajes: 15
Problemas de simulación y compilado en MPLAB IDE assembler
« 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
« Última modificación: 16 de Febrero de 2018, 11:09:57 por lu8djr »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problemas de simulación y compilado en MPLAB IDE assembler
« Respuesta #1 en: 16 de Febrero de 2018, 15:22:27 »
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...

Código: [Seleccionar]
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:

Código: [Seleccionar]
test_dece
    movlw   .10
    subwf   dece,w
    btfsc   STATUS,C
    clrf    dece
test_cent

« Última modificación: 16 de Febrero de 2018, 15:37:13 por KILLERJC »

Desconectado lu8djr

  • PIC10
  • *
  • Mensajes: 15
Re:Problemas de simulación y compilado en MPLAB IDE assembler
« Respuesta #2 en: 16 de Febrero de 2018, 16:23:15 »
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


 

anything