Timer 1 no entra en rutina de interrupcion (CCS en MPLAB 8.90 con 16F877A)

(1/2) > >>

nickpic2013:

Buenas estimados, desde ya muchas gracias por la ayuda que puedan aportar. Estoy perdido con este tema y no le encuentro la vuelta. Realice un programa en el cual confguro el timer1 como interno, habilito las interrupciones debidas (TMR1IE y Global) y se activa el flag TMR1IF al desbordar pero nunca salta/entra a la rutina de interrupcion del timer1. Algo curioos que noto que ni bien configurado y hechado a funcionar el timer 1 a las dos instrucciones siguientes se desborda el Timer y se activa el flag - configuro el timer1 en 1, me da la sensacion de que para llegar a 65535 lo hace demasiado rapido (2 instruccones de "C"), no me parece  normal. Otro dato el desbordamiento se me genra dentro de un switch, igual probe de sacarlo de ahi al principio del programa para que no tenga problemas y se comportta igual. Bueno, espero puedan ayudarme. Muchas gracias.

BrunoF:
Hola!

vas a tener que mostrarnos el código para que podamos ayudarte!

nickpic2013:
Cita de: BrunoF en 14 de Mayo de 2013, 20:49:21

Hola!

vas a tener que mostrarnos el código para que podamos ayudarte!



Gracias estimado por la atencion. Agrego que hice una prueba con el timer 0 y se comporta igual, parece ser un problema general con las interrupciones. A alguien le paso esto antes??

KALLITOS:
Cita de: BrunoF en 14 de Mayo de 2013, 20:49:21

Hola!

vas a tener que mostrarnos el código para que podamos ayudarte!

nickpic2013:
Cita de: KALLITOS en 16 de Mayo de 2013, 09:43:44

Cita de: BrunoF en 14 de Mayo de 2013, 20:49:21

Hola!

vas a tener que mostrarnos el código para que podamos ayudarte!




Estimado, gracias por tu atencion. Abajo va el codigo. Te comento las pruebas realizadas, con un PIC16F877A programador ICD2 en MPLAB con lengiuaje CCS no me funcionaba en un programa bastante avanzado las interrupciones llegue a probar con al del timer 1 y 0. No entreba en las interrupciones, luego para descartar pruebo en un chip 18F874 y lo mismo. Para descartar que el problema no viene del programa hago una sencilla rutina de timer 1 (la pego abajo) con PIC18F877A y me sucede lo mismo. Ultima prueba, ejecuto la sencilla rutina de timer 1 en el 874 y lo mismo. Ya le desconfio al MPLAB con plugin CCS o al ICD2.
Algo que note: ni bien ejecuto la primera instruccion ya levanta el flag de interrupcion de timer 1 (en una de las veces se metio en la rutina de interrupcion, despues nunca mas) a lo que pongo el flag a 0, cuando desborda el timer1 se levanta el flag pero no salta a la rutina de intrrupcion. Probe con prescaler DIV 8 o DIV 1, no funciona igual.
Bueno eso es todo, va el codigo:


#include "16F874.h" //Incluye el archivo de cabecera para el PIC

#DEVICE  ICD=TRUE
//#DEVICE ADC=10

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT//INTRC_IO            //oscilador interno a 4Mhz
#FUSES PUT                      //Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
//#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#use delay(clock=4000000)  //clock de 4Mhz


int a = 0;
int b = 0;


#INT_TIMER1      //Interrupcion del timer 1
void atiende_timer1(void)
 {
   a = a + 1;
      
 }
 
 
 void main ()
{
   setup_timer_1 ( T1_DISABLED );
   set_timer1(0x0BDC);//Carga del TMR1
   enable_interrupts(GLOBAL);//Habilito interrupciones globale
   enable_interrupts(INT_TIMER1);//Habilito interrupción particular del TIMER1
   setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_1 );

   do//Bucle infinito hasta interrupción
   {
      b = b + 1;
      b = b + 1;
      
   }while(b < 200);
 
}

Navegación

[0] Índice de Mensajes

[#] Página Siguiente