TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: vpachong en 12 de Enero de 2013, 04:07:16

Título: Problemas con las subrutinas en el PIC12F675
Publicado por: vpachong 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.
Título: Re: Problemas con las subrutinas en el PIC12F675
Publicado por: willynovi 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  :?
Título: Re: Problemas con las subrutinas en el PIC12F675
Publicado por: vpachong 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.
Título: Re: Problemas con las subrutinas en el PIC12F675
Publicado por: tapi8 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...
Título: Re: Problemas con las subrutinas en el PIC12F675
Publicado por: BrunoF 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.