Initialisation du périphérique

Le code a exécuter avant d'utiliser l'UART:

  1. /****************************************
  2.   initUART
  3. *****************************************/
  4. void initUART(unsigned char baudrate){
  5. // Vitesse P. 161 du datasheet
  6. UBRRL = baudrate;
  7.  
  8. // réception et émission
  9. UCSRB = (1 << RXEN) | (1 << TXEN);
  10.  
  11. // format 1N8
  12. UCSRC = (1 << URSEL) | (3 << UCSZ0);
  13. }


Envoie d'un caractère

Pour l'envoie, le principe est le même que pour tous les µcontrolleurs ou PC. On écrit une valeur dans le registre d'envoi et on attend que ça se passe!

  1. /****************************************
  2. putchr
  3. *****************************************/
  4. static void putchr(char c){
  5. while ( ! ( (UCSRA) & (1 << (UDRE)) ) ) ;
  6. UDR = c;
  7. }


Envoie d'un string

Le principe est d'envoyer plusieurs caractères. Donc on peut reprendre la fonction précédente

  1. /****************************************
  2. printstr
  3. *****************************************/
  4. static void printstr (unsigned char *string){
  5. while(*string){
  6. putchr(*string++);
  7. }
  8. putchr('\r');
  9. putchr('\n');
  10. }


Réception d'un caractère

Pour la réception, l'utilisation des interruptions est a préférer. Mais pour cet exemple simple, la méthode du pooling est utilisée, c'est-à-dire, on attend la réception en lisant le registre qui indique une réception.

  1. /****************************************
  2. getchr
  3. *****************************************/
  4. unsigned char getchr(void){
  5. while ( !(UCSR0A & (1<<RXC0)) );
  6. return UDR0;
  7. }