ソフト例 一般に公開されているカウンター主要プログラム例は決まったように左のようになっています。 ループカウンターを必要なゲート時間分ループさせて、その間に内部カウンターのオーバーフロー数をBYTE1,BYTE2レジスタに 加算していきます。 設定カウントに達したらループから抜けて、次の処理に移ります。一般にはプリスケーラー分だけ何倍かにす るフローが続きます。 問題箇所 左のプログラムでは、ループから抜ける直前のループで、BTFSS時点ではオーバーフローしていないが(例えば内部カウンター FEH)ループから抜ける直前にはFFHから00Hとなる場合、内部カウンターからのCARYはBYTE1,2レジスタには加算されず、 データーは一瞬不連続な値になり、表示もちらついてしまいます。 プリスケーラーで1/4にしていますので内部カウンターがFFとなるのは、約10KHzごと。7.023.4MHz、7.033.4MHz付近でオーバー フローのカウントがミスカウントします。 対策 ループから抜けてゲートを閉じた後、もう一度内部カウンターのCARYをチェックする処理を追加したところ、表示ちらつきも 無くなりやっと解決できました。 追加処理は、左のプログラムと同様の処理です。 BTFSSでチェックしオーバーフローがあれば、BYTE1,2に加算する、オーバーフローが無ければRETURNというプログラムを追加 しました。 |