8051アーキテクチャのマイコンにおいて、UART(Universal Asynchronous Receiver/Transmitter)は外部デバイスとの双方向データ交換を実現する主要インターフェースです。開発ボードではUSB-シリアル変換チップが統合され、PCとの通信が可能となります。非同期伝送方式を採用するこのプロトコルは、ボーレート・データビット数・ストップビット・パリティビットのパラメータ設定が動作の要となります。
シリアル通信の制御は、SBUF(シリアルバッファ)・SCON(シリアルコントロール)・PCON(パワーコントロール)のSFR(スペシャルファンクションレジスタ)で行われます。一般的にモード1(8ビットUART、可変ボーレート)が選択され、ボーレートはタイマ1のオーバーフローレートによって決定されます。水晶発振子の周波数とPCONレジスタのSMODビットを考慮した計算が必要です。
ハードウェア設定では、開発環境に組み込まれたUSBシリアル変換回路が利用可能です。独自回路構築時は、RS-232レベル変換用ICの適切な接続が重要です。以下のコードはシリアル通信の初期化処理を示します:
void SerialConfig(void) {
PCON |= 0x80; // SMODビット設定(ボーレート倍速)
SCON = 0x50; // モード1選択(8ビットデータ)
TMOD = (TMOD & 0x0F) | 0x20; // タイマ1をモード2に設定
TH1 = 0xFA; // 11.0592MHz発振子で9600bps(SMOD=1)
TL1 = TH1; // 両レジスタに同一値を設定
TR1 = 1; // タイマ1起動
ES = 1; // シリアル割り込み許可
EA = 1; // 全体割り込み許可
}
データ送信はSBUFへの書き込み、受信はSBUFからの読み出しで実行されます。以下の関数は割り込みを使用せずに送信状態をポーリングする実装例です:
void SendByte(uint8_t data) {
SBUF = data; // 送信データ設定
while (!TI); // 送信完了フラグを待機
TI = 0; // 送信割り込みフラグクリア
}
受信処理ではRIフラグの監視が必要です。実際のアプリケーションでは、シリアル割り込みを使用して受信バッファを管理する手法が推奨されます。ボーレート設定の誤りはデータ破損を引き起こすため、発振子周波数とTH1/TL1値の整合性を確認することが重要です。