Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: DARPE777 en 13 de Noviembre de 2017, 10:20:02
Título: No funcionan la interrupciones en la pagina1 del pic16f877A
Publicado por: DARPE777 en 13 de Noviembre de 2017, 10:20:02
Ante todo, hola a todos. He leído mucho pero no encuentro la solución. Estoy realizando un programa que se me esta haciendo extenso. Necesito otra pagina mas para seguir programando. Pero me doy cuenta que en la página 0 del pic si funcionan las interrupciones pero en la pag 1 no. ( Programo en ASM) Antes cuando llego a la interrupción guardo w,fsr,pclach ,status y los devuelvo a su estado antes de rtfie y borro las banderas, lo he mirado con el debug y un Icd3 . En la pag1 se encuentra Intcon = 11010011: Activado GIE, INTE, INTF en PIE2 00000001 Activado CCP2IE y la bandera activada en CCP2IF. Con todo esto mirando en un bucle en la PAG1 el micro no activa la interrupción. Me estoy volviendo loco , ¿en què fallo?. Me direcciono a las páginas siempre pclach antes y después de la intrucción CALL. Una mano por favor y si no al cuello :oops: :oops: Si se necesita tengo el programa en.asm Un saludo y gracias de antemano. Cualquier ayuda sera muy agradecida.
Perdonar creo que este no es foro donde tiene que estar, ruego a los moderadores que lo muevan a su sitio, disculpen mi torpeza.
Título: Re:No funcionan la interrupciones en la pagina1 del pic16f877A
Publicado por: KILLERJC en 13 de Noviembre de 2017, 13:36:53
Proba creando un codigo de ejemplo..
En ves de usar tu programa, asi evitas cualquier problema del otro codigo. Crea un codigo que el CCP en modo comparacion cambie el estado de una salida y nada mas. El programa que te quede asi:
Código: ASM
ORG 0x00
GOTO INICIO
ORG 0x04
GOTO INTERRUPCION
INTERRUPCION:
;Aca codigo de guardar contexto
;Codigo de interrupcion
;Codigo de restauracion de contexto
RETFIE
INICIO:
;Aca codigo de configuracion de puertos y CCP
GOTO LOOP
ORG 0x800
LOOP:
GOTO LOOP
Si eso funciona entonces seguramente este algo mal en el programa. Ya que estariamos en la pagina 1, y si estaria funcionando.
Cuando ocurre una interrupcion se pone en el PC 0x004 asi que no hay forma por mas que estes en otra pagina, ya que no influye el PCLATH, en los RETURN y RETFIE tampoco importa el PCLATH ya que se toma desde el PC los 13bits y pasan al PC. La unica duda que tengo es si al llamarse la interrupcion la direccion guardada tiene en cuenta el PCLATH, pero me parece que no deberia.
Por ultimo revisa si no estas pasandote en llamadas anidadas y estes provocando un overflow del stack.
Título: Re:No funcionan la interrupciones en la pagina1 del pic16f877A
Publicado por: DARPE777 en 13 de Noviembre de 2017, 14:50:59
Gracias por responder. Esta noche miraré a ver si me he sobrepasado en el stack. Lo otro lo hice con mi programa y no funciona así q lo haré como tú dices para probar. Gracias de nuevo y te tendré informado.
Título: Re:No funcionan la interrupciones en la pagina1 del pic16f877A
Publicado por: DARPE777 en 13 de Noviembre de 2017, 20:40:48
Imposible mirar el stack en modo debug con el Icd3, en el mplab8.9 y en mplabX4.0. Muchas gracias de todas formas,seguro que será una tontería pero me esta dando uno de los mayores rompederos de cabeza por hobby de vida. :D :D :D Me tiro por la segunda opción. Volver a escribirlo pero primero probando desde las 4pag del micro.
Título: Re:No funcionan la interrupciones en la pagina1 del pic16f877A
Publicado por: KILLERJC en 13 de Noviembre de 2017, 22:51:41
Es que el stack no es accesible, y es por hardware. Probaste realizar un codigo como dije ?
Título: Re:No funcionan la interrupciones en la pagina1 del pic16f877A
Publicado por: DARPE777 en 14 de Noviembre de 2017, 05:50:30
No he tenido tiempo. Tengo dos rutinas de 4 años y de 1 año q comen todo el tiempo del mundo así q son las noches donde saco mi tiempo. El stack lo conseguí ver en modo simulado en mplab X y lo q vi es q tenía anidado 6 pero en otra sección del programa. Así que esta noche estaré otra vez para probar. Te tengo informado y gracias por las molestias q te estás tomando
Título: Re:No funcionan la interrupciones en la pagina1 del pic16f877A
Publicado por: DARPE777 en 15 de Noviembre de 2017, 06:38:44
Solucionado. Ahora si alguien me lo puede explicar se lo agradezco. ¿Qué diferencia existe entre estas dos cosas? ORG 0x00 GOTO INICIÓ ORG 0x04 GOTO INTERRUPCIÓN
INTERRUPCIÓN
ORG 0x00 GOTO INICIO ORG 0x04
INTERRUPCIÓN
Con esta última funciona.
Un saludo
Título: Re:No funcionan la interrupciones en la pagina1 del pic16f877A
Publicado por: KILLERJC en 15 de Noviembre de 2017, 08:24:47
Es que el GOTO utiliza el PCLATH... :D
Y en el otro no tenes un GOTO, sino que entra directamente a la interrupcion.
Ahora veo el problema, ni siquiera se me habia ocurrido jeje, si queres usar el goto, deberias guardar el PCLATH, ponerlo a 0 y luego si ir al GOTO, todo eso sin modificar los registros STATUS/W En resumen deberias tener la rutina de guardado de contexto ubicado en ORG 0x04 y recien alli ubicar el GOTO a tu rutina de interrupcion.
Por si no quedo claro... En el primer programa tu memoria queda:
0x0000 GOTO INICIO 0x0001 ADDLW 0xFF ; Creo que esto esta por default que es el valor 0xFF 0x0002 ADDLW 0xFF 0x0003 ADDLW 0xFF 0x0004 GOTO 0x0005 ; Si es que tenes tu rutina asi como esta en el primer codigo 0x0005 MOVF xxx ; Primera instruccion de INTERRUPCION
vs 2do programa
0x0000 GOTO INICIO 0x0001 ADDLW 0xFF ; Creo que esto esta por default que es el valor 0xFF 0x0002 ADDLW 0xFF 0x0003 ADDLW 0xFF 0x0004 MOVF xxx ; Primera instruccion de INTERRUPCION
En si el micro va a ir a 0x0004 y ejecutar esa instruccion primero, el resultado es identico si observas. Excepto que con mas paginas el GOTO se ve afectado por el PCLATH
Título: Re:No funcionan la interrupciones en la pagina1 del pic16f877A
Publicado por: DARPE777 en 15 de Noviembre de 2017, 10:31:35
Muchas gracias, lo he comprendido, ya decía yo que tenía que ser un fallo tonto. Al final estoy aprendiendo más con los fallos que leiendo. :D Ahora ya si puedo acabar el proyecto, tengo ganas de probar otros micros y no se con cuál empezar. Bueno muchas gracias por todo. Te debo un favor.
Título: Re:No funcionan la interrupciones en la pagina1 del pic16f877A
Publicado por: KILLERJC en 15 de Noviembre de 2017, 11:51:43
Citar
Muchas gracias, lo he comprendido, ya decía yo que tenía que ser un fallo tonto. Al final estoy aprendiendo más con los fallos que leiendo. :D
Es asi normalmente.. de todas formas no desmerece a leer.
Citar
Ahora ya si puedo acabar el proyecto, tengo ganas de probar otros micros y no se con cuál empezar.
En si la arquitectura del PIC16 se comparte con toda esa familia. Por lo que usar este micro u otro la diferencia va a ser los modulos. Y en el caso de los ultimos PIC16 ( Uno no tan ultimo es el PIC16F1707) poseen un par mas de funcionalidades, otro FSR, nuevas instrucciones para el direccionamiento indirecto, W es un registro accesible, registro aparte para indicar el banco, etc, pero siempre respetando la misma arquitectura.
La otra es irte a PIC18, ya alli cambia la arquitectura, y va a ser distinto programar en ASM, algunas similitudes y otras no. Pero va a ser algo nuevo. Y por supuesto mientras mas nuevos, seguramente tengan alguna mejora respecto de los viejitos.