
現在C言語によるプログラムを勉強しているのですが、わからない箇所が出てきました。
PICのピンの入出力の割り当てをする部分の
set_tris_a(0x10);
//RA1,RA3を入力,RA0,RA2,RA4を出力に設定している。
という部分です。
調べたところ"0x"という部分は16進表記であるという意味で、その後の部分で格ピンの入出力を表しているようなのですが、"10"の部分は10進法表記ではないかと思うのです。
(16進なら"A"と表記するのが正しいのではないでしょうか)
また"0x"は16進表記との事ですが、他に、たとえば10進や2進表記で格ピンの割り当ては可能なのでしょうか?
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のレジスタに値を書き込む話とは無関係です。
詳しいお答え有難うございます。
set_tris_a(0x10)はやはり間違いだったんですね。
記述の方法も色々あるみたいで驚きです。
非常に参考になりました。

No.5
- 回答日時:
とりあえず、
0x10は、"じゅー"じゃない。"イチゼロ"。
>"0x"という部分は16進表記であるという意味で、
正解です。しかしこれが分かったというのに、
>"10"の部分は10進法表記ではないかと思うのです。
なぜこうなる!?
>(16進なら"A"と表記するのが正しいのではないでしょうか)
そら10進表記の"じゅー"だった場合でしょ。
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進数値が得られますよ。
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 の組み合わせの数です。
・以上。今後の参考に。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- ノートパソコン Outlook-メール、タスクバー。 1 2022/07/28 09:25
- その他(プログラミング・Web制作) COBOL数値転記をCOPY句内での仕様 6 2022/06/15 18:48
- Perl perlのプログラミング 部分入れ替えの方法 1 2022/10/11 22:26
- その他(プログラミング・Web制作) ワードプレスのプラグインであるAddQuicktagを使いたいが… 3 2022/04/18 15:03
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP PHP MySql ページング 2 2022/09/20 06:38
- MySQL mysqlがインストールされているのかどうか 1 2023/06/05 14:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語、C+、C++、C#の違い
-
プログラミング言語の取得方法
-
COBOLでのNOT = の AND条件
-
プログラムからアイコンファイ...
-
C言語 おすすめの本
-
C言語とhtmlの違いを どな...
-
COBOLで文字タイプを数字...
-
VB.NETからC言語への乗...
-
プログラムに書かれる"%"記号の...
-
新しく挑戦する言語は・・
-
NET Frameworkってなんですか?
-
UNITY Float型の接尾辞fって
-
mecabで文節区切りを行う方法
-
スプレッドシートの作成
-
C++における継続行
-
プログラム言語Python の流行に...
-
会計システムをつくるために必...
-
一問一答形式の英単語のクイズ...
-
C/C++でマウスのクリックとホイ...
-
C/C++言語で漢字交じりの文をひ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムからアイコンファイ...
-
C言語、C+、C++、C#の違い
-
COBOLでのNOT = の AND条件
-
C言語とhtmlの違いを どな...
-
プログラムに書かれる"%"記号の...
-
COBOLで文字タイプを数字...
-
UNITY Float型の接尾辞fって
-
HTMLとC++で、どんなホームペー...
-
Excel VBAで文字化けする (英語...
-
C++における継続行
-
TO_CHARで小数点以下がある場合...
-
VBScriptで引数を省略したい場合
-
VCとVC++
-
UWSCはどのプログラミング言語?
-
vbaとc言語の関連性について
-
パスカルケースの由来。
-
任天堂で使うプログラミング言...
-
Excelの開発言語ってなんですか?
-
C++ ってなんて読む?
-
VBSでDim、Private、Publicの違い
おすすめ情報