creando un muy pequeño ejemplo
mdi=0; //Elfor faborece la interrupcion 25x10 mejor que 250
for(cx=0;25>cx;cx++){
if(lee!=0) { if(!mdi){ mdi=1; modifica(lee); lee=0; } }//trampas de juego
if(sx){ see(XX); pri(0,nu); } //sx=TRUE micro-sensor fue interrumpido para atender INT_EXT
delay_ms(10); } //BUENA 25 X 10
}///constancia de suceso elcons*250mlsgen lenguaje C ( a al menos en CCS) no conseguirás la precisión que buscas
en lenguaje C ( a al menos en CCS) no conseguirás la precisión que buscas, en tu caso tiene 2 opciones:
- trabajas los retardos en asm
- reduces el valor xx hasta que consigas los 500ms
Una cosa si el timer tiene que contar asta 255Si y obviamente necesitas de una interrupcion
¿sigue actuando bajo un delay
Usa un temporizador y su interrupción para conseguir lo que quieres.
Una cosa si el timer tiene que contar asta 255
¿sigue actuando bajo un delay
Si y obviamente necesitas de una interrupcion
CitarUsa un temporizador y su interrupción para conseguir lo que quieres.
Problematico. Si estaba utilizando un 2ºmicro a parte como contador del 1º pero al intentar librarme de el metiendole el timer1 en el 1º ocurre que si este esta sumerjido bajo otra interrupcion, no atiende al void timer1 (ni debe hacerlo Int_ext es prioritaria)CitarUna cosa si el timer tiene que contar asta 255
¿sigue actuando bajo un delay
Si y obviamente necesitas de una interrupcion
Si eso parece pero si este contador se desborda durante el delay() o otra interrupcion. Este sigue adelante de 0 a set_timer pero sin atender en el momento adecuado a todos los desbordamientos. De la manera en que e elavorado el 1º no puedo librarme del 2º es mejor que este se encarge aparte de los timer.
ocurre que si este esta sumerjido bajo otra interrupcion, no atiende al void timer1
Si eso parece pero si este contador se desborda durante el delay() o otra interrupcion. Este sigue adelante de 0 a set_timer pero sin atender en el momento adecuado a todos los desbordamientos. De la manera en que e elavorado el 1º no puedo librarme del 2º es mejor que este se encarge aparte de los timer.
Pues si la interrupción del temporizador sucede cuando se está atendiendo a otra interrupción, deberías sumar el valor acumulado, ya que el temporizador sigue contando los pulsos de reloj después de desbordase.
TMR1 += PR1_; // sumo el valor acumulado para compensar el error por la latencia de la interrupción
if (TMR1 < PR1_) TMR1 = 0xFFFF; // Si la suma es menor que PR1_, implica que hay que desbordar una segunda vez al temporizador
Que es CCP? Un memorizador de interrupciones?