teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2016/11/11 05:31

投稿

hiim
hiim

スコア1689

answer CHANGED
@@ -16,4 +16,43 @@
16
16
  if(PORTB & 0x08){/* 4番目が点灯している */}
17
17
  ```
18
18
 
19
- 他の方も回答で??と思われている通り、整数でLED番号指定する。。。この場合ならLEDが15個付いているような構成が思い浮かばなかったのでこちらの判断で4つのLED制御として回答しています。
19
+ 他の方も回答で??と思われている通り、整数でLED番号指定する。。。この場合ならLEDが15個付いているような構成が思い浮かばなかったのでこちらの判断で4つのLED制御として回答しています。
20
+
21
+ ### 追記
22
+ 質問者様の他の質問を見るとビット演算あたりがまだ少し苦手なのかなと見受けられましたので。
23
+
24
+ 2進数で
25
+ 0010というのはつまり16進数で0x02
26
+
27
+ PORTBは8bit?かわかりませんが、下位4ビット以外は全て無視したければ
28
+ `PORTB & 0x0f` <- 0x0fは2進数表記で00001111なので
29
+ としてやれば
30
+ PORTBがもし2進数で11010011だったとしたら上記処理で
31
+ ```
32
+ 11010011
33
+ 00001111
34
+ をビット演算で&すると
35
+ 00000011
36
+ ```
37
+ で00000011という結果を得られます(ようは条件判定に必要のない値を無視する)
38
+
39
+ その要領で
40
+ PORTBのBIT状態を比較するのに
41
+ 0001 は16進数で 0x01 
42
+ 0010 は16進数で 0x02
43
+ 0100 は16進数で 0x04
44
+ 1000 は16進数で 0x08
45
+ という値でビット演算した値が0になるかどうかで各ビットが1なのか0なのかを判断しています。
46
+
47
+ これの応用でPORTBの下位1ビットと3ビットがONかどうかというのは
48
+ if((PORTB & 0x01) && (PORTB & 0x04)){}
49
+ でもできますが、
50
+ 0x01 | 0x04 つまり
51
+ if((PORTB & 0x05) == 0x05)でも比較できます(
52
+ 下位ビットがすべて1かどうかの判定は
53
+ 0x01 | 0x02 | 0x04 | 0x08 = 0x0F
54
+ なので
55
+ if((PORTB & 0x0F) == 0x0F)
56
+ となるわけです。
57
+
58
+

2

シュウセイ

2016/11/11 05:31

投稿

hiim
hiim

スコア1689

answer CHANGED
@@ -10,10 +10,10 @@
10
10
  という構成なら
11
11
 
12
12
  ```
13
- if(PORTB & 0x01){// 1番目が点灯している}
13
+ if(PORTB & 0x01){/* 1番目が点灯している */}
14
- if(PORTB & 0x02){// 2番目が点灯している}
14
+ if(PORTB & 0x02){/* 2番目が点灯している */}
15
- if(PORTB & 0x04){// 3番目が点灯している}
15
+ if(PORTB & 0x04){/* 3番目が点灯している */}
16
- if(PORTB & 0x08){// 4番目が点灯している}
16
+ if(PORTB & 0x08){/* 4番目が点灯している */}
17
17
  ```
18
18
 
19
19
  他の方も回答で??と思われている通り、整数でLED番号指定する。。。この場合ならLEDが15個付いているような構成が思い浮かばなかったのでこちらの判断で4つのLED制御として回答しています。

1

修正

2016/11/11 05:15

投稿

hiim
hiim

スコア1689

answer CHANGED
@@ -10,10 +10,10 @@
10
10
  という構成なら
11
11
 
12
12
  ```
13
- if(PORTB & 0x01){// 1番目が点灯しているか?}
13
+ if(PORTB & 0x01){// 1番目が点灯している}
14
- if(PORTB & 0x02){// 2番目が点灯しているか?}
14
+ if(PORTB & 0x02){// 2番目が点灯している}
15
- if(PORTB & 0x04){// 3番目が点灯しているか?}
15
+ if(PORTB & 0x04){// 3番目が点灯している}
16
- if(PORTB & 0x08){// 4番目が点灯しているか?}
16
+ if(PORTB & 0x08){// 4番目が点灯している}
17
17
  ```
18
18
 
19
19
  他の方も回答で??と思われている通り、整数でLED番号指定する。。。この場合ならLEDが15個付いているような構成が思い浮かばなかったのでこちらの判断で4つのLED制御として回答しています。