アプリ版:「スタンプのみでお礼する」機能のリリースについて

H8マイコンは、1つのプログラムで複数の周辺機器を同時に使うことができますか?
例えば、LCDとSCI(シリアル通信)を同時に動かしたい。または、AD変換とLCD・SCIを同時に走らす。
とかです。
変数の設定次第で、どうにかなると噂で聞きました。(例えば、グローバル変数を設定するとか?)

ご回答をお願いします。

A 回答 (2件)

それは可能です。

太古の8ビットマイコン、それこそ8080や6800の頃にはすでに、そういう処理は行われていましたから。が、変数の設定をいくらこねくり回してもダメで、プログラムでどうにかするんです。

もう少し具体的には、それぞれの処理を行う関数なりサブルーチンを作り、タイマ割り込みで順番に動かすとか、単純にループで回して順番に頭から動かすとか、そういったことになります。グローバル変数は…タイマ割り込みの処理の中でカウンタを数えて処理する・しないを判断する場合には、必要になるでしょう。
    • good
    • 0
この回答へのお礼

変数の設定ぐらいでは、ダメですか・・・
タイマ割り込みやサブルーチンなどが必要なんですね。
早速、タイマ割り込みの勉強をします。

ありがとうございました。

お礼日時:2012/02/16 00:21

H8マイコンにはCPUが1個しかないのでCPUが行う操作は1時期に1個しか出来ません。



SCIは、通信を開始するのCPUが操作する必要が有りますが、通信を終了するまではCPUが別の操作をすることは可能です。
その為には、LCDの操作をしている間にSCIの開始の操作を行い、それが終わったらLCDに戻り、SCI通信が終了したらLCDの操作を中断してSCI通信の終了の操作をし、それが終わったらまたLCDに戻ります。
このような処理をする為には割り込みを使用するか、リアルタイムOS(RTOS)を使用します。

たとえば、SCI通信の終了で割り込みが発生するようにしておいて、その割り込みの中で通信終了時の処理を行います。
処理の流れとしては次のようになります。
 SCI通信を開始する→LCDの処理を行う→(どこかで割り込み発生:SCI通信の処理)→LCD処理が続く。
LCDの処理では、いつ割り込みが発生するかは意識しないで書く事が出来ます。
SCI通信では、1文字ごとに割り込みが発生するのでそれに対応した処理が必要です。
例えば、10文字を送ろうとすれば、最初の処理で10文字送る準備をしておいて、最初の1文字を送ります。
1文字の通信が終わると割り込みがかかるので、その中で全部送ったかどうか判断し、残りが有るのならそれを送り、無いのであればSCIの動作を止めます。
AD変換も同じようにします。
このように、割り込みに対応した周辺機器であれば他のものと同時に動かす事が出来ます。
その為には周辺機器の動作を開始するプログラムと、割り込みを処理するプログラムを書く必要が有ります。
AD変換についても同じようになります。

RTOSを使用する場合はRTOSが使用できる環境になっている必要が有ります。
この場合は、それぞれの処理を行うプログラムをタスクとして記述する事になります。
この場合、それぞれのタスクが同時に動作しているように見えますが、あくまでも見えるだけで、実際には一つのCPUが順番に処理しているだけです。
他のタスクをあまり気にせずに記述出来るのでプログラムを作るのは楽になりますが、RTOSまで作るとなると少し大変になりますね。
    • good
    • 0
この回答へのお礼

SCI通信は、1文字ごとに割り込みが発生するのですね。知りませんでした。
どこで、割り込みが入るようにするか研究しないとだめですね。

ありがとうございました。

お礼日時:2012/02/16 00:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!