はじめてのH8マイコン 基礎編
<第9回> モニタでLEDを点灯させてみよう!


| | コメント(0) | トラックバック(0)

 いよいよ、H8マイコンボード上にあるLEDを点灯させるときがやってきました.これまで ”マイコンを早く動かしてみたい” といった衝動をぐっと抑えて,数々のソフトウェアのインストールを行ってきましたが,そろそろ嫌気がさしてきた頃ではないでしょうか.
 前回は、Htermというターミナル・ソフトウェアを使ってH8マイコンとの通信に成功しました.モニタ・プログラムとHtermを使うとH8マイコンを手動で操作することが可能になり,マイコンの状態がわかりやすくなります.今回は、どのようにしたらH8マイコンを操作できるのか詳しく解説していきます.具体的には、モニタを使ってH8マイコン・ボードに接続されている二つのLEDを点灯/消灯させることを目標にします.
 それでは、H8マイコンの学習をそろそろスタートしましょう.

■H8マイコンとLEDの接続について
 LEDを点灯させるには,まずLEDがH8マイコンのどこのポートに接続されているのか知っておく必要があります.H8マイコン・ボードの回路構成図については基礎編の第2回で簡単に紹介しましたが,H8マイコン・ボードの全回路図については,ヴイストン(株)[Vstone]の下記のwebページからダウンロードすることができます.

  http://www.vstone.co.jp/top/products/robot/beauto/cdownload.html

 回路図を見ると,図1に示すように入出力ポートと呼ばれるポート6の37番ピン(P64)と38番ピン(P65)に,それぞれLEDが接続されています.LEDのアノード側は+3.3Vの電源に接続され,カソード側は100Ωの抵抗を介してH8マイコンの入出力ポートに接続されています.
 このように接続すると,ポートに"L"('0')を出力するとLEDが点灯し,逆にポートを"H"('1')にするとLEDが消灯します.このことはLEDを操作する上でとても重要ですから、覚えておいてください.

9-1.jpg
<図1>H8マイコンとLEDの接続回路

■モニタを使ってH8マイコンを操作してみよう

 それでは実際にプログラムを書く前に,モニタ・プログラム(モニタ)を通じてH8マイコンを操作してLEDを点灯させてみましょう.
 H8マイコンボードと パソコンをUSBケーブルで接続し,電源スイッチを[ON]にしてからHtermを起動します.前回も試しましたが,[Console]のウィンドウ中で [?]と入力してリターン・キーを押してみてください.H8マイコンとの通信がうまくいけば,図2のようにモニタ・プログラムの使い方を説明したメッセージ が表示されるはずです.

9-2.jpg
<図2>HtermによるH8マイコンとの通信例

●モニタのコマンドを使ってLEDを点灯してみよう

 いよいよマイコンを操作してLEDを点灯させてみます.モニタのプロンプト(:)に続いて,次のように入力してみましょう.
: M FFE9 [リターン・キー]
リターン・キーを押すと,
  FFE9 FF ?
と表示されます.?の後に続けて
  FF [リターン・キー]
と入力してみましょう.これで写真1のように,二つのLEDが点灯するはずです.

9-3.jpg
<写真1> H8マイコンボード上の二つのLEDが点灯しているようす

 次に,モニタには、
  FFEA FF ?
と入力を求めてきます.今はFFE9の値だけを変更したかったので,ここでは単に"."(ピリオド)を入力して,いったん終了しておきます.
  . [リターン・キー]

●モニタのコマンドを使って2つのLEDを点灯/消灯してみよう
 先ほど"."を入力したあとは,モニタはプロンプトを返します.これに続けて,今度は以下のように入力してみましょう.
: M FFD9 [リターン・キー]
すると,
  FFD9 00 ?
という表示が返ってきます.これに続けて,
  FF [リターン・キー]
と入力してみましょう.二つのLEDが消灯するはずです.図3に示すように,FFD9の値をいろいろ変えてみて,LEDがどのように変化するのか試してみ ましょう.
 たとえば,”10”を入力するとLED1は消灯,LED2が点灯します.今度は”20”を入力すると逆にLED1が点灯,LED2は消灯します.”30”を入力すると二つのLEDが消灯し,”00”を入力すると二つのLEDが点灯します.

9-4.jpg
<図3>モニタからH8マイコンを操作する

■H8マイコンの構造
●アドレスって何?

 H8マイコンでLEDを点灯/消灯できたところで,次はH8マイコンのしくみについて詳しく考えてみましょう.H8マイコンのI/O(Input /Output:入出力)は,[アドレス]を指定してデータを書き込んだり,読み込んだりします.先の例のように,”FFE9”や,”FFD9”がI/O を制御するためのアドレスだったのです.

 ここでアドレスという新しい言葉が出てきましたので,もう少しわかりやすく解説します.図4に示すように,H8マイコン内部には [CPU:Central Processing Unit]と呼ばれるコンピュータの心臓部があります.そのCPUを中心として,外部入力,外部出力,そしてメモリがつながっています.
 メモリは、プログラ ムやデータを記録するとても重要なユニットです.[CPU+メモリ]という組み合わせは,[人間+紙]という組み合わせに似ています.紙がたくさんあった ほうが計算しやすいのと同様に,CPUもできるだけ多くのメモリがあるほうが処理しやすくなります.
 このメモリですが,真っ白な紙というよりも,方眼紙の ようなマス目のある紙にたとえたほうがよいかもしれません.どこに何をかいたかがわからなくなってしまうと困るので,マス目には番号が割り振ってありま す.それを[アドレス]といいます.アドレスは住所と同じように数値で表現され,たとえば[メモリの100番地に結果を書き込む]といったように[番地]を つけて呼びます.

9-5.jpg
<図4>マイコンのメモリのイメージ

●H8マイコンのアドレス空間とメモリ・マップ
 H8マイコン(H8/36064)のアドレス空間は,プログラム領域とデータ領域合わせて64Kバイトです.H8/36064マイコンのメモリ・マップを 図5に示します.ここではアドレスをH'xxxxという16進数表記で表します.
 電源を切っても内容が消えない読み出し専用メモリのROM (Read Only Memory)がH'0000~H'7FFF番地,電源を切ると記録内容が消滅する読み書き可能なRAM (Random Access Memory)がH'F780~H'FF7F番地に割り当てられています.

9-6.jpg
<図5>H8/36064マイコンのメモリ・マップ

●H8マイコンのI/Oポートの構造
 H'F700~H'F77F番地,およびH'FF80~H'FFFF番地には,内部I/Oレジスタと呼ばれるマイコンを制御するための機能などが割り当 てられています.LEDを点灯させたときに,Htermから”FFE9”や,”FFD9”といった数値を入力しました.実は、これがH8マイコンのI/Oを 制御するためのレジスタのアドレスだったのです.

 図6に簡略化したI/Oポートのブロック構造を示します.LEDを接続したポート6は入出力可能な双方向ポートです.このポートの操作には次の2つの内部I/Oレジスタが関係しています.
・ポート・コントロール・レジスタ6(PCR6)
 ポート6の入出力の方向を決めるレジスタで,H'FFE9番地のアドレスに指定されています.
・ポート・データ・レジスタ6(PDR6)
 ポート6に出力する値を書き込んだり,ポートの状態を読み込むためのレジスタで,H'FFD9番地のアドレスに指定されています.

9-7.jpg
<図6>簡略化したI/Oポートのブロック構造図

 それでは,モニタでLEDを点灯させたときのことを思い出して復習していきましょう.
(1) まず,H'FFE9のアドレスにH'FFを書き込んだ
 この操作はポート・コントロール・レジスタ6(PCR6)を出力に設定することを意味します.図7にPCR6のビット構成を示します.このレジスタの ビットを'1' にセットすると対応する端子は出力ポートとなり,'0' にクリアすると入力ポートとなります.リセット後のビットの値(初期値)は入力モードになっています.

9-8.jpg
<図7>ポート・コントロール・レジスタ6(PCR6)のビット構成

(2) 次に,H'FFD9のアドレスにH'FFを書き込んだ
 この操作はポート・データ・レジスタ6(PDR6)の各ビットが'1'に設定され,ポートの出力レベルが"H"となってLEDが消灯することを意味します.図8にPDR6のビット構成を示します.このレジスタのビットを'1' にセットすると対応する端子の出力レベルが"H"となりLEDが消灯します.逆に'0' にクリアすると出力レベルが"L"となりLEDが点灯します.リセット後の各ビットの値(初期値)は'0'に設定されていたため,ポートの出力レベル が"L"となっていてLEDが点灯しました.

9-9.jpg
<図8>ポート・データ・レジスタ6(PDR6)のビット構成

(3) H'FFD9のアドレスに”10”を入力するとLED1は消灯,LED2が点灯しました.これはLED1の接続ポートに相当するPDR6の4ビット目 (PDR64)が'1'("H")となり,LED2の接続ポートに相当する5ビット目(PDR65)が'0'("L")となったことを意味します.

(4) H'FFD9のアドレスに”20”を入力するとLED1は消灯,LED2が点灯しました.これはLED1の接続ポートに相当するPDR6の4ビット目 (PDR64)が'0'("L")となり,LED2の接続ポートに相当する5ビット目(PDR65)が'1'("H")となったことを意味します.

(5) H'FFD9のアドレスに”30”を入力すると二つのLEDが消灯しました.これはPDR6の4と5ビット目(PDR64,PDR6)が,それぞれ'1'("H")となったことを意味します.

(6) H'FFD9のアドレスに”00”を入力すると二つのLEDが点灯しました.これはPDR6の4と5ビット目(PDR64,PDR6)が,それぞれ'0'("L")となったことを意味します.

 以上のように,それぞれに割り当てられた内部I/Oレジスタのアドレスをアクセスすることで,あたかもメモリ内のデータを扱うかのようにポートを操作することができます.このように、メモリ・マップに機能を割り当てて使用する方式をメモリ・マップトI/O方式と呼んでいます.

 次回以降は,いよいよC言語プログラミングでLEDを点灯させることをはじめます.これまでレジスタの値を手動で操作しながらLEDを点滅できました.この人手による操作をあらかじめ記述したプログラムによる操作に置き換えることが,マイコンのプログラミングです.
 お楽しみに!

< Yoshihito Shimada >

トラックバック(0)

このブログ記事を参照しているブログ一覧: はじめてのH8マイコン 基礎編
<第9回> モニタでLEDを点灯させてみよう!

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/2977

コメントする

このブログ記事について

このページは、katouが2009年6月22日 11:19に書いたブログ記事です。

ひとつ前のブログ記事は「はじめてのH8マイコン 基礎編<第8回> ターミナル・ソフトウェアHtermでH8マイコンと通信してみよう!」です。

次のブログ記事は「はじめてのH8マイコン 応用編<第1回>H8マイコンでライントレース・ロボットを作ってみよう!」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。