直前の状態を保持するプログラムについて教えてください。
RB0: SW1 (SWは、ONで0入力)
RB1: SW2 (SWは、ONで0入力)
SW1、SW2両方がONされたとき、case0の処理
SW1のみONされたとき、case1の処理
SW2のみONされたとき、case2の処理
SW1,SW2両方OFFのとき、つまり、case3のとき、
1つ前の状態を出力したいのですが、プログラムが分かりません。
1つ前の動作で、SW1のみONされていたなら、
次に、SW1,SW2の両方がOFFになったときは、SW1のみONされていたときと同じ状態を出力する。
→つまり、前の状態を保持するプログラムを記述したいです。
素人質問で申し訳ありませんが、教えていただけると助かります。
void main(void){
int i,j,k;
int s;
i=0;
j=0;
k=0;
delay_ms(100);
while(1){
s = PORTB & 0x03;
switch(s){
case 0: LATCbits.LATC4 = 0;
LATCbits.LATC5 = 0;
i=1;
break;
case 1: LATCbits.LATC4 = 0;
LATCbits.LATC5 = 1;
j=1;
break;
case 2: LATCbits.LATC4 = 1;
LATCbits.LATC5 = 0;
k=1;
break;
case 3:
if (i=1){
LATCbits.LATC4 = 1;
LATCbits.LATC5 = 1;
i=0;
}
else if (j=1){
LATCbits.LATC4 = 0;
LATCbits.LATC5 = 1;
j=0;
}
else if (k=1){
LATCbits.LATC4 = 1;
LATCbits.LATC5 = 0;
k=0;
}
break;
default:break;
}
}
}
前の状態を保持するプログラム
Re: 前の状態を保持するプログラム
返信ありがとうございます。
変数に格納する方法で試しているつもりなのですが…うまくできておりません。
Switchの状態を変数swに格納。
swの値に応じて、
sw=0のとき、 case 0の処理
sw=1のとき、 case 1の処理
sw=2のとき、 case 2の処理 としていて、
sw=3のときに、1つ前の状態(case 0 又は case 1又は case 2)の処理を行いたいです。
case 0 , case 1, case 2の処理をそれぞれ変数i, j, kを使ってフラグを立てているつもりなのですが…うまく動作してくれません。
素人で良く理解できていないのかもしれません。
教えてください。
s = PORTB & 0x03;
switch(s){
case 0: LATCbits.LATC4 = 0;
LATCbits.LATC5 = 0;
i=1;
break;
case 1: LATCbits.LATC4 = 0;
LATCbits.LATC5 = 1;
j=1;
break;
case 2: LATCbits.LATC4 = 1;
LATCbits.LATC5 = 0;
k=1;
break;
変数に格納する方法で試しているつもりなのですが…うまくできておりません。
Switchの状態を変数swに格納。
swの値に応じて、
sw=0のとき、 case 0の処理
sw=1のとき、 case 1の処理
sw=2のとき、 case 2の処理 としていて、
sw=3のときに、1つ前の状態(case 0 又は case 1又は case 2)の処理を行いたいです。
case 0 , case 1, case 2の処理をそれぞれ変数i, j, kを使ってフラグを立てているつもりなのですが…うまく動作してくれません。
素人で良く理解できていないのかもしれません。
教えてください。
s = PORTB & 0x03;
switch(s){
case 0: LATCbits.LATC4 = 0;
LATCbits.LATC5 = 0;
i=1;
break;
case 1: LATCbits.LATC4 = 0;
LATCbits.LATC5 = 1;
j=1;
break;
case 2: LATCbits.LATC4 = 1;
LATCbits.LATC5 = 0;
k=1;
break;
Re: 前の状態を保持するプログラム
オフトピック
>うまく動作してくれません。
こういう説明だと情報量がゼロに等しく,何が起こっているのかを読み手が把握できません.
うまく(思ったように)動作しない のであれば,うまくない動作をしているのでしょうから
どういう状況になっているのかを具体的に述べた方が適切な回答を得られやすいと思います.
あと,フォーラムルールの「ソースコードタグの使い方」のところを読んで
コードを見やすい形にしていただけると読み易くて助かります.
こういう説明だと情報量がゼロに等しく,何が起こっているのかを読み手が把握できません.
うまく(思ったように)動作しない のであれば,うまくない動作をしているのでしょうから
どういう状況になっているのかを具体的に述べた方が適切な回答を得られやすいと思います.
あと,フォーラムルールの「ソースコードタグの使い方」のところを読んで
コードを見やすい形にしていただけると読み易くて助かります.
>変数i, j, kを使ってフラグを立てている
フラグを参照している箇所が
if( i=1 ) とかになっていますが,if( i==1 ) とすべきかと思います.
あと,フラグが2個以上立っている場合があり得そうですが,それは意図した形なのでしょうか.