• ベストアンサー

PICのピンの割り当て、この記述は正しいのでしょうか?

現在C言語によるプログラムを勉強しているのですが、わからない箇所が出てきました。 PICのピンの入出力の割り当てをする部分の set_tris_a(0x10); //RA1,RA3を入力,RA0,RA2,RA4を出力に設定している。 という部分です。 調べたところ"0x"という部分は16進表記であるという意味で、その後の部分で格ピンの入出力を表しているようなのですが、"10"の部分は10進法表記ではないかと思うのです。 (16進なら"A"と表記するのが正しいのではないでしょうか) また"0x"は16進表記との事ですが、他に、たとえば10進や2進表記で格ピンの割り当ては可能なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.3

ご質問のPICがPIC16F84Aの事で、「set_tris_a(0x10);」がTRISAレジスタへの書き込みを意味するとしたら「RA1,RA3を入力,RA0,RA2,RA4を出力に設定」するには「ビット0、2、4を0に、ビット1、3を1にした値」を書き込まなければなりません。 「ビット0、2、4を0に、ビット1、3を1にした値」は「C言語」では「10」と書いても良いし「0xa」「0x0a」「0x00a」「0x000a」「0xA」「0x0A」「0x00A」「0x000A」「012」「2+8」「02+010」「2+2+2+2+2」「1000-990」など、どう書いても良いです。 最終的に「「ビット0、2、4を0に、ビット1、3を1にした値」になってくれれば良い訳で「数値として合っている」なら、どう書いたって構いません。 なお >set_tris_a(0x10); は明らかに間違いです。これでは「ビット0~3が0、ビット4が1の値」ですから「RA4のみを入力に、その他を出力」に設定してしまいます。 >また"0x"は16進表記との事ですが、他に、たとえば10進や2進表記で格ピンの割り当ては可能なのでしょうか? 「C言語では、整数定数を表すには、10進数と8進数と16進数の表記が使える」と言うのは、C言語そのものの言語仕様についての話で、PICのレジスタに値を書き込む話とは無関係です。

chicken773
質問者

お礼

詳しいお答え有難うございます。 set_tris_a(0x10)はやはり間違いだったんですね。 記述の方法も色々あるみたいで驚きです。 非常に参考になりました。

その他の回答 (4)

  • ddnp009
  • ベストアンサー率25% (15/58)
回答No.5

とりあえず、 0x10は、"じゅー"じゃない。"イチゼロ"。 >"0x"という部分は16進表記であるという意味で、 正解です。しかしこれが分かったというのに、 >"10"の部分は10進法表記ではないかと思うのです。 なぜこうなる!? >(16進なら"A"と表記するのが正しいのではないでしょうか) そら10進表記の"じゅー"だった場合でしょ。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.4

簡単に説明してみます。 2進数とC言語の16進数の表記0~16まではこんな感じです。 00000000 0x00 00000001 0x01 00000010 0x02 00000011 0x03 00000100 0x04 00000101 0x05 00000110 0x06 00000111 0x07 00001000 0x08 00001001 0x09 00001010 0x0a 00001011 0x0b 00001100 0x0c 00001101 0x0d 00001110 0x0e 00001111 0x0f 00010000 0x10 で、RA1,RA3を入力,RA0,RA2,RA4を出力に設定するためには、ビットを出力は0、入力は1にする必要がありますから2進数で表記すると00001010になります。16進だと0x0aです。 ですので、コメントとプログラムは明らかに食い違っています。 それと、2進から16進への変換を簡単に考える方法は、2進で4桁は16進の1桁にあたります。2進の0000~1111が16進の0x0~0xfです。 下から4ビットづつ16進に変換すれば全桁の16進数値が得られますよ。

chicken773
質問者

お礼

説明有難うございます、参考になりました。 これから16進表記をする際にはもう迷うことはなさそうです。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★PIC には詳しくないがアドバイス >また"0x"は16進表記との事ですが、他に、たとえば10進や2進表記で格ピンの割り当ては可能なのでしょうか?  ↑  C 言語で記述できるのならば、8、10、16進数のいずれかで各ピンの割り当てが可能です。  例えば、10 進数で 16 を表す値を信号として送るには  8進数では『set_tris_a( 020 );』  10進数では『set_tris_a( 16 );』  16進数では『set_tris_a( 0x10 );』  となります。 ・指定の方法が 8進表記だったり、16進表記だったりするだけで上記の3つは同じ指定になります。  なお、C 言語では 2 進数の表記は出来ません。  指定できるのは 8 進数、10進数、16進数です。 ・ちなみに  8 進数は先頭が 0 から始まる 0~7 の組み合わせの数です。  10 進数は先頭が 0 から始めない 0~9 の組み合わせの数です。  16 進数は先頭が 0x から始まる 0~9,A~F,a~f の組み合わせの数です。 ・以上。今後の参考に。

chicken773
質問者

お礼

なるほど、8進、10進、16進での記述が可能なのですね。 非常に参考になりました、有難うございます!

  • ozunu
  • ベストアンサー率14% (240/1644)
回答No.1

16進数の10は、10進数の16です。

関連するQ&A