8080やZ80で使われていたシリアル通信用のチップの8251はボーレートに合わせたクロックが必要です。
クロックは1倍、16倍、64倍のいずれかです。
たとえば9600の通信の通信の場合、9600,153.6K,614.4kのいずれかになります。16倍がよく使われます。
このクロックは以下の方法で作ります。
- 専用のクロックチップを使う
- CPUクロックを分周する
- 74HC4060に水晶をつけて作る
- PICなどのマイコンで作る
最近はシリアルはUSBのCDCで変換して使うことが多いです。
PIC16F1455はCDCが実装でき、他の機能を付けることも出来ます。これで作ってみます。
CDCのコードはこちらのページのコードを利用させてもらいました。
PICでクロックを発生させるにはPWMを使うのが良さそうです。PWMについては以下のページが参考になりました。
タイマーや割り込みを使って、ソフトウエアでクロック出力を作る事もできますが、USBの処理に干渉する可能性もあり、ハードで処理するPWMが一般的なのかと思われます。
TRISCのRC3を出力にして初期化に以下を追加します。
T2CON = 0b00000100;
PR2 = 0x4d;
PWM2CON = 0b11000000;
PWM2DCH = 0x20;
RC3の出力は以下のようになりました。
誤差は1%以下です。
Z80を6MHzで動かすつもりなので、8251にはクロックをそのままは入れられないので、8251のCLKもPICで作ってみます。TRISAのRA4をOUTにして、
CLKRCON = 0xd4;
を設定すると、CLKRのRA4から3MHzが出力されます。48MHzの16分周です。
PIC16F1455には他にCLKOUTの機能もあり、これを使うと12MHzが出力されます。
すでに同じようにやっている方がいるようです。
組み立ててみて、残念ながらうまく動作しません。気長に調べるつもりです。