4ビットのポートを使ったプログラムを作ろう
前回の解説で変数の値がシフトすることがわかっても、いまひとつ動作が身近に感じられないかもしれません。ということで、シミュレータの得意技を使ってLED表示でシフト演算の動作を見てみることにしましょう。
入出力ポート
以前のシフト演算の説明では、8ビットのポートに8個LEDをつないだ例を紹介しました(忘れちゃったひとはもう一度読んでからここに戻ってきてください)。マジカルボックスに使用しているマイコン78K0S/KA1+は、とても小さなマイコンなので8ビットまとまったポートがありません。そこで、半分の4ビットだけで試すことにします(そのほうがシミュレータの設定が楽でもあります)。
使うのはポート2という入出力ポートです。ポート2は、プログラムの中ではP2という名前で変数と同じように扱うことができます。
プログラムの作成
では、LEDを使う新しいプログラムを作ってみましょう。logictest.cを作った時と同様に、PM plusのファイルメニューから[新規作成(N)]を選びます。「Untitled2」というウィンドウが開きますから、図1のようにプログラムを入力して下さい。
内容を説明します。冒頭いきなり不思議な1文#include…
というのがあります。これは、ハードウェア(ここではポート)を使うための一種の手続きです。後の章で出てきますので、ここではひとまずこのとおり入力してください。
main()
の中に入ると、一番最初にP2 = 0;
としてポート2の値を0に初期化しています。次にPM 2 = 0;
というのがあります。これはポート2をすべて出力に設定するための命令です。
冒頭の文も含めて、本来であればAppliletで設定するのですが、面倒なので直接ハードウェア制御の文を書いています。少し詳しく知りたい方は以下の「プチ解説」を参考にしてください。
main()
の中の最初の行で、「あれ?変数のときは宣言が必要だったのにいきなり代入文を書いてもいいの?」と思った方はご明察です。実は、このポート名のようにマイコンの持っているハードウェア資源は、別の場所で変数宣言に似た設定がなされているのです。
次にPM2です。マイコンの持つほとんどのポートは、入力端子にするか出力端子にするか選択できるようになっています。この入出力を決定するためのスイッチ群を、ポート・モード・レジスタといいます。PM2というのはP2のモード(入力か出力か)を設定する、Port Mode register 2から命名されているものです。78K0S/KA1+では、このポート・モード・レジスタの値を0にすると、対応したポートが出力になるような回路になっているのです。
以上でハードウェアの設定を終えて、次の行からが今回の主題部分です。
まずP2に1を代入しています。これでポート2の最下位ビットの端子が1になります。(このあたりがよくわからなくなってしまった方は、以前の連載「ハードウェアの話とコードの生成」「プログラムの実行」を見てみてください)。
そのあとは、変数のときと同様、ポート2の値を1ビットずつシフトさせていきます。プログラムを入力し終わったら、[ファイル]メニューから「名前を付けて保存」をします。ここではshift.cとします。保存が終わったら、プロジェクトのファイルを入れ替えます。変数のシフトで使ったlogictest.cは不要なので削除してください。図2のように、logictest.cを右クリックして、メニューから[ソース・ファイルの削除(D)]を選びます。
削除といっても、logictest.cというファイルまでハードディスクから消えてしまうわけではありません。再度変数のシフトプログラムを試したいときは、今回の逆にshift.cを削除してlogictest.cをプロジェクトに戻せばOKです。
削除できたら、今度はshift.cをプロジェクトに追加します。図19~20およびその解説を参考にしてください。追加ができたらビルドをします。[ビルド]メニューから[ビルド(B)]です。
今回は1行目にちょっと長い英単語があるため、スペルミスなどでエラーを起こしやすいので注意してください。また、P2やPM2は大文字である必要がありますので、エラーの時はチェックしてみてください。エラーなくビルドできたら、これまで同様に[ディバグ]を選んでSM+を起動します。SM+が起動したところを図3に示します。