目次

デコーダ

 デジタル回路は、シーケンサ、デコーダ、エンコーダで
 構成することが多いので、デコーダをテストすることも
 必要になります。

 次のデコーダをテストしてみます。
 左がデコーダの入力値、右を出力値とします。

 0 : 100
 1 : 105
 2 : 110
 3 : 120
 4 : 130
 5 : 140
 6 : 150
 7 : 160
 8 : 170
 9 : 180
10 : 190
11 : 200
12 : 150
13 : 150
14 : 150
16 : 150

 IchigoJamは、出力が4ビットしかないですが
 LEDの点灯、消灯に利用する1ビットを使うと
 すれば、5ビットの出力があります。

 OUT1から4とLEDの1ビットを使い、デコーダ回路に
 5ビットを与えます。IN1から4で入力し、その値を
 表示すれば、デコーダ回路が正しく作られているか
 を確認できます。

 OUT命令で4ビットの値を渡し、LEDの1ビットは
 セレクタに利用。

 8ビット出力をセレクタで1ニブル出力にして
 使います。



 4ビットの値を与えて、4ビットの出力を取り出す
 サブルーチンを作成します。

100 '
110 LET [0],0
120 FOR I=4 TO 1 STEP -1
130   LET [0],([0] << 1) | IN(I)
140 NEXT
150 RTN

 LEDから出力する値で、8ビットの上位、下位を
 選ぶので、8ビットに合成する処理を考えます。

40 LED 1:GOSUB 100:LET [10],([0] << 4)
50 LED 0:GOSUB 100:LET [10],[10] | [0]

 OUTには、0から15を出力するので
 サブルーチンでOUT命令を使えるよう
 にします。

200 '
210 FOR I=4 TO 1 STEP -1
220   OUT I,P & 1
230   LET P,(P >> 1)
240 NEXT
250 RTN

 合体して、調整。

10 ' test decoder
20 FOR D=0 TO 15
30   ? D:LET P,D:GOSUB 200
40   LED 1:GOSUB 100:LET [10],([0] << 4)
50   LED 0:GOSUB 100:LET [10],[10] | [0]
60   ? [10]
70   WAIT 120
80 NEXT
90 END
100 '
110 LET [0],0
120 FOR I=4 TO 1 STEP -1
130   LET [0],([0] << 1) | IN(I)
140 NEXT
150 RTN
200 '
210 FOR I=4 TO 1 STEP -1
220   OUT I,P & 1
230   LET P,(P >> 1)
240 NEXT
250 RTN

 4ビットを超える場合は、シフトレジスタを利用します。



 シフトレジスタを利用すると、2ビットで4ビット、8ビットの値を
 設定できます。8ビット値を出力するサブルーチンは、以下。

100 '
110 FOR I=1 TO 8
120   OUT 1,P & 1:OUT 2,0:OUT 2,1
130   LET P,P >> 1
140 NEXT
150 RTN

 デコーダ出力が4ビットを超える場合、シフトレジスタで
 一度8ビットを入力して、入力する方法も使えます。

 74HC165を利用すれば、次のように接続します。



 74HC165は、8ビットをLD制御で記憶し、クロックCKを
 与えると、データを心太のように出力してきます。
 処理をサブルーチンにしてみました。

200 '
210 OUT 3,1:OUT 3,0:OUT 3,1
220 LET R,0
230 FOR I=1 TO 8
240   LET R,(R << 1) | IN(1)
250   OUT 4,0:OUT 4,1
260 NEXT
270 ? R
280 RTN

 合体して、調整。

10 ' test decoder
20 FOR D=0 TO 255
30   ? D
40   LET P,D:GOSUB 100
50   GOSUB 200
60 NEXT
70 END
100 '
110 FOR I=1 TO 8
120   OUT 1,P & 1:OUT 2,0:OUT 2,1
130   LET P,P >> 1
140 NEXT
150 RTN
200 '
210 OUT 3,1:OUT 3,0:OUT 3,1
220 LET R,0
230 FOR I=1 TO 8
240   LET R,(R << 1) | IN(1)
250   OUT 4,0:OUT 4,1
260 NEXT
270 ? R
280 RTN

 ラベル利用で、次のようにも書けます。

10 ' test decoder
20 FOR D=0 TO 255
30   ? D
40   LET P,D:GSB @PON
50   GSB @POFF
60 NEXT
70 END
100 @PON
110 FOR I=1 TO 8
120   OUT 1,P & 1:OUT 2,0:OUT 2,1
130   LET P,P >> 1
140 NEXT
150 RTN
200 @POFF
210 OUT 3,1:OUT 3,0:OUT 3,1
220 LET R,0
230 FOR I=1 TO 8
240   LET R,(R << 1) | IN(1)
250   OUT 4,0:OUT 4,1
260 NEXT
270 ? R
280 RTN


目次

inserted by FC2 system