PIC16F877Aを使ってプログラムを作っています。その内容がセンサー(例えば温度センサー等)から取り入れた電圧をPICのA/D変換(10bit)を行って、その値を使ってpicで計算し、その結果を液晶に表示するといった内容なのですが、その計算過程で小数を扱わなければならないのですが、その計算がうまくいきません。A/D変換後の値をxとし具体的に式で書くと、
v = x * 5 / 1023 ・・・(1)
ここでvはセンサーから取り込んだ電圧値(値の範囲は0.935~1.748)です。
y = 218.5 - v / 0.008 ・・・(2)
又は
y = 218.5 - 125 * v ・・・(3)
上記の式はA/D変換後の値xを一度アナログ電圧値vに変換し(1)、そこから(2)又は(3)へ代入して得たい情報yを算出するといった少々面倒なものなのですが、これをアセンブラで書きたいのですが、このPICには乗除命令がないことや小数点の演算方法、16bitの乗除等の部分が引っかかってどうもうまくかけません。小数部分は固定小数点形式で考えて最終的にyは少数第二位を四捨五入したいと思っています。
どのようにプログラムを作ればよいのでしょうか。実際にソースを書いていただけると大変理解しやすいです。
No.1ベストアンサー
- 回答日時:
y0=(21850-12500*v)/100;
y1=((21850-12500*v)%100+5)/10;
y0は整数部、y1は小数点第1位の値となります。
乗算は、左シフトとANDと加算があればできます。
例えば、0110×0101であれば、
(00110000(←被乗数を3ビット左シフト) AND 0(←乗数のビット3))
+(00011000(←被乗数を2ビット左シフト) AND 1(←乗数のビット2))
+(00001100(←被乗数を1ビット左シフト) AND 0(←乗数のビット1))
+(00000110(←被乗数を0ビット左シフト) AND 1(←乗数のビット0))
となります。
値のビット数は、12500が16ビットなので、vが8ビットであっても16ビット×16ビット(ビット数の拡張が必須)=32ビットが必要になります。
プログラムは、自分の力でコーディングしてください。
回答ありがとうございます。
アセンブラはほとんど書いたことがなく初めてに近かったので、実際のソースと見比べてどのようになっているのかを一行ずつ理解していこうと考えていたのでついソースを要求するような質問になってしまいました。
もう少し時間をかけて考えてみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) 50台の織機から回転数を取得・集計しモニターに表示したい 2 2022/11/05 15:48
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- 統計学 統計検定2級の過去問について 1 2023/01/04 16:40
- C言語・C++・C# C言語について。 5 2023/06/27 18:37
- Excel(エクセル) エクセルのセルの書式設定・ユーザー定義の条件設定について 1 2022/08/17 21:56
- Excel(エクセル) 電卓は正しいのに エクセルで計算させると間違った答えです。なぜ? 7 2022/08/11 07:04
- スピーカー・コンポ・ステレオ 電気交流の実効値と値が違う平均値ではオームの法則が成り立たない理由を教えて下さい。 4 2022/05/02 09:53
- Excel(エクセル) エクセルでSUMIFS関数で条件範囲の部分が#valueになる。 4 2023/04/28 12:42
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(ソフトウェア) F-BASICで計算中の実行が中途で勝手に止まり、大変困っています。 2 2023/03/02 16:15
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelのINT関数の計算結果がお...
-
16進数 加算 減算 C言語
-
O(n log n)について2
-
VB6.0での小数点の扱いについて
-
CRCの計算方法について
-
除算を使わずに10で割りたい。
-
c languageで 簡単な質問があ...
-
floatの有効桁数
-
PICで小数点の演算
-
-2.18+2.11=-7.00000000000003E...
-
”/”を使わずに割り算したいんで...
-
C言語でセルオートマトンを作成...
-
VBAでミリ秒まで出力する方法
-
計算が合わない
-
16進数とかわからないです
-
Log関数に関する質問
-
C言語 型変換のタイミング
-
100桁の計算ができなくて困って...
-
z80について
-
VBAでの割り算の余りの求め方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
三角比の俯角の計算
-
c languageで 簡単な質問があ...
-
16進数 加算 減算 C言語
-
ExcelでPC(パソコン)によって...
-
VB.net Double と...
-
”/”を使わずに割り算したいんで...
-
ExcelのINT関数の計算結果がお...
-
有効数字について 以前質問をし...
-
floatの有効桁数
-
三菱シーケンサ(Aシリーズ)で...
-
距離から緯度経度を求める方法
-
VBAでミリ秒まで出力する方法
-
EXCELの関数"STDEV(標準偏差)"...
-
除算を使わずに10で割りたい。
-
C言語プログラミングにて、arct...
-
VB6.0での小数点の扱いについて
-
VBAでの割り算の余りの求め方
-
255の2の補数、B'00000001'が-...
-
変換指定子%22-16gの表示...
おすすめ情報