#ifndef F_CPU
#define F_CPU 7372800
#endif

#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>  
#include <avr/interrupt.h>

  
#define BUFF_LEN 100
  
volatile char buffer[BUFF_LEN];
volatile uint8_t buff_cnt=0;

void uart_init(uint16_t baud, uint8_t mode)
{
	uint16_t ubrr= F_CPU/16/baud-1;
	/* Set baud rate */
	UBRRH = (unsigned char)(ubrr>>8);
	UBRRL = (unsigned char)ubrr;
	//double speed mode
	if(mode==2){UCSRA|=U2X<<1;}
	/* Enable receiver and transmitter */
	UCSRB = (1<<RXEN)|(1<<TXEN);
	/* Set frame format: 8data, 1stop bit */
	UCSRC = (1<<URSEL)|(3<<UCSZ0);
}//uart_init
void uart_putc(unsigned char data)
{
	while ( !(UCSRA & (1<<UDRE)) );  /* Wait for empty transmit buffer */
	
	UDR = data; 			         /* Start transmition */
}//putc
void uart_puts(const char *s )
{
    while (*s) 
      uart_putc(*s++);

}//puts
void blink(void)
{
	PORTC|=(1<<PC5);
	_delay_ms(100);
	PORTC&=~(1<<PC5);
}//blink

int main(void)
{  

    uart_init(57600,2);

	UCSRB |= (1 << RXCIE);	// Enable the USART Recieve Complete interrupt (USART_RXC) 
  	sei(); 		// Enable the Global Interrupt
		
	DDRC|=(1<<PC5);
	_delay_ms(1000);
	
	
//	memset(buffer,0,BUFF_LEN);

	uart_puts("AT\r\n");
	_delay_ms(1000);
	if(strstr(buffer,"OK"))
	{
		blink();
//		memset(buffer,0,BUFF_LEN);
	}


    while (1)    
	{
		
	}//while
}//main

ISR(USART_RXC_vect) // by Dean @ http://www.avrfreaks.net/?name=PNphpBB2&file=viewtopic&t=48188
{ 
	char temp = UDR;
    buffer[buff_cnt] = temp;
//	uart_putc(temp);	
	buff_cnt++;
	if(buff_cnt>BUFF_LEN){buff_cnt=0;}
	PORTC|=(1<<PC5);
	PORTC&=~(1<<PC5);
}//ISR

