編集の要約なし
文字列「source lang」を「syntaxhighlight lang」に置換
 
(同じ利用者による、間の1版が非表示)
17行目: 17行目:
BAUD : ボーレート<br>
BAUD : ボーレート<br>
Fosc : ATmega328のクロック周波数<br>
Fosc : ATmega328のクロック周波数<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  // Set baudrate parameter
  // Set baudrate parameter
  // RoundOff
  // RoundOff
  UBRR0 =  (U16)(((F32)F_CPU / (F32)BAUDRATE / 16.0) - 1.0 + 0.5);
  UBRR0 =  (U16)(((F32)F_CPU / (F32)BAUDRATE / 16.0) - 1.0 + 0.5);
  </source>
  </syntaxhighlight>
<br>
<br>
表と式が異なるが、そのまま計算すると整数切り捨てのための誤差が大きくなるため、四捨五入で誤差を小さくしている。<br>
表と式が異なるが、そのまま計算すると整数切り捨てのための誤差が大きくなるため、四捨五入で誤差を小さくしている。<br>
33行目: 33行目:
== レシーバとトランスミッタの有効化 ==
== レシーバとトランスミッタの有効化 ==
レシーバとトランスミッタの有効化は、USARTのコントロールレジスタを設定する。<br>
レシーバとトランスミッタの有効化は、USARTのコントロールレジスタを設定する。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  // Enable receiver and transmitter
  // Enable receiver and transmitter
  UCSR0B = (1 << RXEN0) | (1 << TXEN0);
  UCSR0B = (1 << RXEN0) | (1 << TXEN0);
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


60行目: 60行目:
<br>
<br>
上表において、スタートビットは常に1[bit]なので、残りの3項目のビット数を設定する。<br>
上表において、スタートビットは常に1[bit]なので、残りの3項目のビット数を設定する。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  // Set frame format: 8data, 1stop bit : 8N1
  // Set frame format: 8data, 1stop bit : 8N1
  UCSR0C = (0 << USBS0) | (3 << UCSZ00);
  UCSR0C = (0 << USBS0) | (3 << UCSZ00);
  </source>
  </syntaxhighlight>
一般的には、データビット8[bit]、パリティビット無し、ストップビット1[bit]の通称8N1という形式が多い。<br>
一般的には、データビット8[bit]、パリティビット無し、ストップビット1[bit]の通称8N1という形式が多い。<br>
ここでも、8N1形式で送受信を行う。<br>
ここでも、8N1形式で送受信を行う。<br>
75行目: 75行目:
===== 送信方法 =====
===== 送信方法 =====
送信バッファが空になるまで待機し、UDR0レジスタに1[Byte]分のデータを書き込む。<br>
送信バッファが空になるまで待機し、UDR0レジスタに1[Byte]分のデータを書き込む。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  void Transmit1Byte(char data)
  void Transmit1Byte(char data)
  {
  {
84行目: 84行目:
     UDR0 = data;
     UDR0 = data;
  }
  }
  </source>
  </syntaxhighlight>
<br>
<br>


===== 受信方法 =====
===== 受信方法 =====
1[Byte]分のデータを受信するまで待機(ポーリング)し、UDR0レジスタを読み取る。<br>
1[Byte]分のデータを受信するまで待機(ポーリング)し、UDR0レジスタを読み取る。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  char Receive1Byte(void)
  char Receive1Byte(void)
  {
  {
98行目: 98行目:
     return UDR0;
     return UDR0;
  }
  }
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:AVR]]
[[カテゴリ:AVR]]