PICでもっと遊ぶその1「ラジコンサーボを自由自在に動かす」夏でも楽しい工作教室(3/3 ページ)

» 2005年07月08日 14時11分 公開
[小林哲雄,ITmedia]
前のページへ 1|2|3       

割り込むには割り込みルーチンが必要なのだ

 割り込みを使う以上、割り込みルーチンも書く必要がある。PCはPICが自動的に退避してくれるが、そのほかは自前で退避する必要がある。とくにアキュムレータとステータスフラグは必ず退避する必要がある(そうしないと戻り先のプログラムがおかしくなる)。これは割り込みの説明のところにサンプルルーチンがあるので、これをそのまま使うするのが簡単だ。少々面倒くさいことをやっているのはフラグを保持して退避するためらしい。もう一つ、割り込みルーチンの最後はRETFIE命令を使う。これで割り込みを終了したという証だ。

MOVWF WBUF ; レジスタ類退避
SWAPF STATUS,W
BCF STATUS,RP0
MOVWF SBUF
;
(割り込みの作業)
;
SWAPF SBUF,W ; レジスタ類復帰
MOVWF STATUS
SWAPF WBUF,F
SWAPF WBUF,W
RETFIE

 割り込みは本業に影響を与えないようにフラグとWレジスタは退避しておく必要がある。今回の例ではTMR0が割り込み要因で冒頭で説明した「電話番号表示」に相当するINTCONの第2ビット(T0IF)が1になっている。これは割り込みルーチン内でクリアする必要がある。割り込みルーチンの最後は「RETFIE」命令を使う。

 今回の割り込みルーチンはサーボをコントロールするパルスを出すルーチンだ(これもタイマーで管理するとカッコよさそうだが、面倒なのでプログラムウェイトにする)。冒頭で説明したように1.5マイクロ秒を中心に±500マイクロ秒のパルスを作る。128を中心にして±127(つまり1〜255)の入力データに応じたパルスを作るのがよさそうだ。0が残るがこれは無制御にしてしまおう。127分割で500マイクロ秒にすると計算が大変なので1カウント4マイクロ秒とすると±508マイクロ秒となる。つまり992〜2008マイクロ秒のパルスができる。規格外といわれそうだがこのぐらいは「気にしない」か有効範囲を3〜253にすればよい。

 整理すると、入力データが0ならパルス無発生、1〜253の場合はまず988マイクロ秒のパルスを作ってから、さらに入力データ×4マイクロ秒のループを作ってパルス幅を広げる、というプログラムを書けば………おっと、その前に次回説明する予定の「割り込みに備えた」タイマーの再初期化と割り込みフラグを0に戻し、最後に割り込み再許可をさせる必要がある。

 今回のプログラムは各種の初期化のみだけなので、回路を組んでもサーボはピクリともせず、見た目的にはまったくつまらないので、検証作業はシミュレータ動作だけで済ませてしまおう。割り込みルーチンの冒頭にブレークポイントを設定し、実行させて停止するときの実行時間を監視すれば「大体20ミリ秒毎」に割り込みがかかっていることがわかる(サンプルプログラムを見ると分かるが0の処理は今回サボってやってないのであしからず)。

 該当するビットを立てる部分と下げる部分にブレークポイントを設定して実行し、停止したときの時間の引き算をおこなうと問題なく動作していることが分かる。さらにワークレジスタを書き換えてパルス幅を変えてみるのもテストしてみるとよい(テストプログラムにはこのためのコメントが入っている)。

 ということで、今回は割り込みをある程度理解したところで、次回、さらにプログラムを進めていく。

ブレークポイントを設定してデバッガを動かす。大体20ms毎の割り込みが発生しているようだ。
前のページへ 1|2|3       

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. レノボ、スピーカー9基を備えた12.1型Androidタブレット「Lenovo Tab Plus Gen 2」 (2026年06月30日)
  9. IBMが世界初のサブ1nm半導体チップ技術を発表/LenovoがノートPC向けで世界初となる“1000Wh/L”バッテリーの詳細を明らかに (2026年06月28日)
  10. GIGAスクール時代の学校に欠かせない「ネットワーク」と「周辺機器」 その動向に迫る (2026年06月30日)
最新トピックスPR

過去記事カレンダー