データ通信手順に関して、チャレンジ課題に挑戦してみます。
この記事は更新済みです
現在、PICマイコン電子工作入門実践編シリーズの記事内容を最新の情報に合わせて、2025年9月までを目標に全面的に更新しています。
更新の理由は次のとおりです。
- 記事で使用している部品の中に、現在では調達できない部品があるため
- 記事内容に古い記述があるため
- 掲載している天気予報プログラムのアルゴリズムを改善するため
更新期間中は、新旧の記事間で一部内容に矛盾が生じる可能性があります。 ご不便をおかけいたしますが、ご理解のほどよろしくお願いいたします。
なお、更新済みの記事には冒頭に「この記事は更新済みです」の表示をしております。
引き続き、よりわかりやすく、役立つ情報を提供できるよう努めてまいります。 今後ともよろしくお願い申し上げます。
コンピュータのデータ通信
前回までの説明で、1つの信号線でデータ通信を行う方法から検討を始めて、SPI通信を行うまで順を追ってきました。
今まで説明ばかりでしたので、ここでデータ通信手順について別角度から考えてみたいと思います。
とはいっても、この課題でSPI通信の理解が深まる、というわけではありませんので、余力があれば考えていただければと思います。
これから検討していただくデータ通信手順は、今までとは全く異なるシステムです。
このシステムを使って、データ通信をうまく行う方法を考えてみてください。
データ通信システム
次のデータ通信システムを検討してみたいと思います。

このシステムは、送信者側には0〜9のラベルがついた10個のスイッチがあります。
また受信者側には0〜9のランプがあります。
次のように、送信者がいずれかのスイッチを押すと、受信者側ではその数字に対応したランプが点灯します。

例えば「1234」と送信したい場合、送信者はスイッチを順番に「1」→「2」→「3」→「4」と押せば受信者に「1234」を伝えることができます。
また、数字が連続する場合、例えば「112233」を送信したい場合は、送信者は「1」のスイッチを押して離して、「1」のスイッチを押して離して、というように操作すれば、数字が連続した場合でも問題なく送信することができます。
データの終わりを伝えるには?
送信者は何桁かの数値データを送ることにします。例えば「1234567」だったり「09876543210987」だったり、送りたいデータの桁数は毎回異なるものとします。
このとき、データ送信が終わったことを確実に伝えることができるような通信方法を考えてみてください。
例えば、データ送信の終わりを示すために、特別な数字として「999」と9を3回送ったら送信終了、というルールを送信者と受信者で取り決めた場合、一見うまくいきそうですが問題があります。
送信するデータが「12345」の場合は、「12345」を送ったあと「999」とスイッチ押せば終わり、ということを伝えることができます。
でも、「123456789998765」というデータを送りたい場合、データの途中に「999」が入っていますので「999」を送った時点でそのデータは終わり、続くデータは別のデータとして認識されてしまいます。
このようなことがないように、確実にデータの終わりがわかるような通信方法って、ちょっと難しそうですよね。
なお、データ通信システムは0〜9のスイッチとランプのみです。終わりを伝えるスイッチとランプの増設はできません。また、0〜9のスイッチとランプ以外の通信手段もない、という状況で検討してみてください。
解答例
解答例はいくつかありますが、このような通信方法があります。
例えば、次のように取り決めます。
情報 | 送り方 |
---|---|
0 | 「00」と「0」を2回送る |
1 〜 9 | それぞれの数字を1回送る |
例えば、「1234」を送りたい場合、1、2、3、4のスイッチを押して伝えます。
「01234」を送りたい場合、送信者は0、0、1、2、3、4のスイッチを押します。
受信者側では、0が「00」で送られてくることを知っていますので、「001234」と受信できた場合は「01234」と読み替えます。
このような取り決めをすれば、いろいろな数字を送ることができます。
データの終わりを知らせる場合、さらに次の取り決めを追加します。
情報 | 送り方 |
---|---|
0 | 「00」と「0」を2回送る |
1 〜 9 | それぞれの数字を1回送る |
データ送信終わり | 「01」を送る |
データ送信の終わりを「01」で表現します。
最初の取り決めでは「0」は必ず「00」としていますので、やり取りするデータに0がある場合、必ず「00」というように「0」が2回連続しています。
そのためやり取りするデータには「01」や「02」という数字列は絶対に出てこないことになります。
そこで、絶対に出てこない「01」を特殊な意味として決めることができます。
今回は「01」をデータ送信の終わり、という意味にしてみました。
この解答例と似たような考え方はいろいろなところで使われています。
「エスケープシーケンス」という用語で出てくることがありますので、この考え方を頭の片隅に入れておいていただければと思います。
次回から、SPI通信を使った温湿度・気圧データ取得のプログラム作成に入ります。
更新履歴
日付 | 内容 |
---|---|
2018.4.15 | 新規投稿 |
2025.7.25 | 解答例追加 |