Lenguaje ensamblador para PIC desde 0

Revisa bien el código. Me maree un poco pero en la rutina de interrupción, cuando saltas a "fin" chequeas "btfsc PORTD,0" si es 0 pasa a saltar a varios lados y de ahí se va al programa inicial, no llega a "salir" nunca de la interrupción y por salir me refiero a dar por terminada esa etapa.

Puede que ese no sea el problema pero ahí veo un error feo.

Resumido: Puede pasar a "Alarma" y de ahí se va a "Control" sin ver un "RETFIE" jamás.

Además, busca en internet y añade la rutina para salvar el registro "STATUS" y "W" al entrar a la interrupción, evitara que el programa se vuelva loco. Este puede ser el segundo problema.
Que torpe, tenes razon, podria ir a salir de la interrupcion, la alarma en este punto no es relevante.
Pregunta sin pensar, no puedo poner un RETFIE en la rutina de alarma que esta en el programa principal?
Ya lo vere, por ahora voy avanzando gracias a estas pistas de ayuda.
Gracias
 
Llevo un tiempo programando (no demasiado en verdad) y nunca tuve la ocasión o necesidad de usar una interrupcion por eso es que me esta costando, igual que me costo aprender todo lo anterior je je.
Me pondre a investigar para aprender un poco mas del emulador, lo suyo es un consejo muy apropiado.

Por ahora con las opiniones y pistas recibidas logre que funcione casi correctamente. Hice unas variaciones por mi cuenta, en vez de volver a Control vuelvo a inicio y asi hace casi lo que corresponde.
Y digo casi por que "algunas veces" al cumplir el ciclo del TIMER se saltea la rutina que debe cumplir y comienza de nuevo. El problema lo veo en Pru_Func
Ya lo voy a vencer 💪💪, solo es cuestion de aprender mas.
Gracias mil
Preste atención a lo que le sugieren los colegas.....El registro "STATUS" , "W" y cualquier otro en uso, deben ser siempre salvados con las instrucciones PUSH & POP en todos los procesadores del UNIVERSO para atender una interrupción


Halc%C3%B3n-Milenario-aminoapps-1.jpg
 
Llevo un tiempo programando (no demasiado en verdad) y nunca tuve la ocasión o necesidad de usar una interrupcion
Con lo que comentas y el código que escribís, te recomiendo aprender un lenguaje de alto nivel... específicamente el lenguaje C. En esos lenguajes las estructuras de control te impiden hacer el desastre de saltos a cualquier lado que estas haciendo.
Y si has programado en assembler sin usar interrupciones...es que has programado poco y mal.
 
Revisa bien el código. Me maree un poco pero en la rutina de interrupción, cuando saltas a "fin" chequeas "btfsc PORTD,0" si es 0 pasa a saltar a varios lados y de ahí se va al programa inicial, no llega a "salir" nunca de la interrupción y por salir me refiero a dar por terminada esa etapa.

Puede que ese no sea el problema pero ahí veo un error feo.

Resumido: Puede pasar a "Alarma" y de ahí se va a "Control" sin ver un "RETFIE" jamás.

Además, busca en internet y añade la rutina para salvar el registro "STATUS" y "W" al entrar a la interrupción, evitara que el programa se vuelva loco. Este puede ser el segundo problema.
El compañero tiene razón en que debes salvar el registro STATUS y el registro W, sin esto alteras el contenido de los registros en la subrutina y cuando retorna tiene valores diferentes. En las hojas de especificaciones viene el código que se recomienda para guardar STATUS y W.
Al inicio va el nombre de tu rutina de interrupcion y al final RETFIE.

1663172097673.png
 
Atrás
Arriba