目次

ハードウエアテスト(その12)

 16ビットスイッチの状態を、直列入力で取得できるように
 半田付けした基板のテストをします。



 回路は、以下。




 スイッチ状態を入力するには、マルチプレクサとして使っている
 4051の選択信号A、B、Cを変化させ、8個のスイッチの論理値
 を逐次入力します。

 入力は、IN_1、IN_2を使い、選択信号をOUT_1、OUT_2、OUT_3に
 出力します。
 選択信号は、次のように変化させてみます。

100 ' get switch state
110 FOR [5]=0 TO 1 : FOR [4]=0 TO 1 : FOR [3]=0 TO 1
110   FOR I=1 TO 3 : OUT [I],[I+2] : NEXT
130   LET [1],([1] << 1) : LET [2],([2] << 1) 
140   LET [1],([1] | IN(1)) : LET [2],([2] | IN(2))
150 NEXT : NEXT : NEXT
160 LET [1],([1] & #FF) : LET [2],([2] & #FF)
170 RETURN

 スイッチ状態は、8ビットを分割して配列に格納し
 論理値を表示すればよいでしょう。

200 ' show
210 LET [17],([0] & 1) : LET [0],([0] >> 1)
220 LET [16],([0] & 1) : LET [0],([0] >> 1)
230 LET [15],([0] & 1) : LET [0],([0] >> 1)
240 LET [14],([0] & 1) : LET [0],([0] >> 1)
250 LET [13],([0] & 1) : LET [0],([0] >> 1)
260 LET [12],([0] & 1) : LET [0],([0] >> 1)
270 LET [11],([0] & 1) : LET [0],([0] >> 1)
280 LET [10],([0] & 1) : LET [0],([0] >> 1)
290 ? [10],[11],[12],[13],[14],[15],[16],[17]
300 RETURN

 FORを利用して、短くします。

200 ' show
210 FOR I=17 TO 10 STEP -1
220   LET [I],([0] & 1)
230   LET [0],([0] >> 1)
240 NEXT
250 ? [10],[11],[12],[13],[14],[15],[16],[17]
260 RETURN

 入力、表示のサブルーチンをつくったので
 サブルーチンコールのブロックを書きます。

20 GOSUB 100 : ' get switch state
30 LET [0],[1] : GOSUB 200 : WAIT 60
40 LET [0],[2] : GOSUB 200 : WAIT 60
50 IF BTN() GOTO 70
60 GOTO 20
70 ? "exit"
80 END

 合体してまとめます。

10 ' show switch state
20 GOSUB 100 : ' get switch state
30 LET [0],[1] : GOSUB 200 : WAIT 60
40 LET [0],[2] : GOSUB 200 : WAIT 60
50 IF BTN() GOTO 70
60 GOTO 20
70 ? "exit"
80 END
100 ' get switch state
110 FOR [5]=0 TO 1 : FOR [4]=0 TO 1 : FOR [3]=0 TO 1
110   FOR I=1 TO 3 : OUT [I],[I+2] : NEXT
130   LET [1],([1] << 1) : LET [2],([2] << 1) 
140   LET [1],([1] | IN(1)) : LET [2],([2] | IN(2))
150 NEXT : NEXT : NEXT
160 LET [1],([1] & #FF) : LET [2],([2] & #FF)
170 RETURN
200 ' show
210 FOR I=17 TO 10 STEP -1
220   LET [I],([0] & 1)
230   LET [0],([0] >> 1)
240 NEXT
250 ? [10],[11],[12],[13],[14],[15],[16],[17]
260 RETURN

 スイッチの情報入力では、配列を使うとわかりにくい
 かも知れません。そのときは英文字の変数を利用する
 とわかりやすくなります。

10 ' show switch state
20 GOSUB 100 : ' get switch state
30 LET [0],[1] : GOSUB 200 : WAIT 60
40 LET [0],[2] : GOSUB 200 : WAIT 60
50 IF BTN() GOTO 70
60 GOTO 20
70 ? "exit"
80 END
100 ' get switch state
110 FOR C=0 TO 1 : FOR B=0 TO 1 : FOR A=0 TO 1
110   OUT 1,A : OUT 2,B : OUT 3,C
130   LET [1],([1] << 1) : LET [2],([2] << 1) 
140   LET [1],([1] | IN(1)) : LET [2],([2] | IN(2))
150 NEXT : NEXT : NEXT
160 LET [1],([1] & #FF) : LET [2],([2] & #FF)
170 RETURN
200 ' show
210 FOR I=17 TO 10 STEP -1
220   LET [I],([0] & 1)
230   LET [0],([0] >> 1)
240 NEXT
250 ? [10],[11],[12],[13],[14],[15],[16],[17]
260 RETURN

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

10 ' show switch state
20 @LOOP
30 GSB @GET
40 LET [0],[1]:GSB @SHOW:WAIT 60
50 LET [0],[2]:GSB @SHOW:WAIT 60
60 IF BTN() GOTO @EXIT
70 GOTO @LOOP
80 @EXIT
90 ? "exit"
95 END
100 @GET
110 FOR C=0 TO 1:FOR B=0 TO 1: FOR A=0 TO 1
110   OUT 1,A : OUT 2,B : OUT 3,C
130   LET [1],([1] << 1) : LET [2],([2] << 1) 
140   LET [1],([1] | IN(1)) : LET [2],([2] | IN(2))
150 NEXT:NEXT:NEXT
160 LET [1],([1] & #FF) : LET [2],([2] & #FF)
170 RTN
200 @SHOW
210 FOR I=17 TO 10 STEP -1
220   LET [I],([0] & 1)
230   LET [0],([0] >> 1)
240 NEXT
250 ? [10],[11],[12],[13],[14],[15],[16],[17]
260 RTN


目次

inserted by FC2 system