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


KL5C80A12マイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
KL5C80A12はZ80互換の高速高性能8ビットマイクロコントローラです。
残念なことに数年前に生産中止になってしまいました。
しかし当社ではKL5C80A12を使った組込みマイコンボードはまだ健在です。
そのKL5C80A12を使ったND80Z3.5上位互換マイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第45回]



●ON INT GOSUB

ZBK−V3BASICはKL5C80A12CPUの割込みをBASICでサポートしています。
通常は割込みはマシン語プログラムで扱うものなのですが、BASICでも扱えると便利ではないか、ということで組み込んだものです。
ただやっぱりBASICで扱うのには少し無理があって、扱い方には注意が肝要です。
割込みが発生したときに実行するプログラムをON INT GOSUB文で宣言します。
ON INT GOSUB文はプログラムの先頭部分に置きます。
書式は
ON INT #n GOSUB 行番号
です。
nは0〜7の整数ですが、そのうち外部割込みは#0を使います。
ZBK−V3BASICの割込みとしては、KL5C80A12のIO入出力端子P01を割込み入力として使い、それを#0に割り当てています。
割込みが許可されているときに、P01の入力信号の立ち上がりエッジで割込みが発生します。
割り込みはBASICの実行とは関係なくバックグランドで処理され、割込みがあったことが記録されます。
BASICは1行の実行ごとに割込みがあったかどうかを確認し、割込みが記録されていれば、ON INT文で指定したサブルーチンを実行します。
下がサンプルプログラムです。

    10 A=0
    20 OUT $34,$FF
    30 OUT $35,$FF
    40 STOP 
    50 ON INT #0 GOSUB 110
    60 INTON 
    70 PRINT "start"
    80 FOR B=0 TO 1000:NEXT B
    90 PRINT "*";
   100 GOTO 80
   110 A=A+1:PRINT A,
   120 RETURN #0

KL5C80A12CPU版のZB3−V3BASICは、割込みプログラムについては少し前準備が必要です。
ちょっと理由があって割込み入力がレベルモードになっています。
そのままだと割込みが多重に入力されてシステムがハングアップしてしまいますので、エッジ入力モードを指定します。
本来はシステムプログラムの中で行なうべきなのですが、ここ数日のデバッグのなかで確認したことなので、それについては次期バージョンUPのときに対策することとして、とりあえずは上のサンプルプログラムのようにユーザーレベルで対処してください。
行番号20、30の実行によって割込みがエッジ入力モードになります。

下は実行結果です。


P01はND80KL/86本体ボードのI/O拡張コネクタに配線してあります。
ここに入れる信号には工夫が必要です。
KL5C80A12は高速なので、適当な信号を手入力したりするとチャタリングのため割込みが多重に入力されてシステムがハングアップしてしまいます。
なにか手軽に使えるものはないか、と考えてみましたら、よいものを思いつきました。
本体ボード上のRTC、DS1307の出力信号(LEDにパルス信号を出力しています)を入力することを思いつきました。
もっともこの信号をBASICの起動前にP01入力につないでおくとシステムがハングアップしてしまいます。
BASICの起動後につなぐ必要があります。
だけではなくて、上の実行画面のようにエッジモードに指定したあとでつなぐ必要があります。
つなぐタイミングが悪いとやっぱりチャタリングでハングアップしてしまいます。
こういうテストはチャタリングなどが発生しないように、ちゃんとした回路を用意すべきなのですが、なにしろそんなことをしている余裕はありませんから手抜きです。
下がDS1307の出力パルスをIO拡張コネクタのINT入力(P01)に接続して上の画面のテストをしたときの写真です。



KL5C80A12マイコンボードの製作[第45回]
2018.10.8upload

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