Hola!bueno, antes de nada, otra vez gracias por las molestias.
Publicado por: vszener
Vamos a ver que nos aclaremos, quitando la instrucción sleep(); debe funcionar teóricamente.
El micro no se despierta del estado sleep mediante el timer, lo indica el data sheet.
Aparte, si que te enrará una vez, sólamente, en la interrupción, lo que pasa, que en dicha interrupción tienes puesto la instrucción de desactivar el timer1, así que no te entrará más.
Prueba con quitar la instrucción sleep(); (es obligatorio para que pueda el micro abordar la interrupción del timer), y ponerle en la rutina de interrupción, el intercambio de estado de, por ejemplo, un led.
Como bien dices, quitando la instruccion sleep() si que entra en la interrupcion. Voy a intentar probar algun modo de bajo consumo donde se pueda interrumpir el micro, a ver si se puede, solo que con el ccs no me aclaro mucho, pero bueno.
Publicado por: maunix
Bueno, las cosas que veo.
1) No has hecho arrancar a el timer, por eso hacer TMR1ON lo ha hecho andar y que se produzca la interrupción. (si te fijas es lo que puse en mi primera respuesta donde te preguntaba donde lo encendías al timer)
2) Es posible que no estés regresando del vector de interrupciones y/o que no estes borrando el flag de la interrupción del timer1. No se si el CCS hace esto automático o lo debes hacer tu. En concreto es PIR1.TMR1IF = 0 y PIE1.TMR1IE = 0
El pic que estas usando prevé el uso de 2 niveles de interrupción, ¿estás teniendo esto en cuenta?
3) Otra pregunta, si quitas todo lo relacionado al timer, esas instrucciones del LCD se procesan bien y se ven en el display? Acaso no será ese el problema?
Te digo lo que me comentas:
1)Eso ya lo sabía, solo que según entendí del CCS con la instrucción set_timer1() ya arrancaba al ponerle esto.
2)En teoría pone que el CCS ya lo borra automáticamente, pero probaré como dices dices a borrar los flags manualmente, ya que sólo me entra una vez en la interrupción (ya quité también la instucción de desactivar el timer, que eso era para probar una cosa).
Lo de los dos niveles de interupción no tengo ni idea, porque supuse que al poner enable_interrupts(int_timer1)
y después enable_interrupts(global) ya quedaría habilitada. ¿Tengo que hacer algo más?
3)El display funciona sin problemas, que ya lo estoy usando en el proyecto con modbus y funciona, y aquí también me está escribiendo, en el ejemplo(hasta que se interrumpe, claro, que ya no me pone nada
)
Es que me estoy haciendo un lío con el CCS...Como me siga atascando lo hago poniendo registro a registro y fuera (es que sola trabajara con la familia 8051 de atmel y el Keil y estoy un poco perdido...)