PICでもっと遊ぶその5「完成したプログラムを眺めてみる」夏でも楽しい工作教室(1/2 ページ)

» 2005年08月05日 16時00分 公開
[小林哲雄,ITmedia]

 今までは、$80以上のレジスタに書き込むと警告メッセージが出ていたが、これを抑制する擬似命令がerrorlevelだ。先の警告メッセージは「302」であるので、この警告を無視する命令の記述は「errorlevel -302」となる。

 またワークレジスタの設定にはCBLOCK擬似命令を使っている。I2C_routine.incでもこの命令を使っているので同様に設定する。CBLOCKのあとに続く数字はPIC16F675のワークレジスタ開始アドレス$20にI2C_routine.incで使用している「9」を加えたものという意味だ。割り込みを使うので$0004からは割り込みルーチンを入れるのが適当だろう。

 次に続くのは、割り込みルーチンの初期設定部分だ。割り込みルーチンでは、まず復帰後に問題にならないようにレジスタとステータスの退避が必要になる。ここでは前回紹介したドキュメントにあるサンプルプログラムを利用した。WBUFとSBUFが退避先に指定されている。今回の割り込みはタイマー1だけを使うので割り込み要因のチェックを省いて、すぐタイマーのセットを行っている。

 続いてサーボ1のパルス出力ルーチンになる。まず位置情報を見て0ならパルスを出さない。1から255の間ならサーボデータを出すので、最小パルス幅を作成してからデータ量に応じたパルス分のウェイトを入れている。

 コメントで括られているのは、パルス幅を本来の1500マイクロ秒±500マイクロ秒ではなく、幅を広げて移動範囲を広くしようとしてた試みの痕跡だ。筆者が利用したサーボの場合は最後の737マイクロ秒から2261マイクロ秒の範囲で問題なく動作している。

 コメントを含む行のWレジスタへ入れる値と「後NOP」と書かれた行を含むNOPの数で幅を変えている。最後にサーボ1のタイマーを1つ減らしている。同じことをサーボ2に対しても行っている。ちなみにサーボ1はGPIO5、サーボ2はGPIO4を使うことになっている。

 割り込みルーチンの冒頭で退避したレジスタを元に戻し、割り込みの許可フラグを立て直して割り込みルーチンは終了する。

 ここでは、マクロ命令を1つ定義しているが、これはI2C_routine.incが必要とするもの。なお、このコードはAN982のサンプルプログラム「ByteRead.asm」と「SecRead.asm」を参考にしている。

(次はメインルーチンの構造を解説する……)

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

アクセストップ10

2026年07月01日 更新
  1. Macで外付けGPUが使える「TinyGPU」をRTX 5060 Tiで検証 実用性と浮き彫りになった課題 (2026年06月29日)
  2. 懐かしの「タマゴ型マウス」が現代仕様にアップデート エレコム創業40周年モデルの4代目「EGG MOUSE」は10色の着せ替え対応で4980円 (2026年06月30日)
  3. サブスク不要で画面を持たない潔さ Polarの新型フィットネストラッカー「POLAR Loop」を「Fitbit Air」と比較 (2026年06月30日)
  4. “縦2眼”で広角20mmから望遠120mmまでカバーするジンバルカメラ「DJI Osmo Pocket 4P」を試す (2026年06月30日)
  5. アキバ夏のボーナス商戦は「コスパと延命」がキーワード! 5000円切りのピラーレスケースや3000円弱のDDR5用メモリクーラー登場 (2026年06月29日)
  6. NUC風PCやメモリ128GBのモンスターミニPC「DAIV CX」などを続々投入! マウスコンピューターが事業戦略発表会で明かした新製品ロードマップ (2026年06月29日)
  7. 各社製マザーボードをデザインしたカプセルトイ「手のひらPCパーツ」が発売予定 4大メーカーが監修 (2026年06月29日)
  8. IBMが世界初のサブ1nm半導体チップ技術を発表/LenovoがノートPC向けで世界初となる“1000Wh/L”バッテリーの詳細を明らかに (2026年06月28日)
  9. フェイス、「スカイライン GT-R」をデザインしたミニカー型ワイヤレスマウス (2026年06月29日)
  10. AIグラス「Ray-Ban Meta」「Oakley Meta」がアップデート 日本語でのライブ翻訳に対応 (2026年06月29日)
最新トピックスPR

過去記事カレンダー