Claro entiendo! Pero con el timer no se como hacerlo, con la int r0 cada ves que se activa se que avanza el lectura, y no se como hacerlo con la interrupción RB por el pin 4 o por adc pin A1Pues lo mismo pero al revés.
Es pecado mortal motivo de excomunión colocar bucles, retardos y esperas a cualquier cosa dentro de una rutina de interrupción.
Esa es precisamente la idea, se usa una interrupción para NO hacer eso.
Si necesitas algo así (no sé para qué) usa flags. Es decir, cambias el valor de una variable y sales de la interrupción. En el bucle principal si esa variable es ta se hace tal cosa y si es cual se hace cual cosa.
A la rutina de interrupción se entra y se sale lo más rápidamente posible. Esa es la idea.
Mensaje automáticamente combinado:
Voy a revisar gracias por comentarMe tome el atrevimiento de modificar un poco el codigo, y eliminar cosas que no servian, como el timer2 y algo mas, como mejor formateo del codigo...
Hay una parte que no entiendo o esta mal.
Cuando lees los flancos, pones primero "set_timer1(0);", y luego asignas a la variable que sigue el valor de "get_timer1();", pero en todo caso sigue siendo 0, ya que lo reiniciaste.
Ademas en la simulacion, cuando el duty cicle es 50%, hace cosas raras, y pasa de 49,50,90,etc. Y cambie la frecuencia de 116 a 216Hz, y con 50% de duty cicle me marca 98%... No me puse a realizar bien el codigo, solo me base en lo que subiste, pero creo que esa parte tendrias que replanteartela.
Intente usar interrupciones con el timer para mostrar el display, pero por falta de experiencia y estudio, no fui capaz.
PD: Use la misma simulacion que subiste. Proteus v8.8, CCS C Compiler 4.104
Mensaje automáticamente combinado:
Se podría hacer por el pin 1 del adc, con interrupción de adc ?
Última edición: