CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

シリアルテスト

マトリクス制御はボードにモニタが載ってからに詳細検討するとして、次にモニタに必須のシリアルI/F周りを確認しておきます
まずはシリアルにインクリメントデータ垂れ流しをコーディングしてみます
 
イメージ 1
 
 
シリアルの初期化、送信バッファがエンプティになるまで待つなど基本的な操作は8251等と同じなので問題ありません。
条件ジャンプ:JZ、JNZが使えずビット判定スキップ命令SKITで判断するのがちょっといやらしいですがまぁそれはそれ。
 
送受信転送クロックのソースは外部、内部クロック、タイマ分周値など数種類選択ができますがここではタイマ0の分周出力をソースにしてみます。
 
タイマ0には水晶原振をプリスケーラで24分周したクロックが入力されます
またシリアルI/Fには転送クロックの16倍または64倍のサンプリングが必要なので
ボーレートBはB=Fxtal/(24*16*C) ;C:タイマ0プリセット値
ここでFxtalは12MHzなのでC=3をセットすれば標準的な通信速度9600bpsに近い
ボーレート10416bpsが得られます
 
 
イメージ 4
 
送信波形をみてみると確かに最小ビット幅が10.42kHzで計算どおりになっています。
ところがこれを9600bpsにセットしたターミナルプログラムで受けると・・・文字バケバケ。
 
 
イメージ 2
 
このとき通信レートの誤差は+8.5%。
それほど大きくないように見えますがシリアル非同期通信のボーレート許容範囲は結構厳しく、理論的には±5%以下です
(10ビット転送として最後のストップビットの位置に±50%許容されるとして1ビット当たりにすると±5%)
 
通信速度を犠牲にして標準的なボーレートと誤差が少なくなる分周比を探してみると
C=13でB=12000000/(24*16*13)=2403.8 が得られ
これは2400bpsに対してわずか+0.16%の誤差となります
 
 
 
イメージ 5
 
これをターミナルで受けると、目で追える遅さですがきちんと文字を受信しています
 
イメージ 3