View previous topic :: View next topic |
Author |
Message |
eduard001
Joined: 19 May 2014 Posts: 1
|
Control de timer por interrupciones externas? |
Posted: Mon May 19, 2014 5:47 pm |
|
|
Hola que tal?, soy nuevo en ccs y e tratado de controlar mi timer por medio de interrupciones externas pero no lo e conseguido. Lo que quiero lograr es:
Al tener una int_ext, inicie mi timer1 desbordándose una y otra ves. Contar las veces que se a desbordado y que al existir una nueva interrupción externa se detenga el conteo de desbordamientos e imprima el total de veces que se desbordo el timer entre una interrupción y otra.
Espero que alguien pueda ayudarme, saludos y gracias. Mi código es el siguiente.
Code: |
#include <16F877.h>
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B4,rcv=PIN_B5,bits=8)
#include <stdlib.h>
int16 conteo=0;
int escape=0;
#INT_EXT
IntRB0(){
escape++; /**incrementa el valor para usarlo como condicion**/
do {
set_timer1 (131); //recarga del TMR1
conteo++; /**Se incrementa cada ves que se desborda timer1**/
printf("El conteo es: %Lu\r",conteo);
}while(escape==1);
}
void main(){
enable_interrupts(INT_EXT);
ext_int_edge(L_TO_H); //config. de int. por flando de bajada
set_timer1 (131);
setup_timer_0(RTCC_INTERNAL |RTCC_DIV_4 );
enable_interrupts(GLOBAL); //activar interrupciones globals
while(true);
} |
|
|
|
asmboy
Joined: 20 Nov 2007 Posts: 2128 Location: albany ny
|
|
Posted: Mon May 19, 2014 7:15 pm |
|
|
esto es una locura
Code: |
escape++; /**incrementa el valor para usarlo como condicion**/
do {
set_timer1 (131); //recarga del TMR1
conteo++; /**Se incrementa cada ves que se desborda timer1**/
printf("El conteo es: %Lu\r",conteo);
}while(escape==1);
} |
DUH!! the exit condition is outside the loop !!!!
( and only exits the first time it is called )
and the ISR wont be called to change it since this is still in the handler...
not to mention without a read of the B_port - the int flag won't clear either.
ouch.....esto es realmente muy pobre programación |
|
|
Humberto
Joined: 08 Sep 2003 Posts: 1215 Location: Buenos Aires, La Reina del Plata
|
|
Posted: Tue May 20, 2014 11:03 am |
|
|
Eduardo,
Como dijo asmboy, son muchos los errores en estas pocas líneas de código que has presentado. Para muchos de nosotros responder éste tipo de
consultas implica una respuesta larga, compleja y tediosa.
La utilización de interrupciones tiene algunas restricciones y es necesario comprender -de forma integral- el desempeño del hardware y del código.
Me permito darte algunas sugerencias. Hay otros buenos foros de PIC + lenguaje C en Español mas adecuados para principiantes. Por otro lado
te recomiendo que estudies más profundamente el funcionamiento de los módulos internos de un MCU y que refuerces tu aprendizaje de C, en
forma metódica y gradual.
Por otro lado, el idioma utilizado en éste foro es el Inglés. Permite que miembros de diferentes lenguas podamos compartir conocimientos y experiencias.
saludos cordiales, _________________ Humber |
|
|
|