Atmega8 + UART
Moderátor: Moderátoři
Atmega8 + UART
---------------------------------------
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
// get char
unsigned char uart_getc( void )
{
while ( !(UCSRA & (1<<RXC)) );
return UDR;
}
// send char
void uart_putc(unsigned char data )
{
while ( !( UCSRA & (1<<UDRE)) );
UDR = data;
}
int main (void)
{
UCSRA = 0x00;
UBRRH = 0x00; // nastaveni rychlosti pro 1MHz
UBRRL = 0b00000110; //9600baud
UCSRB = 0b00011000; // povolit vysilani a prijem
UCSRC = 0b10000110; // ramec dat: 8 datovych, 1 stop bit, bez parity
UCSRB |= (1 << RXCIE); //zapnout preruseni pri prijmu USART
sei(); //zapnout globalni preruseni
_delay_ms(100);
for (;;) // Loop forever
{
}
}
ISR(USART_RXC_vect)
{
char ReceivedByte;
ReceivedByte = UDR;
while ( !( UCSRA & (1<<UDRE)) );
UDR = ReceivedByte;
while ( !( UCSRA & (1<<UDRE)) );
UDR = ReceivedByte;
//ZDE JE PROBLEM, DO POCITACE SE ZNAK NEDOSTANE, ANI PRES UART_PUTC ANI PRES UDR='a'
uart_putc('a');
}
Zkus 4800 baud a UBRR = 12.
Doporučuji stáhnout prográmek AvrBaud.exe.
http://www.rowalt.de/mc/avr/toolsd.htm