2013.10.16
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第499回]


●受信エラーについて

受信中にエラーが発生した場合に、それを知らせる仕組みも必要です。
Z8S180に内蔵されているRS232Cインターフェース(ASCI)では、受信時にエラーが発生すると内蔵I/Oレジスタにエラーコードが格納されます。
CH0受信では内蔵I/Oレジスタアドレス04のビット4〜6にエラービットが立ちます。

ビット4はフレーミングエラー、ビット5はパリティエラー、ビット6はオーバーランエラーです。
フレーミングエラーはストップビットが来るべきタイミングでストップビットが検出されないときに出されます。
送信と受信のボーレートが異なっているとこのエラーが発生します。
パリティエラーはわかりますね。

受信データが8ビット(または7ビット)揃うと受信シフトレジスタから受信データレジスタに移されます。
このとき内蔵I/Oレジスタアドレス04のビット7が1になります。
そのデータがプログラムによって読み出される前に次のデータが8ビット(7ビット)受信完了してしまうと、オーバーランエラーが発生します。

通常1個のデータはスタートビット、ストップビットを合わせると10ビットですから、9600bps(bit/秒)の場合、1個のデータの受信時間は1/960≒1msです。
マシン語プログラムでしたら十分間に合う時間ですが、何か作業をしていると間に合わない場合が出てきます。
受信割込みが必要とされる所以(ゆえん)です。

今回新たに組み込んだ受信割込みプログラムは、受信時にエラーの発生を認識すると、ビット4〜6の内容をそのままメモリアドレスF903に書き込みます。
READ #1命令は、受信バッファの文字列を読み取るときにF903の内容を確認し、00以外の場合にはエラーメッセージを表示してブレークします。

その機能を確認するためにわざとエラーを発生させてみました。
こちらは送信側のZBKボードの実行画面です。

20行で”4N81”を指定しています。
ZBKボードのBASICでは2400bpsの指定になります。

こちらは受信側のE−80の実行画面です。

20行で”13”を指定しています。
E−80のBASICでは9600bpsの指定になります。

この設定で受信するとボーレートが合いませんから、エラーが発生します。
ERR:73に続いてエラーが発生した行が表示されました。
ERR:73は受信エラーが発生したことを示します。

このとき整数変数(上の画面の例ではA%)にはエラービットの情報(メモリアドレスF903の値)が入れられます。
ダイレクトモードでPRINT HEX$(A%)を実行して、エラービット情報を表示させました。
HEX$()は整数値を16進数文字に変換する関数です。
ビット4が1になっていますからフレーミングエラーが発生したことがわかります。

DMコマンドでF903の値も確認してみました。
F903の値は10になっています。

やっと試作4号機のテストが完了しましたので、本日Y様にお送りしました。
やれやれと思う間もなく、お得意さまから急ぎの注文が入ってしまいました。
急いで仕上げて納品しなければなりません。
このほかにも急いで仕上げなければならない注文をいくつか抱えておりますので、これから月末まで超多忙な毎日になりそうです。

ですのでおそらくHPも不定期更新になってしまうと思います。
あしからずご了承をお願いいたします。

ワンボードマイコンでCP/Mを![第499回]
2013.10.16upload

前へ
次へ
ホームページトップへ戻る