TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado 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.
-
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 :?
-
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.
-
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...
-
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.