#define F_CPU 1000000 #include #include #include #include #include #define F_OSC 1000000 // oscillator-frequency in Hz #define UART_BAUD_RATE 1200 #define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) ((F_OSC)/((UART_BAUD_RATE)*16l)-1) // Duw een char naar de andere kant void usart_putc(unsigned char c) { while(!(UCSRA & (1 << UDRE))); // wait until UDR ready UDR = c; // send character } // Duw een hele lading chars naar de andere kant void uart_puts (char *s) { // loop until *s != NULL while (*s) { usart_putc(*s); s++; } } // INTERRUPT can be interrupted // SIGNAL can't be interrupted SIGNAL (USART_RXC_vect) { // USART RX interrupt unsigned char c; c = UDR; usart_putc(c+1); } // Zet alles klaar voor seriele communicatie void serial_init(void) { // Settings: 8N1 UCSRA = 0b00000000; UCSRB = 0b10011000; // Bit 7 - RXCIE: RX Complete Interrupt Enable // Bit 4 - RXEN: Receiver Enable // Bit 3 - TXEN: Transmitter Enable UCSRC = 0b10000110; // Bit 7 - URSEL: Register Select // Bit 2:1 - UCSZ1:0: Character Size // UBRRL = 103; // 103 = 600 baud @ 1MHz UBRRL = 51; // 51 = 1200 baud @ 1MHz // UBRRL = 25; // 25 = 2400 baud @ 1MHz // UBRRL = 12; // 12 = 4800 baud @ 1MHz // UBRRL = 6; // 6 = 9600 baud @ 1MHz } int main(void) { serial_init(); sei(); uart_puts("\r\n\r\n\r\nHello world!\r\n"); uint8_t c = 0; char str[12]; while(1) { _delay_ms(500); sprintf(str, "c = %d\r\n", c++); uart_puts(str); } }