Atmega8 + UART
Napsal: 13 říj 2011, 09:18
Zdravím, jsem začátečník, používám AVR studio, chci komunikovat s atmegou8 pres UART. Podle datasheetu nastavim komunikaci, z pocitace odeslu znak, atmega ho prijme a odesle nazpet. V pocitaci vidim vse OK. Kdyz ale chci odeslat z atmegy do PC nejaky svuj znak, v pocitaci vidim jen nesmysl. Kde mam chybu?
---------------------------------------
#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');
}
---------------------------------------
#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');
}