Autor Tema: Problemas con las subrutinas en el PIC12F675  (Leído 2376 veces)

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

Desconectado vpachong

  • PIC10
  • *
  • Mensajes: 3
Problemas con las subrutinas en el PIC12F675
« en: 12 de Enero de 2013, 04:07:16 »
Buen dia a todos:

Les escribo ya que tengo un inconveniente con las subrutinas en el microcontrolador PIC12F675, ya que al momento de llegar a la instruccion de llamado a subrutina (CALL) esta no salta ni ejecuta la subrutina correspondiente, hice las pruebas del codigo tanto con el MPLAB como con el simulador PROTEUS.

Les adjunto una copia del codigo fuente del programa que estoy diseñando con este micro, es un circuito que enciende un LED por un tiempo cuando uno de sus pines configurado como entrada cambia de estado (sea con un pulsador o con otro medio), no se si haya algun problema con el codigo o hay que configurarle algo adicional para que el micro responda a las subrutinas.

Agradezco su ayuda.

Gracias.

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Problemas con las subrutinas en el PIC12F675
« Respuesta #1 en: 12 de Enero de 2013, 09:46:07 »
Cual es la llamada CALL que no te atiende? La primera?

CALL  3FFH

Que instrucción hay en la direccion de programa 3FFH?

Según  veo hay deberia haber un

RETLW xx

para que al volver la instruccion siguiente cargue el OSCCAL con xx.

Si en 3FFH no hubiera nada creo que tu programa se sigue ejecutando y como esa direccion es la última entonces volveria al inicio con lo que no avanza tu programa.

Quizas sea eso  :?
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado vpachong

  • PIC10
  • *
  • Mensajes: 3
Re: Problemas con las subrutinas en el PIC12F675
« Respuesta #2 en: 16 de Enero de 2013, 02:26:15 »
la llamada CALL 3FFH forma parte de la rutina de calibracion del oscilador interno, que el fabricante recomienda colocar antes de iniciar el programa:

        bsf         STATUS,RP0
        call        3FFh
        movwf   OSCCAL
        bcf         STATUS,RP0

La que no me atiende son las llamadas a la subrutina RETARDO, un retardo de 25mS que se encuentra al final del programa, no se si esta llamada CALL 3FFH influya en la llamada que hago a la subrutina RETARDO.

Muchas gracias por su ayuda.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problemas con las subrutinas en el PIC12F675
« Respuesta #3 en: 16 de Enero de 2013, 15:09:44 »
He intentado simularlo en MPLAB y no me compila, me tira varios errores:

Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p12F675 "llamada.asm" /l"llamada.lst" /e"llamada.err" /d__DEBUG=1
Warning[205] C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\LLAMADA.ASM 40 : Found directive in column 1. (__CONFIG)
Error[149]   C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\LLAMADA.ASM 47 : Directive only allowed when generating an object file
Error[149]   C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\LLAMADA.ASM 54 : Directive only allowed when generating an object file
Error[149]   C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\LLAMADA.ASM 59 : Directive only allowed when generating an object file
Message[305] C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\LLAMADA.ASM 112 : Using default destination of 1 (file).
Message[305] C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\LLAMADA.ASM 145 : Using default destination of 1 (file).
Error[149]   C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\LLAMADA.ASM 167 : Directive only allowed when generating an object file
Halting build on first failure as requested.

Aqui:

INT_VAR      UDATA_SHR   0x20

Aqui:

RESET_VECTOR   CODE   0x000      ; Vector de reset

Aqui:

INT_VECTOR   CODE   0x004        ; Vector de interrupcion, no hay interrupciones

Y aqui:

EE      CODE   0x2100

Yo tengo la version v8.70, no se si en la tuya compila...

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Problemas con las subrutinas en el PIC12F675
« Respuesta #4 en: 16 de Enero de 2013, 15:28:27 »
la llamada CALL 3FFH forma parte de la rutina de calibracion del oscilador interno, que el fabricante recomienda colocar antes de iniciar el programa:

        bsf         STATUS,RP0
        call        3FFh
        movwf   OSCCAL
        bcf         STATUS,RP0

La que no me atiende son las llamadas a la subrutina RETARDO, un retardo de 25mS que se encuentra al final del programa, no se si esta llamada CALL 3FFH influya en la llamada que hago a la subrutina RETARDO.

Muchas gracias por su ayuda.

necesitás el RETLW XX que te menciona willynovi. Esa línea en la posición 0x3FF viene con un valor calibrado en fábrica para lograr el menor error posible del oscilador interno. Ese valor debe ser guardado y es único para cada uno de los PICs que salen de fábrica. Si no pones el RETLW 0x?? el uC se va a reiniciar constantemente por un desbordamiento de la pila ya que llama a la posición 0x3FFF, la cual no posee el RETLW correspondiente, por lo que el PC desborda y vuelve a 0x000 volviendo una y otra vez a realizar la llamada sin descargar el STACK de llamadas, produciendo un RESET cada ocho ingresos.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.


 

anything