AVR ATTINY2313でUSARTのテスト

移転しました。

USART機能のテストをしました。
1200bpsくらいが文字化けしない限界でした。変換ICが間にたくさん入っているせいか、かんたん基盤を使っているせいだとおもう。
USARTまわりの関数はdocumentからのコピペ。
何かひとつキーを押すと、文字列がかえってくるというコードです。
無事、使えました。

#include <avr/io.h>

void USART_Init( unsigned int baud )
{
  /* Set baud rate */
  UBRRH = (unsigned char)(baud>>8);
  UBRRL = (unsigned char)baud;
  /* Enable receiver and transmitter */
  UCSRB = (1<<RXEN)|(1<<TXEN);
  /* Set frame format: 8data, 1stop bit */
  UCSRC = (0<<USBS)|(3<<UCSZ0);
}


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


unsigned char USART_Receive( void )
{
  /* Wait for data to be received */
  while ( !(UCSRA & (1<<RXC)) )
  ;
  /* Get and return received data from buffer */
  return UDR;
}


int main(void){
  unsigned char* str = "カナリアたん、はぁ、はぁ。\r\n";
  unsigned char i=0;
  USART_Init((F_CPU/(16 * 300))-1);

  while(1){
    USART_Receive();

    while('\0' != *(str+i)){
      USART_Transmit((unsigned char)(*(str+i)));
      i++;
    }
  }

  return 0;
}