
#include <16f876a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use standard_io(b)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)


int  Led=0x00;
int  Offseth=0x00;
int  Offsetl=0x00;
char Onda='C';
char Keypress=' ';

void eco_offset(void);

#int_rda
void rda_isr() {

   Keypress=0x00;
   if(kbhit()){
      Keypress=getc();
   }
}

#int_RTCC
RTCC_isr(){

   // RB0
   Switch(Led){
      Case 0: output_high(PIN_B0);
              set_timer0(Offseth);
              break;
      Case 1: output_low(PIN_B0);
              set_timer0(Offsetl);
              break;
   }
   if(++Led>1){
      Led=0;
   }
}

void main() {

   setup_counters(RTCC_INTERNAL,RTCC_DIV_2); // TEST

   enable_interrupts(int_rda);
   enable_interrupts(global);


   printf("\r\n\PWM (RTCC) OS\r\n");
   
   Onda='C';
   Offseth=0x00;
   Offsetl=0x00;

   enable_interrupts(INT_RTCC);


   do {

      if(Keypress!=0x00){


         switch(Keypress){
            // Tipo de Onda
            case 'c': Onda='C';
                      break;
            case 'h': Onda='H';
                      break;
            case 'l': Onda='L';
                      break;
            // Incrementando y decrementando periodos
            case '+': if(Onda=='C'){ ++Offseth; ++Offsetl; }
                      if(Onda=='H'){ ++Offseth; } 
                      if(Onda=='L'){ ++Offsetl; } 
                      break;
            case '-': if(Onda=='C'){ --Offseth; --Offsetl; } 
                      if(Onda=='H'){ --Offseth; } 
                      if(Onda=='L'){ --Offsetl; } 
                      break;
            // Periodos Prefijados
            case '1': if(Onda=='C'){ Offseth=0; Offsetl=0; }
                      if(Onda=='H'){ Offseth=0; } 
                      if(Onda=='L'){ Offsetl=0; } 
                      break;
            case '2': if(Onda=='C'){ Offseth=128; Offsetl=128; }
                      if(Onda=='H'){ Offseth=128; } 
                      if(Onda=='L'){ Offsetl=128; } 
                      break;
            case '4': if(Onda=='C'){ Offseth=192; Offsetl=192; }
                      if(Onda=='H'){ Offseth=192; } 
                      if(Onda=='L'){ Offsetl=192; } 
                      break;
         }
         eco_offset();

         Keypress=0x00;
      }


   } while (TRUE);

}

void eco_offset(void){
   printf("\r\nOnda %c h%u l%u\r\n",Onda,Offseth,Offsetl);
}

