ディジタル温度センサー3」で紹介した割り込み処理からフックで実行されるプログラムの内、DS18B20+ にコマンドを送信(書き込み)する部分と、温度データを読み出している部分のアセンブラソースを紹介します。 クロック周波数8MHzでの実施例です。 実行サイクル数やNOPコマンドで時間調整している為、クロック周波数が異なる場合には調整が必要です。

下図がコマンドを送信(書き込み)する部分です。

write2

先の書き込みスロットを終了する為に 1.5usec 間 1-Wire-バスを解放した後で、書き込みスロットの先頭で 1.5usec 間バスに Low を出力します。 その後送信データに従ってバスに High または Low を出力して割り込み処理を抜けます。 最初の 1.5usec は次の割り込みまでのタイマー設定を行う間に確保されます。 2つ目の 1.5usec は送信データのシフトとNOP命令で確保しています。

下図は、温度データを読み出している部分のアセンブラソースです。

read2

先のスロットを終了させる為に 1.5usec 間 1-Wire バスを解放した後で、1.5usec 間バスに Low を出力し、さらに 9.5usec 経過した時点でバスを読み出して割り込み処理を抜けます。 クロック周波数が8MHzでは10usec程度の待ち時間は割り込みを抜けずにNOPで処理する方が安定するし、他の(低位)割り込み処理にも不具合は予想されないと思います。

関連記事のインデックスは右記事の末尾にあります。 → ディジタル温度センサー


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。