ペリフェラルの説明では早くも最終回が来ました。続いて 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 コアを積んだマイコンペリフェラルの説明が終わりました。簡単でしたね。
本シリーズはペリフェラルの設定という点ではこれでおしまいにしますが、機械語プログラミングをやりたいと思うので、まだ続きます。乞うご期待。