avr, usart, baudrate

Adam Heinrich konference@adamh.cz
Pátek Srpen 28 18:53:15 CEST 2009


Tohle používám pro ATmega8. Z nějakého dvodu si hraju s 8MHz vnitřním RC 
a baudrate 9600, ale je to přepsané z někde z Internetu nebo datasheetu, 
takže by to mělo fungovat i při jiných nastaveních :-)

  #define F_CPU 8000000  // 8 MHz
  #define BAUDRATE 9600
  #define MYUBRR F_CPU/16/BAUDRATE-1

/**
 * USART initialization
 */
void uartInit(unsigned int ubrr) {
      // set baud rate
      UBRRH = (unsigned char)(ubrr>>8);
      UBRRL = (unsigned char)ubrr;
    // Enable receiver, transmitter and reciever interrupt
    UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
    // set frame format: 8 data bits, 1 stop bit, no parity */
    UCSRC = (1<<URSEL)|(3<<UCSZ0);
}

/**
 * Data receiving
 */
unsigned char uartReceive() {
    // wait for data to be received
    while ( !(UCSRA & (1<<RXC)) )    
        ;
      // get and return received data from buffer */
      return UDR;
}

/**
 * Data transmiting
 */
void uartTransmit(unsigned char data) {
    /* Wait for empty transmit buffer */
    while ( !( UCSRA & (1<<UDRE)))
        ;
    /* Put data into buffer, sends the data */
    UDR = data;
}

Adam Heinrich
www.adamh.cz



Luboš Melichar napsal(a):
> Nebylo by po ruce nejake maro, funkcicka, ktera spocita baudrate pro USART,
> rozhodne zda nastavit U2Xn nebo ne a nastavi prislusne registy(UBBRn,
> UCSRA,..)...?
>
>   



Další informace o konferenci Hw-list