RESUELTO: Pongo aquí mi código, ¡espero que ayude a alguien! ^^ CONSEJO: Mi problema fue porque estaba comparando si PORTBbits.RB3 == 0 o == 1; la solución ha estado comparando una variable en lugar de un estado.
#include <xc.h>
#include<plib/timers.h>
#define _XTAL_FREQ 40000000
unsigned char config1;
unsigned int timer_value;
unsigned int tpr;
int counter=0;
void main(void) {
TRISBbits.RB3 = 0;
PORTBbits.RB3 = 0;
// 1/1 prescalar
T1CONbits.T1CKPS1 = 1;
T1CONbits.T1CKPS0 = 1;
// Use Internal Clock
T1CONbits.TMR1CS = 0;
// Timer1 overflow interrupt
PIE1bits.TMR1IE = 1;
// Enable Timer 1
T1CONbits.TMR1ON = 1;
INTCONbits.PEIE = 1; // Enable Perpherial Interrupt
INTCONbits.GIE = 1; // Enable Global Interrupt
while(1)
{
}
}
void interrupt high_priority lowISR(void) {
if (PIR1bits.TMR1IF == 1) {
if(counter == 0)
{
PORTBbits.RB3 = 1;
counter = 1;
}
else if(counter == 1)
{
PORTBbits.RB3 = 0;
counter = 0;
}
TMR1 = 0X00;
PIR1bits.TMR1IF = 0;
}
}
En primer lugar, me presento! Soy Manuel y como puedes ver soy nuevo en esta web. ¡Ayudaré tanto como pueda!
En segundo lugar, estoy trabajando con PIC18F2520 con el compilador XC8 y quiero recibir un código infrarrojo. Para eso, necesito trabajar con Timers para la lectura de la señal, pero no lo hago funcionar. He estado buscando este tema y no lo he encontrado.
Consejo: la configuración de Pragma está escrita en otro archivo.
Cuando ejecuto este código en proteus, parece hacer cualquier cosa. ¿Cual podría ser el problema? Por cierto, en realidad estoy usando mi PIC18 con un oscilador externo.
Muchas gracias!
¿Cuál podría ser el problema? ¿Podrían ser las definiciones pragma?
EDITAR: código actualizado en la publicación principal, perdón por todos los inconvenientes!