シリアル通信:USART(Universal Synchronous and Asynchronous Receiver and Transmitter)

特 徴
○ 全二重動作(独立した送受信レジスタ)
○ 同期または非同期動作
○ 同期クロック駆動されたマスタ/スレーブ動作
○ 高分解能ボーレート発振器
○ 5,6,7,8または9bitデータと1または2ストップビット
○ ハードウエアによる奇数・偶数パリティの生成・検査
○ データオーバーラン検出
○ フレーミング エラー検出
○ 不正スタートビット検出 & ノイズ除去
○ 受信完了、送信完了、送信データレジスタ空き、の3つの独立した割り込み
○ マルチ プロセッサ通信機能
○ 倍速非同期通信

関係レジスタ
○ USARTデータレジスタ UDR0
同一IOアドレスで送・受信用に物理的に分離されたレジスタ。OUT時:送信データ、IN時:受信データ

○ USART制御/ステータスレジスタA UCSR0A
Bit7(RXC0):受信完了フラッグ。受信データがシフトレジスタからUDRに転送されるときセット(1) → 受信割り込み
Bit6(TXC0):送信完了フラッグ。ストップビットを含む完全な送信データがシフトレジスタに移りUDRが空の時セット(1)→ 送信割り込み
Bit5(UDRE0):送信データレジスタ空きフラッグ。セットされると次の送信データの書き込み可 → 割り込み
Bit4(FE0):フレーミングエラーフラッグ。受信データのストップビット(0)でセット(1)される。
Bit3(DOR0):オーバーランエラーフラッグ。次の受信データがシフトレジスタからUDRに移される前にUDRに存在していたデータを読み出さなかったときセット(1)。

○ USART制御/ステータスレジスタB UCSR0B
Bit7(RXCIE0):受信完了割り込み許可
Bit6(TXCIE0):送信完了割り込み許可
Bit5(UDRIE0):送信データレジスタ空き割り込み許可
Bit4(RXEN0):受信許可
Bit3(TXEN0):送信許可
Bit2(UCSZ02):データビット長選択(UCSRCのUCSZ1,UCSZ0との組み合わせ)
Bit1(RXB80):受信データビット8(9bitデータ選択時の9bit目)
Bit0(TXB80):送信データビット8(9bitデータ選択時の9bit目)

○ USART制御/ステータスレジスタC  UCSR0C
Bit7(UMSEL01)
Bit6(UMSEL00)
:USART動作選択 非同期動作(00)、 同期動作(01)、 予約(10)、 主装置SPI(11)
Bit5,4(UPM01, 00):パリティ選択 禁止(00)、予約(01)、偶数パリティ(10)、奇数パリティ(11)
Bit3(USBS0):ストップビット選択 1ビット(0)、2ビット(1)
Bit2, 1(UCSZ01, 00):データビット長選択 UCSR0BレジスタのUCSZ02ビットとの組み合わせで
            5ビット(000)、6ビット(001)、7ビット(010)、8ビット(011)、9ビット(111)
Bit0(UCPOL0):クロック極性選択 XCKの立ち上がりエッジ(0)、XCKの立ち下がりエッジ(1)
          非同期動作では(0)とする


○ USARTボーレートレジスタUBRR0H および UBRR0L (Datasheet P125参照)
標準非同期動作では ボーレート=fck / 16*(UBRR+1)

使い方
1.通信フォーマットをUCSR0B, UCSR0Cに設定
2.ボーレートをUBRR0H, UBRR0Lに設定
3.シフトレジスタ初期化までの時間待つ
4.UCSR0BのRXCIE0、TXCIE0、UDRIE0、RXEN0、TXEN0を設定する

送 信
1.    送信データレジスタが空くまで(UCSR0AのUDRE0=0)待つ
2.    送信データをUDR0に書き込む
受 信
1.    UCSR0AのRXC0=1まで待つ
2.     UDR0から受信データを読み込む

[ 例題1 ] PCとAVRをRS232C(シリアル)で接続し、シリアルからの入力データをそのままPCへ送信(エコーバック)する
  RS232c:  9600bps, 8bit, non-arity, stop-bit 1
  プログラム: usart.asm
  回路図:



[ 例題2 ] PCとAVRをRS232C(シリアル)で接続し、シリアルからの入力データを受信完了割り込みを使って取得しそのままPCへ送信(エコーバック)する 。メインルーチンでは数字を0.5秒間隔で表示する。

受信完了割り込みを使うには

 1.USCR0B レジスタの RXCIE0(ビット7)を1にする
 2.全割り込みを許可する sei 命令
 3.ベクターエリアに rjmp 命令を入れる
 4.受信完了割り込み処理ルーチン

  プログラム: usarti.asm

  回   路:



参考

・    電子回路の豆知識 RS232C
  http://www.nahitech.com/nahitafu/mame/mame5/rs232c.html
・    ELM RS-232C簡易接続方法
  http://elm-chan.org/docs/rs232c.html