第15回 EEPROM(3) 〜チャレンジ課題〜

EEPROMに関するチャレンジ課題に挑戦してみましょう!

目次

timeValueの問題点

前回のプログラムで、タイマー時間を管理する変数、timerValueは、EEPROMの読み出し、書き込みに合わせて1バイト(unsigned char)に変更してしまいました。timerValueを秒にする場合、timerValueの最大値は255ですので、255秒までしか設定できません。

実際のタイマーは1分単位の設定で問題ないと思いますので、timerValueを分として扱い、タイマー時間計測をする部分では、timerValue x 60秒をカウントすれば対応できます。

ただ、保存できる値が255まで、というのはちょっと心許ないです。

そこで、チャレンジ課題として、現在は1バイト(=8ビット)で保存しているデータを2バイト(=16ビット)で保存するように変更してみましょう。

現在のプログラムは

unsigned char timerValue;

と宣言していますので、これを

unsigned short timerValue;

の2バイト変数として、このEEPROMから読み出したデータをこの変数に代入、またこの変数の値をEEPROMに保存するようにプログラムを変更してみてください。

更新履歴

日付 内容
2017.7.30 新規投稿
2018.12.2 誤記訂正
通知の設定
通知タイミング
guest
0 コメント
本文中にフィードバック
全てのコメントを見る
Wonder
Wonder
5 年 前

PICマイコン勉強の為、いつも参考にさせて頂いております。
チャレンジ課題の考え方としてアドレス0,アドレス1のデータを1バイトとして読出し、その値をtimerValueに代入し、演算(足し算)。書込み時は、分割して1バイトデータずつ保存するといった感じでしょうか。1バイト以上読み書き可能なライブラリがあればよいのですが、解らず、もう少しヒントを頂けないでしょうか。

管理者
管理者
返信  Wonder
5 年 前

Wonderさま、
ご質問どうもありがとうございます。

考え方としては書かれています通り、EEPROMに書き込む際には2バイトのデータを1バイトずつにバラしてアドレス0とアドレス1に保存すればOKです。また読み出す際にはアドレス0とアドレス1の2バイトのデータを読み取り、それを16ビットのtimerValueに再現すればOKです。

これを実現するには掛け算と割り算を使用してもいいですし、ビット演算子を使用してもできます。一般的には以下のビット演算子を使用するケースが多いです。

>> (右に1ビットシフト)
<< (左に1ビットシフト)

Wonder
Wonder
返信  管理者
5 年 前

ご教示ありがとうございます。
ビットシフトにて出来ました。また、256まで待てなったので下位4ビットを2ビットずつ分離し、EEPROMに読み書きも出来ました。ありがとうございました。

管理者
管理者
返信  Wonder
5 年 前

Wonderさま、

早速うまくいったとのことでよかったです!
情報がちょっと少なかったかな、と思ったのですが、C言語を使いこなされているようですね。2ビットずつ分割して、というのも面白いですね。色々と試して腕を上げていただければと思います!

目次