SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

たった5つのルールではじめるC言語開発

論理演算の様子を観察

LED表示でシフト演算の動作を見る


  • X ポスト
  • このエントリーをはてなブックマークに追加

 引き続き、論理演算についての学習を行います。今回はシミュレータ上でLEDを点灯させて、論理演算の様子をよりリアルに観察します。実際にマジカルボックスのプログラムでは多用しているわけではありませんが、論理演算(ビット操作)は、組込みソフトウェアではとても重要な処理のひとつなので、じっくりと取り組みます。

  • X ポスト
  • このエントリーをはてなブックマークに追加

4ビットのポートを使ったプログラムを作ろう

 前回の解説で変数の値がシフトすることがわかっても、いまひとつ動作が身近に感じられないかもしれません。ということで、シミュレータの得意技を使ってLED表示でシフト演算の動作を見てみることにしましょう。

入出力ポート

 以前のシフト演算の説明では、8ビットのポートに8個LEDをつないだ例を紹介しました(忘れちゃったひとはもう一度読んでからここに戻ってきてください)。マジカルボックスに使用しているマイコン78K0S/KA1+は、とても小さなマイコンなので8ビットまとまったポートがありません。そこで、半分の4ビットだけで試すことにします(そのほうがシミュレータの設定が楽でもあります)。

 使うのはポート2という入出力ポートです。ポート2は、プログラムの中ではP2という名前で変数と同じように扱うことができます。

プログラムの作成

 では、LEDを使う新しいプログラムを作ってみましょう。logictest.cを作った時と同様に、PM plusのファイルメニューから[新規作成(N)]を選びます。「Untitled2」というウィンドウが開きますから、図1のようにプログラムを入力して下さい。

図1:LEDを点灯させるプログラム
図1:LEDを点灯させるプログラム

 内容を説明します。冒頭いきなり不思議な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)]を選びます。

図2:logictest.cをプロジェクトから削除する
図2:logictest.cをプロジェクトから削除する
プチ解説

 削除といっても、logictest.cというファイルまでハードディスクから消えてしまうわけではありません。再度変数のシフトプログラムを試したいときは、今回の逆にshift.cを削除してlogictest.cをプロジェクトに戻せばOKです。

 削除できたら、今度はshift.cをプロジェクトに追加します。図19~20およびその解説を参考にしてください。追加ができたらビルドをします。[ビルド]メニューから[ビルド(B)]です。

 今回は1行目にちょっと長い英単語があるため、スペルミスなどでエラーを起こしやすいので注意してください。また、P2やPM2は大文字である必要がありますので、エラーの時はチェックしてみてください。エラーなくビルドできたら、これまで同様に[ディバグ]を選んでSM+を起動します。SM+が起動したところを図3に示します。

図3:SM+が起動、ソース(shift.c)が表示されている
図3:SM+が起動、ソース(shift.c)が表示されている

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
確認のためのLED表示パネルを作ろう

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
たった5つのルールではじめるC言語開発連載記事一覧

もっと読む

この記事の著者

舘 伸幸(タチ ノブユキ)

NECマイクロシステム株式会社 勤務NPO法人SESSAME 所属開発ツールのソフトウェア開発を経て組込みソフトウェア開発に従事。プライベートにも半田ごては手放さない。2006年からSESSAME に参加。若い世代に物を作る楽しさを伝えていきたい。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3727 2009/03/26 18:01

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング