目次
前
次
ハードウエアテスト(その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
目次
前
次