#include #include #include #define F_CPU 8000000 /* oscillator-frequency in Hz */ #include #define F_OSC 8000000 /* oscillator-frequency in Hz */ #define UART_BAUD_RATE 9600 #define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) ((F_OSC)/((UART_BAUD_RATE)*16l)-1) #define usec_count_(x) ((F_OSC*(x))/4000000) #define delay_us(x) _delay_loop_2(usec_count_(x)) void delay_ms(unsigned int ms) /* delay for a minimum of */ { // we use a calibrated macro. This is more // accurate and not so much compiler dependent // as self made code. while(ms){ _delay_ms(0.96); ms--; } } void adc_init(void) { DDRC=0x00; PORTC=0x00; unsigned char channel = 0; ADMUX=(channel & 0x0f); // ADCSRA: ADC Control and Status Register // ADPS2..ADPS0: ADC frequency Prescaler Select Bits // ADEN: Analog Digital Converter Enable, set this before setting ADSC ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Set ADC prescalar to 128 - 125KHz sample rate @ 16MHz ADMUX |= (1 << REFS0); // Set ADC reference to AVCC ADMUX |= (1 << ADLAR); // Left adjust ADC result to allow easy 8 bit reading // No MUX values needed to be changed to use ADC0 // ADCSRA |= (1 << ADFR); // Set ADC to Free-Running Mode ADCSRA |= (1 << ADEN); // Enable ADC ADCSRA |= (1 << ADSC); // Start A2D Conversions } void init_uart(void) { // set baud rate UBRRH = (uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_OSC)>>8); UBRRL = (uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_OSC); // Enable receiver and transmitter; enable RX interrupt UCSRB = (1<