PR

 しかし,いくら良い問題でも簡単に解けるものではない。この問題を独力で解くために,まずは一定の時間が与えられる。しかし前のプログラムもきちんと理解していない上に,割り込み処理のコードの理解も曖昧。静かな部屋に他の生徒のカチャカチャとキーボードの音が響く中,どこに割り込み処理のコードを挿入すべきかを必死に考える。

 ところがまもなくタイムアップ。解答が図5のように発表される(プログラムの高解像度の画像データを開く場合はこちら)。

図5●7セグメントLEDの制御プログラム(4)

 分からないながらに,プログラムを頭から眺めていると,EGPやEGNは初めて出てくる記号。教材をめくると特殊機能レジスタ(SFR)の一覧の中に発見。それぞれが「外部割り込み立ち上がりエッジ許可レジスタ」「外部割り込み立ち下がりエッジ許可レジスタ」のことで,このコード部分では入力信号の立ち上がりエッジ(押して離したとき)に割り込む設定にしている。続くPPR01,PPR11,PIF1,PMK1も初めて見る記号。これは,割り込み要因であるINTP1に対してのフラグらしい。

 メインのプログラムは,前問と同様に2行になっている。ただし,1行目は「NOP(何もしない)」としている。このようにすることで,割り込みを受け付けるような状態になっているわけだ。

 などとちょっとずつその意味を調べていくものの,プログラム部分は完全には理解できず。一応,プログラムを間違いなく入力して,実習用のCPUボードで動きだけを確認する。そこまでだ。

最後の実習問題はタイマ割り込み

 さらに実習は先に進む。いよいよ最後の問題はタイマ割り込みを実践すべきもの。

(5)7セグメントLEDの制御
タイマ割り込みによる表示データ更新処理
問題(4)を元にして,『INTP1割り込み』の代わりに『タイマ0の割り込み』で実行するように変更しなさい。
※タイマ0のインターバル時間は,0.5秒とすること。
※桁選択情報は、内蔵RAM中に保存しておくこと。
※16進数の値は、P15から入力すること。

 この問題では,前問ではボタンを押すことで割り込んでいたものを,タイマを利用して一定間隔で表示変更をしようというもの。やはり,問題を解くために時間が与えられるものの,ほとんど解けない。ちなみに解答例は図6の通り(プログラムの高解像度の画像データを開く場合はこちら)。

図6●7セグメントLEDの制御プログラム(5)

 前問と大きくプログラムが変わるのが,「SET1 TAU0EN」から続く,一連のタイマ設定の部分。そこの部分は確認できるものの,これを一から自分で作るとなると,やっぱり無理に違いない。プログラムを入力して,動きだけは確認する。

 講師からの指示によって,完全に理解できる生徒は表示変更の間隔を決めるインターバル時間を変更したり,あるいは表示する7セグメントLEDを変えたりなどのプログラムを作成している。当初はあそこまでいけるかも,などと甘い皮算用をしていた自分が恥ずかしい。そんな優秀な方々を横目に見ながら,ひたすらにプログラムの解読を試みる。

 そんな時間を過ごす中で,3日間のプログラムがようやく終了。やはり予備知識がない中の講習はかなりきつい。特に最終日はギアの入り方がこの2日間と違ってスピードアップしたようで,ほとんど理解できずにいた。

 ただし,マイコンがどのような振る舞いをしていて,プログラムはどのようにできているのかは一通り分かったような気がする。復習をきちっとすれば,この3日間は決してムダなものではなくなるはずだ。

図7●講師の湯浅氏(右)と最後に握手。

 このセミナーにはおみやげ(?)として,簡単なボード,開発ツールを同梱したマイコンのスターターキットが付いている。「自分で勉強すれば自信が付きますよ」と湯浅氏(図7)。数カ月後には,どこまで筆者の実力が付いたのかが判断できるように,簡単な問題をもらうことを約束し,セミナー会場を後にした。