目次

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

 IchigoJamのV1.1では、シフト処理を使えるので
 次のような方向指示器を簡単に実現できます。



 シフトは右シフト、左シフトを「>>」、「<<」を
 使えば簡単に実現できます。

 左シフトならば、変数に1を与えていきます。

200 ' left shift
210 LET T,([0] & 1)
220 LET [0],([0] << 1)
230 LET [0],([0] | T)
240 RETURN

 右シフトならば、変数に16を与えていきます。

250 ' right shift
260 LET T,([0] & 8)
270 LET [0],([0] >> 1)
280 LET [0],([0] | T)
290 RETURN

 4LEDがある場合、次のような動作になります。



 4LEDのどのLEDを点灯、消灯するのかは1ビット
 ずつ取り出して、シフトして値を確定します。

 対象となるビットを取得してから、右シフト。

100 ' led flashing
110 LET [1],(([0] & 8) >> 3)
120 LET [2],(([0] & 4) >> 2)
130 LET [3],(([0] & 2) >> 1)
140 LET [4],(([0] & 1) >> 0)
150 FOR I=1 TO 4
160   OUT I,[I]
170 NEXT
180 RETURN

 LEDの点滅の回路は、以下とします。



 方向指示なので、どちらに指示を出すのかを
 スイッチで決めます。



 スイッチの論理値を取得し、それを利用して
 初期値を設定後、サブルーチンを呼出します。

 4LEDの点灯、消灯は用意してあるので、シフト処理と
 方向の組み合わせをサブルーチンを使い、わかり易く
 します。

10 ' winker
20 LET [0],0 : GOSUB 100
30 L=IN(1) : R=IN(2)
40 IF L=1 LET [0],1 : GOSUB 300
50 IF R=1 LET [0],8 : GOSUB 350
60 IF BTN() GOTO 80
70 LET [0],0 : GOSUB 100 : GOTO 30
80 ? "EXIT"
90 END
100 ' led flashing
110 LET [1],(([0] & 8) >> 3)
120 LET [2],(([0] & 4) >> 2)
130 LET [3],(([0] & 2) >> 1)
140 LET [4],(([0] & 1) >> 0)
150 FOR I=1 TO 4
160   OUT I,[I]
170 NEXT
180 RETURN
200 ' left shift
210 LET T,([0] & 1)
220 LET [0],([0] << 1)
230 LET [0],([0] | T)
240 RETURN
250 ' right shift
260 LET T,([0] & 8)
270 LET [0],([0] >> 1)
280 LET [0],([0] | T)
290 RETURN
300 ' left flashing
310 FOR I=1 TO 4 : GOSUB 100 : GOSUB 200 : NEXT
320 WAIT 60
330 RETURN
350 ' right flashing
360 FOR I=1 TO 4 : GOSUB 100 : GOSUB 250 : NEXT
370 WAIT 60
380 RETURN

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

10 ' winker
20 LET [0],0:GSB @FLASH
30 @LOOP
35 L=IN(1):R=IN(2)
40 IF L=1 LET [0],1:GSB @LBLINK
50 IF R=1 LET [0],8:GSB @RBLINK
60 IF BTN() GOTO @EXIT
70 LET [0],0:GSB @FLASH:GOTO @LOOP
80 @EXIT
85 ? "EXIT"
90 END
100 @FLASH
110 LET [1],(([0] & 8) >> 3)
120 LET [2],(([0] & 4) >> 2)
130 LET [3],(([0] & 2) >> 1)
140 LET [4],(([0] & 1) >> 0)
150 FOR I=1 TO 4
160   OUT I,[I]
170 NEXT
180 RTN
200 @LSFT
210 LET T,([0] & 1)
220 LET [0],([0] << 1)
230 LET [0],([0] | T)
240 RTN
250 @RSFT
260 LET T,([0] & 8)
270 LET [0],([0] >> 1)
280 LET [0],([0] | T)
290 RTN
300 @LBLINK
310 FOR I=1 TO 4:GSB @FLASH:GSB @LSFT:NEXT
320 WAIT 60
330 RTN
350 @RBLINK
360 FOR I=1 TO 4:GSB @FLASH:GSB @RSFT:NEXT
370 WAIT 60
380 RTN


目次

inserted by FC2 system