SHOEISHA iD

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

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

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

マジカルボックスのプログラムを読み解く 1


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

ダウンロード サンプルソース (44.7 KB)

プログラムを読んでみよう④ ―― コード送信symcom.c

 アプリケーションの最後は、パソコンへ命令コードを送信するプログラムです。symcom.cの中のSendCode()関数で処理しています。

 パソコンへは、M0x(エム、ゼロ、xは0~F)、0x0d,0x0aという文字列で命令コードを送信するきまりになっています。たとえば、スプーンをたたいたコードが1001なら、これは9に相当するので、送信する文字列は"M09",0x0d,0x0aです。最初のM0は固定値(いつも同じ)なので、その直後に付ける命令コードを数値から数字(文字)に変換するのがここでの主な処理です。

 コンピュータで扱う文字には、それぞれコード(値)が割り当てられています。表1にその一部を示します。表の横軸がコードの上位4ビット、縦軸が下位4ビットです。たとえば大文字のGという文字のコードは0x47で、数字の8と言う文字のコードは0x38です。この対応を利用することで、数値を文字に変換することができます。

 14行目で、命令コードが10未満かどうかの判断をします。10未満であれば0~9ですから、文字'0'(文字コードは0x30)に値を加算することで、対応した文字(コード)が得られます。命令コードが10以上のときは16進数表記に従ってA,B,C...Fの文字に変換する必要があります。そこで18行目のように、まず命令コードから10を引いて、文字'A'(の文字コード)に加算することで対応した16進数文字を得ることができます。

 あとは22行目以降で1文字送信関数を呼びながら1文字ずつ送信します。

表1:ASCIIコード表(一部)
表1:ASCIIコード表(一部)

 次回はいよいよ最終回です。デバイスドライバの説明と、改造例題を行います。

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

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

もっと読む

この記事の著者

舘 伸幸(タチ ノブユキ)

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング