Nisi’s work blog

Nisi’s work blog – programing tips

Atmega 128 – UART Comunication

Exemplul este valabil pentru Atmega128 + Quartz 8MHz

Atmega 128 – UART Comunication  

  1. UART0
  • Initializare

               BaudRate 4800 se seteaza registrul UBRR1H = 0 si UBRR1L = 103

               BaudRate 9600 se seteaza registrul UBRR1H = 0; UBRR1L = 51;

               BaudRate 115200  – UBRR1H = 0; UBRR1L = 3;

  • Activare Linie RX, TX si intreruperea aferenta lui RX

              - pentru a se putea citi date este necesar sa se activeze linia RX

              – de asemenea pantru a se trimite date trebuie activata linia TX

                         UCSR1B = (1<<RXEN1)|(1<<TXEN1)

             – Pentru a citi date de pe linia RX exista 2 posibilitati: sa se astepte in continuu pana la RX vine “ceva” in cazul asta nu se mai poate face nimic altceva pana nu se citeste de la UART sau sa se semnaleze cu ajutorul unei intreruperi momentul exact cand vine o data pe Rx si doar atunci sa se faca citirea.

            – Pentru a “spune” microcontrolerulul ca intreruperea pentru Rx este activata se foloseste urmatoarea linie de cod:

                        UCSR1B = (1<<RXEN1)|(1<<TXEN1) | (1 << RXCIE1)

  •  Restul de setari: (no parity, 8data, 1stop)

                        UCSR1C = (3<<UCSZ10);

  •  Citire byte din UART1

                      while ((UCSR1A & (1<<RXC1))==0);   //  astept pana apare ceva la portul serial

                      return UDR1;   // dupa ce iese din while -ul de mai sus in UDR1 este disponibil un Byte