ここは、Microchip社が提供する小型CPUであるPICを用いたシステムの開発についてのメモを記す。
前山
Thu, 2024/10/31 - 9:33pm
Permalink
割り込みを利用し,また,割り込みルーチンで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
Tue, 2021/08/31 - 6:20pm
PICのポートに出力する場合、現在の状態を読んでから出力する命令の場合、出力はその命令の次の立ち上がりクロックで変化し、入力は、その命令の2番目で読み込まれるため、出力の入力の時間間隔が短く、出力の電圧が確定していないと誤動作になることがある。(参照)
Comments
前山
Thu, 2024/10/31 - 9:33pm
Permalink
CCS-C #use delay() の使い方
割り込みを利用し,また,割り込みルーチンで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
前山
Tue, 2021/08/31 - 6:20pm
Permalink
初歩的なメモ:ポート出力の注意
PICのポートに出力する場合、現在の状態を読んでから出力する命令の場合、出力はその命令の次の立ち上がりクロックで変化し、入力は、その命令の2番目で読み込まれるため、出力の入力の時間間隔が短く、出力の電圧が確定していないと誤動作になることがある。(参照)