main.c
#include <p18f452.h>
#include <timers.h>
#include <delays.h>
#include "lcd.h"
#include "ir2.h"
#pragma config WDT = OFF
#pragma config OSC = HSPLL
unsigned char update;
void handle_interrupt(void);
void handle_capture(void);
#pragma code interrupt_code = 0x08
void interrupt(void)
{
_asm
goto handle_interrupt
_endasm
}
#pragma code
#pragma interrupt handle_interrupt
void handle_interrupt(void)
{
if (PIR1bits.TMR1IF) {
ir_timeout();
PIR1bits.TMR1IF = 0;
}
if (PIR1bits.CCP1IF) {
ir_interrupt();
PIR1bits.CCP1IF = 0;
}
}
void main(void)
{
char str[8];
Delay100TCYx(10);
INTCON = 0;
lcd_init();
lcd_i_write(0x80);
putrs_lcd("IR decoder");
ir_init();
ir_enable();
INTCONbits.GIE = 1;
update = 0;
while (1) {
if (ir_flags.decoded) {
lcd_i_write(0x1);
lcd_i_write(0x80);
if (ir.type == IR_RC5) {
putrs_lcd("RC5");
} else if (ir.type == IR_RC6) {
putrs_lcd("RC6");
} else if (ir.type == IR_JVC) {
putrs_lcd("JVC");
} else if (ir.type == IR_NEC) {
putrs_lcd("NEC");
} else if (ir.type == IR_NEC_EXTENDED) {
putrs_lcd("NEC EXTENDED");
} else if (ir.type == IR_SONY_12BITS){
putrs_lcd("SONY 12 BITS");
} else if (ir.type == IR_SONY_15BITS){
putrs_lcd("SONY 15 BITS");
} else if (ir.type == IR_SONY_20BITS){
putrs_lcd("SONY 20 BITS");
} else if (ir.type == IR_SHARP) {
putrs_lcd("SHARP");
} else if (ir.type == IR_PACE) {
putrs_lcd("PACE");
} else {
putrs_lcd("UNKNOWN");
}
lcd_i_write(0xc0);
lcd_d_write('A');
lcd_d_write('=');
puts_lcd(itox(ir.address, str));
lcd_d_write(' ');
lcd_d_write('C');
lcd_d_write('=');
puts_lcd(btox(ir.command, str));
lcd_d_write(' ');
lcd_d_write('E');
lcd_d_write('=');
puts_lcd(btox(ir.extra, str));
ir_enable();
}
}
}