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


KL5C80A12マイコンボードの製作

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

[第9回]


●最上位4ビット表示プログラム

アドレス表示LEDの最上位5桁目に値を表示するためにモニタプログラムを変更します。
最初にまず9桁目の値を保存しておく場所を作ります。
作業はND80Zモニタプログラムに対して行ないます。

2016/12/23  14:16  ndkmon8p.txt
END=0E8C
              ;;; ND80Z MONITOR FOR ND80Z3
              ;16/11/13 for ND80KL
              ;from nd3mon2o
              ;11/15 from ndkmon8c
              ;11/16 11/18
              ;12/22 12/23
              ;
 
                LEDHI=$FFB7
                SEGHI=$FFB6

LEDHIには物理メモリベースアドレスの上位4ビットの値00〜F0を格納します(下位4ビットは0にします)。
SEGHIにはLEDHIの上位4ビット0〜Fのセグメント表示データを入れます。

そして下は今回ND80Zモニタプログラムに追加した[*(I/O)][5]が押されたときに実行されるプログラムです。

              ;
              ;High Address set
              ;
0E4B 3AECFF   HISET:LD A,(DATAL)
0E4E E60F       AND 0F
0E50 4F         LD C,A
0E51 17         RLA
0E52 17         RLA
0E53 17         RLA
0E54 17         RLA
0E55 32B7FF     LD (LEDHI),A
0E58 21E901     LD HL,SEGD
0E5B 0600       LD B,00
0E5D 09         ADD HL,BC
0E5E 7E         LD A,(HL)
0E5F 32B6FF     LD (SEGHI),A
0E62 C3BD08     JP START2

LEDのデータ表示部の右端の値を左に4ビットシフトして[LEDHI]に格納します。
その値を7セグメントLEDに表示するためにセグメントデータに変換して[SEGHI]に格納します。
アドレス01E9はTK−80モニタプログラムのセグメント変換テーブルのアドレスです。

[*(I/O)][5]が押されたときに上記のプログラムが実行されるように、上のプログラムのアドレスをキー入力ジャンプテーブルに追加しました。

              ;
              ;;; KEY JUMP TABLE (3)
              ;
092A D30A     JPT3:DW RPRT
092C BD08           DW START2;LPRT
092E 4707           DW SOUT
0930 6907           DW SIN
0932 CE0A           DW TRON
0934 4B0E           DW HISET;***** 12/22
0936 BD08           DW START2;R256
0938 BD08           DW START2;START2
093A C30D           DW REMOTE
093C B40C           DW MMEM
093E 570D           DW DMEM
0940 BD08           DW START2;DAS
0942 2C0D           DW LSAVE
0944 0705           DW LOAD
0946 340B           DW OUT
0948 0D0B           DW IN


これで[*(I/O)][5]が押されたときにLEDのデータ表示部の最下位(右端)の値が物理メモリベースアドレスの上位4ビットとして[LEDHI]に格納されるようになりました。
しかしそれだけでは、まだLEDのアドレス表示部の5桁目への表示は行なわれません。
次はそのための表示プログラムの作成です。

●LED表示にはPICを使います

ND80ZV、ND80Z3.5、ND8080では7セグメントLEDの表示はTK−80と同じDMAという方法で行なっています。
しかし今回の回路では、その部分に限ってはTK−80互換をやめて、PICに任せることにしました。
ひとつには今回の9桁目を含めてDMAでの表示を行なおうとすると、回路がちょっと面倒になる、と判断したためでもあります。
PICへの表示データの転送はアドレス0000からのTK−80モニタプログラムと、アドレス0400スタート版のTK−80モニタプログラムの両方の7セグメントデータ表示プログラムに組み込みました。
下がそのプログラム部分です。

              ;
07CF CDC005   LEDDP0:CALL SEGCG
07D2 E5       LEDDP:PUSH H
07D3 D5         PUSH D
07D4 C5         PUSH B
07D5 21F8FF     LXI H,DIG
07D8 0608       MVI B,08
07DA 0E00       MVI C,00
07DC CDE907   LEDDP2:CALL LEDDPS
07DF 23         INX H
07E0 0C         INR C
07E1 05         DCR B
07E2 C2DC07     JNZ LEDDP2
07E5 C1         POP B
07E6 D1         POP D
07E7 E1         POP H
07E8 C9         RET
              ;
07E9 3E0E     LEDDPS:MVI A,0E
07EB D388       OUT 88;busy
07ED 7E         MOV A,M
07EE D38C       OUT 8C
07F0 79         MOV A,C
07F1 D388       OUT 88;adrs set
07F3 1602       MVI D,02
07F5 CDDF06     CALL D1_2;0.5msec wait
07F8 3E0E       MVI A,0E
07FA D388       OUT 88
07FC C9         RET

SEGCGだけだったところを、そのあとセグメント表示バッファ(FFF8〜FFFF)の値をLEDDPSでPICに送る部分を追加しました。

こちらが7セグメントLED表示回路です。
LED表示にはPIC16F883を使います。

上でTK−80モニタプログラムに追加したLED表示プログラムはアドレス0800からのND80ZモニタプログラムでもCALLして使っていますが、それは8桁LEDに対しての表示プログラムなので、これだけでは9桁目の表示は行なわれません。

そこでその部分をND80Zモニタプログラムに追加しました。
そこでも上の7セグメントLED表示データをPIC16F883に送るサブルーチン(LEDDPS)を利用しますから、そのサブルーチンへのジャンプ命令をTK−80モニタプログラムの先頭部分(アドレス040B)に追加しました。

2016/12/22  18:32  ndkmon4e.txt
END=07FC
              ;;; TK80 MONITOR PROGRAM FOR ND80Z(WORK AREAR FFxx)
              ;;16/11/13 for ND80KL
              ;from NDMON4P
              ;16/12/22
              ;         
                ORG $0400
              ;
0400 C33B04     JMP MONST
0403 C3CF07     JMP LEDDP0;SEGCG+LEDDP
              ;
              ; ORG $0008
              ; JMP START
                ORG $040B
040B C3E907     JMP LEDDPS;***12/22
              ;

そして下がND80Zモニタプログラムで9桁目の表示を追加したLED表示プログラムです。
TK−80モニタプログラムのLED表示プログラムをCALLしたあと、SEGHIに格納されている9桁目に表示するセグメントデータをPIC16G883に送ります。

0E3F CD0304   LEDDPA:CALL LEDDP4
0E42 0E08       LD C,08;LED Hi-address
0E44 21B6FF     LD HL,SEGHI
0E47 CD0B04     CALL LEDDPS
0E4A C9         RET

このLEDDPAサブルーチンはTK−80モニタプログラムのSEGCGサブルーチンに相当するプログラムです。
TK−80モニタプログラムのSEGCGはLEDに表示するアドレス、データを格納しているメモリの値を7セグメント表示データに変換してDMA用表示バッファに書き込みます。
あとはDMAで表示処理されるのですが、そこのところをPIC16F883にセグメント表示データを送るようにしているのです。

これでLEDの9桁目に物理メモリアドレスの最上位4ビットを置数して、それを表示させることができるようになりました。
しかし前回も書きましたように、それだけではまだ物理メモリアドレスにアクセスして、その値をLEDに表示させることはできません。

説明が長くなってしまいましたので、この続きは次回にいたします。

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

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