「天文屋のためのマイコン入門」プログラムちょこっと解説
見事LEDを光らすことができました。ここでプログラム解説といきたいとこですが、わずか数行のプログラムでも、ちゃんと解説しようとすると大変です。いずれ、全部説明しますが、ここでは、重要な次の2行について説明します。この2行が、まさにLEDを光らせてるのです。
MOVLW B'11111111'
MOVWF 5
B'11111111'というのは数値です。最初にBがあるのでこれは2進数です。10進数に直すと255です。マイコンでは2進数のままの方が分かりやすいので10進数に直しませんが、これは次と同じことです。
MOVLW 255
MOVWF 5
この2命令は、数値255をワーキングメモリに転送し、それをデータメモリの5番地に転送しています。つまり、この2行は、
データメモリの5番地に数値B'11111111'を書き込んでいる
と捉えることができます。
でも何でメモリの5番地にデータを書き込むとLEDが光るのでしょうか?
実は、このポート(RA0からRA7のAグループの8本)は、メモリの番地に最初から割り当てられているのです。(そのようなマイコンの設計になっている)
つまり、ポートに対する操作は、特定の番地に対するメモリへの操作とまったく同じなのです。
このように、ポートなど、マイコン内蔵の機能の操作をメモリに割り当ててあると次のようなメリットがあります。
●ポートやその他内蔵機能を操作する専用の命令が要らない。
つまり、メモリ操作に関する命令だけで、ポートや内蔵機能を操作できる。
これはとても便利なことです。
さて、まとめると、
●RA0からRA7のポートにデータ('1'か'0')を出力したい場合は、メモリの5番地に書き込む
●RA0からRA7のポートからデータ('1'か'0')を入力したい場合は、メモリの5番地から読み込む
(ただしRA5からは出力できない、入力専用なので)
ちなみにRB0からRB7のBグループのポートですが、これは6番地に割りついています。
| 固定リンク
コメント
始めまして。デジカメのレリーズケーブルを改造したく、色々調べていた所、こちらに辿り着きました。
マルチコプターに搭載するデジカメのズーム機能を、ラジコンのプロポにて操作したいと考えています。ただ、空きチャンネルが1つしかないため、そのままだとズームした後、ズームアウトすることが出来ません。
ちなみに、この空きチャンネルは3段スイッチになっています。3段の信号はそれぞれ、High、Low、0の3種類になります。
イメージとしては、High→ズーム、Low→停止、0→ズームアウトと言った感じです。
これらの信号を、レリーズ基板のズーム&ズームアウト端子に直接送れば出来るんじゃないかな?と考えています。。。
スペースが限られているのと、重さにシビアなため、あまり大きな回路にしたくないのですが、この様な回路を作成することは可能でしょうか?
ADG1419の様なアナログスイッチやラッチングリレーを組み合わせれば出来るかな?と思ってはいるのですが、マイコンや電子工作の知識が乏しいので、是非ともご教授頂ければと思いコメントを送らせて頂きました。
何卒、よろしくお願いいたします。
投稿: fuji | 2014年11月 5日 (水) 17時18分
fujiさん、始めまして。
説明読みましたが、ちょっとわかんないですね。
あきチャンネルとか、なんのこと言ってるのか分からないです。
私の知らない分野なので、お役に立てないかも知れません。
投稿: ほんまか | 2014年11月 6日 (木) 12時48分
わかり難い説明で申し訳ございません。
図で説明すると分かり易いのかもですね…
とりあえず、チャンネルとかは無視していただいて
構いません。
High(5V)、Low(2.5V)、0Vの3種類の入力信号によって
出力先を替えたいだけなのです。
・High→ズームボタンの端子
・Low→停止
・0→ズームアウトボタンの端子
と言った感じです。
いかがでしょうか?
投稿: fuji | 2014年11月 6日 (木) 14時40分
fujiさん、
コンパレーターというアナログ素子を使えば、それぞれの値に応じた3本のデジタル信号を出力することは可能です。
その先は、ボタン端子の仕様によるのでなんともいえませんが。2~3個のICで可能です。
投稿: ほんまか | 2014年11月 6日 (木) 22時53分