[code=c]
#include <p18F458.h>
#include <usart.h>
#include <delays.h>

void rx_handler (void);
void wait_for_ENTER(void);

#define BUF_SIZE 25

/*
 * Step #1  The data is allocated into its own section.
 */
#pragma idata bigdata
char data[6][BUF_SIZE+1] = {
  { "String #0\n\r" },
  { "String #1\n\r" },
  { "String #2\n\r" },
  { "String #3\n\r" },
  { "String #4\n\r" }, 
  { "Invalid key (0-9 only)\n\r" }
};
#pragma idata

#pragma code rx_interrupt = 0x8
void rx_int (void)
{
  _asm goto rx_handler _endasm
}
#pragma code

#pragma interrupt rx_handler
void rx_handler (void)
{
    unsigned char c;
    //void wait_for_ENTER(); 
    c = ReadUSART();
    if (c >= '0' && c <= '9'){
        c -= '0';     
        PORTB = c;
        putsUSART (data[c]);
    }
    else{
        putsUSART (data[10]);
        PORTB = c;
    }
    /* Clear the interrupt flag */
    PIR1bits.RCIF = 0;
}
char s[] = "ATD+36205205201;";
unsigned char t = "a";
int i;
void main (void)
{
  /* Configure all PORTB pins for output */
  TRISB = 0;
TRISCbits.TRISC0 = 0;

  /*
   * Open the USART configured as
   * 8N1, 2400 baud, in polled mode
   */
  OpenUSART (USART_TX_INT_OFF &
             USART_RX_INT_ON &
             USART_ASYNCH_MODE &
             USART_EIGHT_BIT &
             USART_CONT_RX &
             USART_BRGH_HIGH, 129);

  /* Display a prompt to the USART */
  putrsUSART (
    "AT\r");
    //TXREG = 13;
  /* Enable interrupt priority */
  RCONbits.IPEN = 1;
  /* Make receive interrupt high priority */
 IPR1bits.RCIP = 1;
  /* Enable all high priority interrupts */
  INTCONbits.GIEH = 1;

  /* Loop forever */
    while (1){   
    }
   
}

void wait_for_ENTER(void)
{
 while (!DataRdyUSART());  // wait until there is a byte to read
 while( getcUSART() != 13 )  //
       {
       Delay10KTCYx(10);
      };
PORTCbits.RC0 = 1;
    // ASCII code 13 is the Carriage Return (ENTER) key 
}
[/code]