シリアル通信でオリジナルprintf関数を作ろう:イチから作って丸ごと学ぶ! H8マイコン道(12)(1/3 ページ)
ポート、スイッチ、タイマとH8マイコンの周辺機能を解説してきたソフトウェア開発編。最終回のテーマは「シリアル通信」だ!
前回のあらすじ
――前回、健一君は見事に宿題をやってのけ、晴れてデート……。といきたいところでしたが、晴子さんに見事にかわされてしまいました。これまでポート、タイマとH8マイコンの周辺機能をマスターしてきた健一君、残すはシリアル通信です。卒業式を控える晴子さんに、カッコイイところを見せられるといいんですが……。(前回へ)
本連載も今回で最終回、皆さん最後までお付き合いください。おっと、そろそろ健一君が来るころですね。
晴子さんのドライバ使ってパソコン通信しよう
ここは健一君が所属する大学のサークル部屋。また、いつもの足音が聞こえてきました……。
晴子さん、こんにちは!
あら、健一君。遅かったじゃない。
知っていると思うけど、ワタシ、明日で卒業なの。だから健一君への個別指導も今日で最後ね。
そうか、晴子さんにもう会えないのか〜(あーあ、結局デートできなかったなぁ……)。
そんなにシンミリしないの!
ところで健一君。ワタシの宿題やってきた?
ギクッ!! それがその〜。
まぁ、健一君のことだから、そんなことだろうと思って、今回は特別に「通信プログラム」作ってきたわよ!(ソースコード1)
さすが晴子さん、ステキ!!
/* パソコンに「Hello world!」を送信する * */ #include "sci.h" void wait(long); int main(void) { sci_open(); for (;;) { sci_puts("Hello world!\r\n"); wait(50000); } return 0; } void wait(long times) { while (times--); }
な〜んだ。
こんなに簡単にできちゃうんだ!!
何いってるのよ!
通信ドライバを作ったからできるのよ。
まったく! 何も分かっていないようね。
うぅ……。
ふんっ!!
今日も厳しくいくからね!
(シュン……)。
――これまでポート、タイマとH8マイコンの周辺機能を紹介してきましたが、今回のテーマは「シリアル通信」です。今日も元気いっぱいの晴子さんは、健一君が宿題を解けなかったこともお見通し、ちゃんと通信プログラムを作ってきたようです。まずは、晴子さんのプログラムをコンパイルして、パソコンと通信してみましょう!
今回はH8Tiny-USBとパソコンとで、シリアル通信をするプログラムを作成します。
H8Tiny-USBとパソコンを接続するUSBケーブルは、パソコンからH8Tiny-USBに電源を供給する役割と、パソコンで作成したプログラムをH8Tiny-USBにダウンロードする役割があります。実はそこでは“シリアル通信”が行われているのです。
連載第1回「プリント基板CADで“マイ”マイコンボードを作ろう!!」でお伝えしましたが、H8Tiny-USB搭載のIC「FT232RL」は、USBをシリアル・インターフェイスへと変換するICで、これによりUSB上でシリアル通信をエミュレートしています。
それでは、プログラムをコンパイルしてみましょう。ここから「hello.lzh」をダウンロードして、適当な解凍ソフトで展開してください。
最初にスタートアップ・ルーチン「crt0.s」をアセンブルします。
$ h8300-elf-gcc -c crt0.s
すると、オブジェクトファイル「crt0.o」が生成されます。
次に、本体の「hello.c」をコンパイルします。
$ h8300-elf-gcc -c -mh -mn hello.c
今度は、オブジェクトファイル「hello.o」が生成されます。
さらに、シリアル通信ドライバの「sci.c」をコンパイルします。
$ h8300-elf-gcc -c -mh -mn sci.c
「sci.c」には、“sci_open”“sci_puts”などのシリアル通信のための関数があります。コンパイルするとオブジェクトファイル「sci.o」が作られます。
そして、「crt0.o」「hello.o」「sci.o」をリンクし、1つの実行ファイルを作ります。
$ h8300-elf-gcc -o hello -T 3664.x -nostdlib crt0.o hello.o sci.o -lc
これで実行ファイル「hello」が作られました。
最後に、実行ファイルをヘキサファイルに変換します。
$ h8300-elf-copy -O srec hello hello.mot
すると、ヘキサファイル「hello.mot」が作られます。以下のように、ライタでH8/3664のフラッシュメモリにプログラムを書き込んで、マイコン側の準備は完了です。
$ h8write -3664 sw1.mot
続いて、パソコン側の準備をします。
今回のシリアル通信においては、H8Tiny-USBから送られてくるビットデータを、単に文字として表示します。そのために使用するソフトウェアが「ターミナル」で、今回はWindowsでよく使われている「TeraTerm」を使用します。
それでは早速、TeraTermをインストールしましょう。
Webブラウザを開き、「TeraTermプロジェクト日本語トップページ」にアクセスしてください。そして、ダウンロードを選択し、「teraterm-4.65.exe」をダウンロードします。
ダウンロードした「teraterm-4.65.exe」をダブルクリックするとインストールが開始されます。今回は標準の設定でインストールしますが、「コンポーネントの選択」では「コンパクトインストール」を、「言語の選択」では「日本語」を選択してください。
インストールが終了したら、H8Tiny-USBを接続したままTeraTermを起動します。すると「新しい接続」ダイアログが表示されるので、「シリアルポート」を選択してください(図1)。
次に、[設定(S)]―[シリアルポート(E)...]メニューを選択します。すると、「シリアルポートの設定」ダイアログが表示されるので、図2のように入力し、[OK]ボタンを押します。さらに、[設定(S)]―[設定の保存(S)...]メニューを選択し、「TERATERM.INI」ファイルに設定を保存します。
これで準備が整いました。H8Tiny-USBでプログラムを実行すると、図3のようにH8Tiny-USBから送信されたメッセージ「Hello world!」が表示されます。
コラム:調歩同期式シリアル通信
やった! 「Hello world!」が表示された。
あらあら、健一君。
ずいぶんうれしそうね。
晴子さんがシリアル通信のドライバを作ってくれたおかげで、簡単に通信できましたね。
動作の保証されたプログラムは積極的に使わなきゃ。これもモジュール化の利点よね。
ところで晴子さん。
モジュール化とリンクって、すごく関係がありそうですよね!?
あら、今日の健一君、さえてるわね。
それじゃあ、プログラミングは一休みして、開発ソフトウェアの話をしてあげるわ。
お願いします!
Copyright © ITmedia, Inc. All Rights Reserved.