SNSへはこちら

Intel 8051マイコンを使う(STCマイコン)(2) – UART

ペリフェラルの説明では早くも最終回が来ました。続いて UART の実装です。

今回は 8bit を送信する通常の方法(調歩同期式)をご紹介します。実はこのペリフェラル、ボーレートジェネレーターを内蔵しておらず、タイマーでクロックを生成するという仕様になっているのです。

Mode1での実装

今回必要とする機能を満たすのは Mode1 です。取り敢えず受信を有効化しましょう。また、ボーレート生成のために便宜上 SMOD ビットを立てておきます。

SCON = 0x40;
PCON = 0x80;

そうしたら ボーレート生成のためのタイマー設定です。Timer0 は前回使用しましたので、今回は Timer1 で実装します。というか Timer0 では使えません。計算式はこんな感じで書いてありますね。

これを変形すると、以下の式を得ます。

TH1 = 256 - SYSclk / 192 / baudrate

ただし、先程設定した SMOD == 1 を前提とします。ボーレートは 9600 とするととても微妙な値になってうまく動かないので、4800 とします。すると、TH = 242.979 となりますから、243 を代入すれば良いと分かります。

以上から、設定はこんな感じです。

void uart_init(void) { // 4800 bps
    SCON = 0x50;
    PCON = 0x80;

    TMOD |= 0x20; // timer1 as baud rate generator
    TH1 = TL1 = 243;
    TR1 = 1;
}

送受信用関数も準備しましょう。フラグのポーリングだけでできます。

void uart_send(char ch) {
    SBUF = ch;
    while( !TI );
    TI = 0;
}

char uart_get(void) {
    while( !RI );
    RI = 0;
    return SBUF;
}

ということで、以上によって Intel 8051 コアを積んだマイコンペリフェラルの説明が終わりました。簡単でしたね。
本シリーズはペリフェラルの設定という点ではこれでおしまいにしますが、機械語プログラミングをやりたいと思うので、まだ続きます。乞うご期待。