Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: nrivas en 05 de Marzo de 2016, 17:30:54
Título: Problemas flags timer1
Publicado por: nrivas en 05 de Marzo de 2016, 17:30:54
Estimados: estoy haciendo un programa con interrupcion del timer1 y necesito saber como poder leer el flag de la interrupcion para saber si esta en 1 o en 0. El proyecto es con el PIC16F873 en ccs, les adjunto el codigo para que tengan mas claro todo.
#include <16F873A.h> #device adc=8 #FUSES NOWDT //No Watch Dog Timer #FUSES HS //High speed Osc (> 4mhz) #FUSES NOPUT //No Power Up Timer #FUSES NOPROTECT //Code not protected from reading #FUSES NODEBUG //No Debug mode for ICD #FUSES NOBROWNOUT //No brownout reset #FUSES NOLVP //No low voltage prgming, #FUSES NOCPD //No EE protection #use standard_io(A) #use standard_io(B) #use standard_io(C) #use delay(clock=4000000)
A lo que llamo timer1 es el flag que quiero leer !
Título: Re:Problemas flags timer1
Publicado por: KILLERJC en 05 de Marzo de 2016, 17:43:18
Primero que nada:
Código: C
set_adc_channel(0);//lectura canal 0
a=read_ADC();
set_adc_channel(1);//lectura canal 1
b=read_ADC();
Eso deberia estar en el main, read_adc() espera hasta que tengas un resultado, por lo tanto se queda en la interrupcion, deberias poner una variable de 1 bit a 1 y luego actuar acorde en el main()
Respecto a tu pregunta original, no veo por ningun lado que tengas definido que es timer1, lo cual no deberia compilar, si compila entonces timer1 se refire a otra cosa.
Código: C
int1 flagtimer1;
Otra cosa, es que siempre se pone el flag a 0, pero jamas a 1. No veo donde estas poniendo el flag a 1, lo cual los 2 ultimos if los deshabilita por completo.
Título: Re:Problemas flags timer1
Publicado por: nrivas en 05 de Marzo de 2016, 17:47:00
KILLERJC
efectivamente la variable timer1 no la he definido , simplemente queria ejemplicar que en esa variable quiero guardar el valor de la bandera cuando se ponga en 1 (cuando desborde timer1) o 0 en caso contrario. Y esa es mi duda .....
Título: Re:Problemas flags timer1
Publicado por: KILLERJC en 05 de Marzo de 2016, 18:46:52
podes usar tambien interrupt_active(int_timer1); para saber si efectivamente la flag esta en 1.
Pero eso lo vas a usar cuanod tenes desactivada las interrupciones. Tu interrupcion del timer deberia qudarte adentro del if asi:
if(cont==50){ timer1=1; }
Entonces en tu main(), preguntas por si timer1 es igual a 1, si es asi lo pones en 0 para cuando se ejecute de nuevo la interrupcion lo ponga a 1 y saber cuando es que entro alli.