2017-03-25 8 views
1

私は8051マイクロコントローラプラットフォームでKEILをIDEとして、C言語をプログラミング言語として使用しています。C言語の配列にビット変数をマージする

私は、スイッチ機能で使用するビットの配列を作成しようとしています。

sbit P1; 
sbit P2; 
sbit P3; 

buttons [2:0] = P1 | P2 | P3 

switch (buttons[2:0]) 
    { 
    case 0x1: //First button is pressed 
    case 0x2: //Second button is pressed 
    case 0x4: //Third is pressed 
    default: //Multiple buttons are pressed. Hence invalid 

    } 

ビットを1つのエンティティに結合してスイッチ機能として使用する方法が見つかりませんでした。

誰でも可能な方法でタスクを実行する方法を提案できますか。

+0

スイッチ(P1 << 0 | P2 << 1 | P3 << 2)の何が問題なのですか?私はあなたがビットアドレス可能領域内の連続したバイトレジスタに個人を配置するようにリンカを強制することができたと思うが、その種のものはむしろ乱雑になる。 – doynax

+3

タートはCではありません。 – Olaf

+0

@Olaf:ちなみに、C言語の逸脱と拡張のレベルは、質問がCタグの下で適切に分類されるためには受け入れられますか?この場合、アーキテクチャのビット・アドレス可能なメモリ機能は明らかに言語の拡張ですが、比較的自然なものです。私の考えでは、組み込み関数、 'pragma'構造体や実装定義の振る舞いに依存することとはまったく異なります。 – doynax

答えて

0

最後に私は自分の問題を解決する方法を見つけました。

int buttons=0x00;  
buttons = ((0xFF & !P1) << 2) | ((0xFF & !P2) << 1) | ((0xFF & !P3) << 0); 
関連する問題