MCS-85ボードの方にかかり切りでしたがほぼ動作も確認、開発環境も整備できたので、中途になっていたMCS-51(8031)ボードに戻ってきました。
一応メモリ、I/Oアクセスは確認できているのでシリアルが動けばモニタも載せられます。
MCS-85ではここら辺が手作りで時間がかかりましたが8031は作例が多く、ハードウェア構成も大体一意に決まるのでそっくり頂いてくることもできます。
ここでは
から87C52用モニタPAULSMON2のコードを使わさせてもらいました
ちょっと引っかかったのがボーレート設定。本来のボードは11.0592MHzの水晶を推奨(!)していますが作成したボードには12MHzの水晶が載っています。
これから38400baudを生成する分周比をコメントにある計算式で算出すると、整数に丸められて「254」という値になります。
これでバイナリをROMに焼き付けて実行するとオープニングメッセージを出そうとしますが38400baudのターミナルで受けると例によって文字がバケバケ。
TX波形を見ると31250baudしかありません。
まあ当然水晶原振がボーレートで割り切れないし、プリスケーラが大きいので細かい調整が利かないからで
逆に「254」を設定すれば正確に31250baudが得られるわけで、ターミナルのボーレートを合わせたら一発でモニタが起動しました。
コマンドもそれなりに動いています
ターミナルのボーレート設定はプルダウンメニューに現れる110・・・4800、9600、19200、38400・・・といった値しか選べないものと思っていましたが、実際は数値を手入力できるのですね。
いまどきはPCにハードウェアのUSARTが内蔵されているのではなくUSB経由の仮想的なモノなんでしょうがボーレートに任意の値を設定できるのはちょっと意外でした。
実は31250bpsというのは重要で、今回シリアル入出力をPCに接続するUSBシリアル変換ボードとMIDI-I/Fにパラにつないでいます。
MIDIはまさに31250bpsカレントループなのでボーレート設定1つで両方が接続できることになります。