Bonjour,
j'ai un problème avec l'usart d'un ATMEGA16, je n'ai eu aucun souci avec un ATMEGA168 mais là...incompréhensible. J'ai tout essayé et je n'arrive même pas à obtenir la moindre trame sur Tx...Pouvez-vous m'aider, voici le code:
#include <avr/io.h>
#define F_CPU 8000000
#define CHAR_SIZE_8 0x06
void USART_Transmit( unsigned char data );
static void
uart_9600(void)
{
#define BAUD 9600
#include <util/setbaud.h>
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
#if USE_2X
UCSRA |= (1 << U2X);
#else
UCSRA &= ~(1 << U2X);
#endif
}
int main (void)
{
uart_9600();
UCSRC = (1<<URSEL)|CHAR_SIZE_8;
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN) ;
SREG=0x80;
while(1)
{
USART_Transmit('B');
}
}
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) );
/* Put data into buffer, sends the data */
UDR = data;
}
J'utilise AVR Studio 4.
Comme vous le voyez, j'initialise bien UCSRB pour que les pattes Rx et Tx du port D prennent leurs fonctions pour l'usart...mais rien n'y fait, UDR se remplit bien mais aucune trame n'apparait.
-----