#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include ".\include\usb_cdc.h"
//Variables
//Constantes, intentar usar define
//Variables 1 bit
int1 fresh_sta;//Por ahora no usada
//Variables 8 bit
int8 byte1 = 0;//byte memorizar mando
int8 byte2 = 0;//byte memorizar mando
int8 byte3 = 0;//byte memorizar mando
int8 byte4 = 0;//byte memorizar mando
int8 byte5 = 0;//byte memorizar mando
int8 contbit = 0;
//Defines
//#define sensor_ir input(PIN_B0)
#byte PORTB = 0xF81
#bit sensor_ir = PORTB.0
//INTERRUPCIONES
/*Interrupcion externa0, en la bajada.
*/
#int_EXT
void EXT_isr()
{
printf(usb_cdc_putc
, "\n\r Externa");//muestra estado //Se entra al empezar al recibir trama
if(!input(PIN_B0))//Sigue a nivel bajo??
{//Se resetea timer0 y se activa interrupcion
contbit = 0;//Resetea contador bits
setup_timer_0(0);
enable_interrupts(INT_RTCC);//Activa int. timer0
disable_interrupts(INT_ext);//Desactiva int. externa
printf(usb_cdc_putc
, "\n\r Bucle");//muestra estado }
/*printf(usb_cdc_putc, "\n\r Externa");//muestra estado
contbit = 0;//Resetea contador bits
setup_timer_0(0);
enable_interrupts(INT_RTCC);//Activa int. timer0
disable_interrupts(INT_ext);//Desactiva int. externa*/
}
//Interrupcion timer0
#int_RTCC
void RTCC_isr(){
printf(usb_cdc_putc
, "\n\r Timer");//muestra estado //se memorizan 40 bits en 5 bytes
if(contbit<8)//De 0 a 7
{
byte1= (byte1<<1)+ sensor_ir;
}
if(contbit>7 && contbit<16)
{
byte2= (byte2<<1)+ sensor_ir;
}
if(contbit>15 && contbit<24)
{
byte3= (byte3<<1)+ sensor_ir;
}
if(contbit>23 && contbit<32)
{
byte4= (byte4<<1)+ sensor_ir;
}
if(contbit>31 && contbit<40)
{
byte5= (byte5<<1)+ sensor_ir;
}
++contbit;
if(contbit==40)
{
contbit = 0;//Resetea contador bits
disable_interrupts(INT_RTCC);//Desactiva int. timer0
enable_interrupts(INT_ext);//Activa int. externa
printf(usb_cdc_putc
, "\n\r %x",byte1
);//muestra estado printf(usb_cdc_putc
, "\n\r %x",byte2
);//muestra estado printf(usb_cdc_putc
, "\n\r %x",byte3
);//muestra estado printf(usb_cdc_putc
, "\n\r %x",byte4
);//muestra estado printf(usb_cdc_putc
, "\n\r %x",byte5
);//muestra estado }
}
void main() {
//Inicia usb
delay_ms(300);
usb_cdc_init();
usb_init();
//Define flanco de bajada (Para la activacion de la interrupcion )
ext_int_edge(INT_EXT,H_TO_L);
enable_interrupts(INT_ext);
//Configurar timer1 y activar interrupcion
SETUP_TIMER_0(RTCC_INTERNAL|RTCC_DIV_16);
while(!usb_cdc_connected()) {}
usb_task();
if (usb_enumerated())
{//activa interrupcion externa
printf(usb_cdc_putc
, "Enumerado");//muestra estado enable_interrupts(GLOBAL);
}
while(true){}//Bucle eterno
}