編集の要約なし |
細 文字列「source lang」を「syntaxhighlight lang」に置換 |
||
| (同じ利用者による、間の1版が非表示) | |||
| 17行目: | 17行目: | ||
BAUD : ボーレート<br> | BAUD : ボーレート<br> | ||
Fosc : ATmega328のクロック周波数<br> | Fosc : ATmega328のクロック周波数<br> | ||
< | <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); | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
表と式が異なるが、そのまま計算すると整数切り捨てのための誤差が大きくなるため、四捨五入で誤差を小さくしている。<br> | 表と式が異なるが、そのまま計算すると整数切り捨てのための誤差が大きくなるため、四捨五入で誤差を小さくしている。<br> | ||
| 33行目: | 33行目: | ||
== レシーバとトランスミッタの有効化 == | == レシーバとトランスミッタの有効化 == | ||
レシーバとトランスミッタの有効化は、USARTのコントロールレジスタを設定する。<br> | レシーバとトランスミッタの有効化は、USARTのコントロールレジスタを設定する。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
// Enable receiver and transmitter | // Enable receiver and transmitter | ||
UCSR0B = (1 << RXEN0) | (1 << TXEN0); | UCSR0B = (1 << RXEN0) | (1 << TXEN0); | ||
</ | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
| 60行目: | 60行目: | ||
<br> | <br> | ||
上表において、スタートビットは常に1[bit]なので、残りの3項目のビット数を設定する。<br> | 上表において、スタートビットは常に1[bit]なので、残りの3項目のビット数を設定する。<br> | ||
< | <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); | ||
</ | </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> | ||
< | <syntaxhighlight lang="c++"> | ||
void Transmit1Byte(char data) | void Transmit1Byte(char data) | ||
{ | { | ||
| 84行目: | 84行目: | ||
UDR0 = data; | UDR0 = data; | ||
} | } | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
===== 受信方法 ===== | ===== 受信方法 ===== | ||
1[Byte]分のデータを受信するまで待機(ポーリング)し、UDR0レジスタを読み取る。<br> | 1[Byte]分のデータを受信するまで待機(ポーリング)し、UDR0レジスタを読み取る。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
char Receive1Byte(void) | char Receive1Byte(void) | ||
{ | { | ||
| 98行目: | 98行目: | ||
return UDR0; | return UDR0; | ||
} | } | ||
</ | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:AVR]] | [[カテゴリ:AVR]] | ||