
#include <18f4550.h>
#fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOPBADEN,NOLVP,NOCPD,NODEBUG,NOWRT,NOVREGEN
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#bit UCON_EUSB = 0xF6D.3

const long Low    = 666;
const long Medium = 333;
const long Fast   = 111;
const long Mega   = 55;
const long Ultra  = 22;

char Keypress=' ';
char Speed;


#int_rda
void serial_isr() {

   Keypress=0x00;
   if(kbhit()){
      Keypress=getc();
      if(Keypress!=0x00){
         putchar(keypress);
         if((keypress>'0')&&(keypress<'6')){
            Speed=keypress;
         }
         if(keypress=='F'){
            Speed='\0';
         }
         keypress=0x00;
      }
   }
}

void My_Delay(void){

   Switch(Speed){
      case '1': delay_ms(Low);    break;
      case '2': delay_ms(Medium); break;
      case '3': delay_ms(Fast);   break;
      case '4': delay_ms(Mega);   break;
      case '5': delay_ms(Ultra);  break;
   }
}

void main() {

   int i=0,j;

   disable_interrupts(global);
   disable_interrupts(int_timer1);
   disable_interrupts(int_rda);
   disable_interrupts(int_ext);
   disable_interrupts(int_ext1);
   disable_interrupts(int_ext2);

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(FALSE);
   setup_psp(PSP_DISABLED);
   setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
   setup_timer_0(RTCC_OFF);
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   port_b_pullups(FALSE);
   set_tris_e(0b00010000);
   set_tris_c(0b10000000);
   UCON_EUSB=0;
   enable_interrupts(global);
   enable_interrupts(int_rda);

   Output_c(0b00000000);

   delay_ms(500);
   Speed='4';
   printf("\r\n\RRBOARD2 Listen on Ethernet\r\n\n");
   printf("PORTC Press 1, 2, 3, 4, 5 or F\r\n\n");

   do {

      Output_c(i++);
      My_Delay();
      if(i==0){
         for(j=1;j<5;j++){
            Output_c(0xff);
            My_Delay();
            Output_c(0x00);
            My_Delay();
         }
      }

   } while (TRUE);
}
