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