4bitデータを変更して出力させるプログラム

このQ&Aのポイント
  • PIC16F88を使用したアセンブラで、4bitデータを変更して出力させるプログラムを作成する方法について教えてください。
  • ポートAに4bitの入力を行い、それを別の4bitのデータに変更してポートBから出力するプログラムの作成方法について教えてください。
  • マイコンPIC16F88を使用し、ポートAに入力された4bitのデータを別の4bitのデータに変更してポートBから出力するプログラムの作成方法を教えてください。
回答を見る
  • ベストアンサー

4bitデータを変更して出力させるプログラム

分かりにくいタイトルですみません。 PICに入力された4bitのデータを、違う4bitのデータにして出力させるプログラムを作りたいのですが、 いろいろなサイトを探してもそのような記事が無くて困ってます。 下記のような動作をするプログラムをご教示ください。 言語はアセンブラ 使用マイコン:PIC16F88 内部オシレーター使用 ポートAを4bit入力用 ポートBを4bit出力用 ポートAの入力が       ポートBの出力では ・LLLL             ・LLLL      ・HLLL             ・LHLL ・LHLL             ・LLHL ・HHLL             ・HLHL ・LLHL      の時    ・HHHL ・HLHL             ・LLLH ・LHHL             ・LHLH ・HHHL             ・HHLH ・LLLH             ・LLHH ・HLLH             ・HLHH このような動作です。 使用目的は簡単に書くと、自作のサラウンドプロセッシングアンプのチャンネルテストという機能のメイン制御用に使います。ロジックICでもできますが、とてつもなく部品点数が多くなってしまうので、マイコンで制御したいと思います。 暇な時でも良いのでよろしくお願いします。

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

  • ベストアンサー
  • 44060
  • ベストアンサー率33% (2/6)
回答No.2

RETLW命令を使用するのが一番簡単と思います。 以下はマニュアル記載の説明です。 Description: 8 ビットのリテラル“k”をW レジスタにロードして、スタックの最上位(リターンアドレス)をプログラムカウン タへロードします。これは2 サイクルの命令です。 Words: 1 Cycles: 2 Example:   CALL TABLE ;W contains           ;table offset           ;value.   •        ;W now has table   •        ;value.   • TABLE  ADDWF PC ;W = offset        RETLW k1 ;Begin table       RETLW k2 ;       •       •       •       RETLW kn ; End of table 命令実行前 W = 0x07 命令実行後 W = k8の値

chubechube
質問者

補足

44060様、回答ありがとうございます。 理解力の乏しい自分で、お恥ずかしい限りです。 お手数をおかけしてしまいますが、1つのデータの変換プログラム(命令文)でもいいので、教えて頂くことは可能でしょうか?

その他の回答 (1)

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

普通は16個のテーブルを作ります。 Aは0,8,4,12,2,10,6,14,1,9ですから AでソートしてAの数字の場所にBを入れておけば一発検索できますね。 余談ですが汎用機ではこのコンバージョン(8ビット)の文字列変換を やってくれる命令語があります。

関連するQ&A

  • PICのプログラムカウンタについて

    プログラムカウンタでポートAに4bitの2進数を入力して、変換された2進数のデータをポートBに出力させることはできたのですが、 ポートCにも違うデータを同時に出力させたいのですが、どういった命令文を作ったらいいでしょうか? 例えば、ポートAが「HLHL」の入力の時にポートBでは「HLLH」、ポートCでは「LLHL」を出力させる方法です。 言語はアセンブラ、マイコンはPIC16F886です。 よろしくお願いします。

  • 8bitの2進数を入力して2つのポートに(PIC)

    8bitの2進数を入力して2つのポートに出力させる方法 PIC16F886のポートAに8bitの2進数を入力したとします。 そのとき ポートAの入力が   ポートBの出力では  ポートCの出力では ・LLLLLLLL        ・LHHHLHLH   ・HLHLLHLH ・LLLLLLLH   のとき ・LHLLHHHH   ・LHLHLHLH          ・          ・          ・ ・LLLLLLHL        ・LHHLLLLH   ・HLHHHHH ポートAに入力された2進数を変更して、ポートB、ポートCに 出力させて、1チップで14セグメントLED(英数字表示器)を点灯させたいです。 このような動作は可能なのでしょうか?

  • PICの出力電流を制御

    質問を見ていただいてありがとうございます。 PICから電流を出力する際の電流の制御はどのようにするのでしょうか? パルスを出力したいのですが、そのときの電流を10mAにしたいと考えていますが、する方法がわかりません。 いくつか文献も見てみたのですが今一よくわかりませんでした。 もしかしたら基本的過ぎて載っていないだけのかもしれませんが、よろしくお願いします。 プログラムはアセンブラの環境で行っています。

  • PIC10F系で参考プログラムを伝授ください。

    PIC10F系でパルス波形検知の参考プログラムを伝授ください。 マイコン初心者です。 ネットと本を数冊読んで、何とかPICマイコンにアセンブラで書き込み スイッチでLEDをオンーオフするぐらいはできるようになりました。 そこからかなりのステップアップかもしれないのですが、 皆さんのご教授をお願いします。 あるパルス波形のみ検知し それ以外は無視する場合、タイマーとかカウントとか 使用したりするみたいですが、 具体的にはどのようなプログラムになるのでしょうか? 検知したい矩形波形は200Khzでデューティー比20%と仮定し 波形入力中は出力をし 内部クロック4MHzを使用したいです。 なるべく、入力する波形の5カウントぐらいで判別したいです。 参考文献等もございましたら、お願いします。 以上、よろしくお願いします。

  • PICで入力ポートの内容を出力ポートにコピーしたい

    PICのプログラムをアセンブラで組んでいるのですが、 どうにもシンプルな書き方ができなそうなのでお知恵をお貸しください。 例えば、 ポートAが入力、それ以外のポートは出力になっているとします。 ・ポートAの0番のオンオフを、ポートBの2番へコピー出力。 ・ポートAの1-3番のオンオフを、ポートCの4-6番へコピー出力。 という感じで、Aのオンオフ状況を、各出力ポートにコピーするということをしたいです。 どのようにしたらスマートに書けるでしょうか? ちなみに各出力ポートに関して、コピーする前に一旦全てオフにする、 というようなことはできません。

  • 【PICマイコン】一般製品にPICシリーズが使われてるって本当ですか?

    最近PICをはじめて大分アセンブラもなれてきて楽しめるようになってきました。 それで教えてGOOで色々見てるときにPICシリーズのマイコンは一般製品の中にも組み込まれているって書いてあったんですが本当ですか? 僕の中でPICやAVR等はそれなりにコアな趣味を持つ人たちのおもちゃ的な物だと思ってました。 もし本当に入ってるんだったら具体的にどんな製品にどのマイコン(例PIC16F877A等)が使われてるのか教えてください。凄く興味があります。 また、何処のサイトだったか忘れましたが「これからマイコンをはじめるならAVR!PICをやるメリットなし!」ぐらいの勢いで書いてあったんですがその通りなんでしょうか? もひとつ、、PICの勉強をはじめるときにアセンブラかCかで迷ったんですがアセンブラではじめた方がCPUの構造をより理解しやすいとの事でアセンブラで進めてきたんですが、いまいちその実感がわきません。具体的にどういう所でCPUの構造を理解しやすいのでしょうか? それっぽいなぁと思うのはクロックでタイミングを与え、そのタイミング毎に命令を実行しレジスタのBITで条件判断をしたり計算をしたりしてポートに出力する的な部分でしょうか?そもそもCPUの構造ってどういう事なんでしょうか?何て言うか例えて言うならエクセルは仕事で使うから詳しいけどWindowsの設定は全然解りませんみたいな感じです。 よろしくお願いしますm(_)m

  • 三端子レギュレータについて

    三端子レギュレータ7805(1A)で12Vを5Vに変換するオーソドックスな回路を作りました。入力側に22μF、出力側に100μFの電解コンデンサ、入出力端子両方に0.1μFのセラミックコンデンサを取り付け、レギュレータの2倍くらいの大きさの方熱器を取り付けました。 5Vの出力ではPICマイコンを制御しているのですが、このレギュレータを高温になる場所で使用すると当然レギュレータの放熱効果が下がって出力できる電流量は減りますよね?ちなみに摂氏80℃で使用するとして、レギュレータでPICマイコンを動作させるのに充分な電力を取り出す事は可能でしょうか? (PICマイコンの動作温度は考えない)

  • xmega128のPB4-7端子をIO出力できない

    現在ATxmega128A1Uマイコンを使用して、プログラミングを行っています。 PBポート0~7をIO出力設定にして、H→L を繰り返すテストプログラムを作成してみました。 PBポート0~3はH→Lできたのですが、4~7がその動作をしません。 現在この動作の確認はJTAGICE3でデバッグモードでプログラムステップさせながら見ています。このPBポート4~7はJTAG端子としても兼用されているとデータシートには書いてありましたが、このことが動作しない原因となにか関係ありますでしょうか? どうぞ、ご教示頂きますよう、よろしくお願い致します。

  • 2進数からアスキーコードへの変換についって

    趣味で電子工作を行っているものです。 picマイコンを使用して、A/D変換の結果10bitのデータを得ました。 8ビットのマイコンなので2つのレジスタに分かれてデータが格納されています。(上位2ビットと下位8ビット) この2進数のデータを10進数に変換し、一桁ごとにアスキーコードにして、シリアル通信を用いてPCに送りたいと思っています。 ここで、10bitのデータの2進数から10進数への変換。 10進数のデータを一桁ずつアスキーコードへ変換。 の2つのやり方がわかりません。 2進数のデータのままPCに送り、PCのソフト側で変換するほうが簡単なのですが、今回はPIC側で変換し、アスキーコードで送る必要があります。 プログラムに使用する言語はアセンブリです。 どなたか分かる方がいましたら教えてください。

  • ポートをたたくプログラム

    周辺機器のポートを制御してハードウェアを制御したことを実感したいのですが、どうすれば良いのかいまいちよくわかりません。Win32APIで直接ポートをたたくような関数ありますか?(どうも見つかりません)というかアセンブラじゃないとそういうことはできないのですか? また良い練習になるようなプログラムの題材があれば教えてください。 PCの環境は Windows98かWindows2000のVC++ です。