回答編集履歴

3

追記

2016/11/11 05:31

投稿

hiim
hiim

スコア1689

test CHANGED
@@ -35,3 +35,83 @@
35
35
 
36
36
 
37
37
  他の方も回答で??と思われている通り、整数でLED番号指定する。。。この場合ならLEDが15個付いているような構成が思い浮かばなかったのでこちらの判断で4つのLED制御として回答しています。
38
+
39
+
40
+
41
+ ### 追記
42
+
43
+ 質問者様の他の質問を見るとビット演算あたりがまだ少し苦手なのかなと見受けられましたので。
44
+
45
+
46
+
47
+ 2進数で
48
+
49
+ 0010というのはつまり16進数で0x02
50
+
51
+
52
+
53
+ PORTBは8bit?かわかりませんが、下位4ビット以外は全て無視したければ
54
+
55
+ `PORTB & 0x0f` <- 0x0fは2進数表記で00001111なので
56
+
57
+ としてやれば
58
+
59
+ PORTBがもし2進数で11010011だったとしたら上記処理で
60
+
61
+ ```
62
+
63
+ 11010011
64
+
65
+ 00001111
66
+
67
+ をビット演算で&すると
68
+
69
+ 00000011
70
+
71
+ ```
72
+
73
+ で00000011という結果を得られます(ようは条件判定に必要のない値を無視する)
74
+
75
+
76
+
77
+ その要領で
78
+
79
+ PORTBのBIT状態を比較するのに
80
+
81
+ 0001 は16進数で 0x01 
82
+
83
+ 0010 は16進数で 0x02
84
+
85
+ 0100 は16進数で 0x04
86
+
87
+ 1000 は16進数で 0x08
88
+
89
+ という値でビット演算した値が0になるかどうかで各ビットが1なのか0なのかを判断しています。
90
+
91
+
92
+
93
+ これの応用でPORTBの下位1ビットと3ビットがONかどうかというのは
94
+
95
+ if((PORTB & 0x01) && (PORTB & 0x04)){}
96
+
97
+ でもできますが、
98
+
99
+ 0x01 | 0x04 つまり
100
+
101
+ if((PORTB & 0x05) == 0x05)でも比較できます(
102
+
103
+ 下位ビットがすべて1かどうかの判定は
104
+
105
+ 0x01 | 0x02 | 0x04 | 0x08 = 0x0F
106
+
107
+ なので
108
+
109
+ if((PORTB & 0x0F) == 0x0F)
110
+
111
+ となるわけです。
112
+
113
+
114
+
115
+
116
+
117
+

2

シュウセイ

2016/11/11 05:31

投稿

hiim
hiim

スコア1689

test CHANGED
@@ -22,13 +22,13 @@
22
22
 
23
23
  ```
24
24
 
25
- if(PORTB & 0x01){// 1番目が点灯している}
25
+ if(PORTB & 0x01){/* 1番目が点灯している */}
26
26
 
27
- if(PORTB & 0x02){// 2番目が点灯している}
27
+ if(PORTB & 0x02){/* 2番目が点灯している */}
28
28
 
29
- if(PORTB & 0x04){// 3番目が点灯している}
29
+ if(PORTB & 0x04){/* 3番目が点灯している */}
30
30
 
31
- if(PORTB & 0x08){// 4番目が点灯している}
31
+ if(PORTB & 0x08){/* 4番目が点灯している */}
32
32
 
33
33
  ```
34
34
 

1

修正

2016/11/11 05:15

投稿

hiim
hiim

スコア1689

test CHANGED
@@ -22,13 +22,13 @@
22
22
 
23
23
  ```
24
24
 
25
- if(PORTB & 0x01){// 1番目が点灯しているか?}
25
+ if(PORTB & 0x01){// 1番目が点灯している}
26
26
 
27
- if(PORTB & 0x02){// 2番目が点灯しているか?}
27
+ if(PORTB & 0x02){// 2番目が点灯している}
28
28
 
29
- if(PORTB & 0x04){// 3番目が点灯しているか?}
29
+ if(PORTB & 0x04){// 3番目が点灯している}
30
30
 
31
- if(PORTB & 0x08){// 4番目が点灯しているか?}
31
+ if(PORTB & 0x08){// 4番目が点灯している}
32
32
 
33
33
  ```
34
34