PIC関連情報

ここは、Microchip社が提供する小型CPUであるPICを用いたシステムの開発についてのメモを記す。

Comments

Comment: 

割り込みを利用し,また,割り込みルーチンでdelay_ms やdelay_us() を利用すると,他の部分でdelay 関数がうまく動作しなくなる.つまり,外部のdelay関数が動いているときに,割り込みが入り,その中で再度delay 関数が呼び出されるので,再起読み出しに対応していない関数のため,動作がおかしくなる.

 これを避けるために,割り込みで利用するdelay 関数と,外部で利用するdelay関数を別々に作成する方法がある.

CCS-C では, #use delay(clock=xxMHz) と記述すると,その部分にinline でそのルーチンが組み込まれる.なので,もう一つ別のdelay 関数を作るには,再度 #use delay() を記述すればよい.

ただ,つまらないことで,コンパイルに失敗することがある.その原因は,header ファイルで,

..............
#define LED PIN_C2
#define DELAY 1000
..................

のようなコードを書くことがある(LEDを点滅するための時間間隔を#define DELAY で定義).

すると,#use delay() のコードがあると,このdelay の文字の部分を #define DELAY 1000 のdelay 定数に置き換えられ,文法に乗っていないコードになり
*** Error 101 "C:\Users\maeya\Documents\PIC\18F2553-f\18f2553main-v2-0.c" Line 93(5,24): Library not found   "1000"
とエラーになる.解決策は,#define DELAY を用いない,あるいは このDELAY の文字列を変更すればよい.

#define DELAY2 1000

Comment: 

PICのポートに出力する場合、現在の状態を読んでから出力する命令の場合、出力はその命令の次の立ち上がりクロックで変化し、入力は、その命令の2番目で読み込まれるため、出力の入力の時間間隔が短く、出力の電圧が確定していないと誤動作になることがある。(参照