Include ファイルはよく見ておこう |
不具合 [****.ASM]をアッセンブルしたときにできるアッセンブル・リスト[****.LST]の中に Symbole not previously defined.(xxxx)とエラー表示が出る。 原 因 1 ソースプログラムの始めにMPASMのINCLUDEファイル「p*****.inc」を使う場合、その中に書いてあるレジスタ名や特定ビット名に対し自分の書いたプログラム中の名前と異なるためにアッセンブルできない。 例1 PIC12C671のデータシートのレジスタファイルマップでは、バンク2の85hにTRIS レジスタがある。 このレジスタはプログラムの中ではTRISIOにしないとアッセンブルできない。 P12c671.inc ファイルにおいてTRISはTRISIOとなっている。 例2 PIC16F877のコンフギレーションビット用のワードの中でインサーキットモードのデバッグをするは[_DEBUG_ON]であるがデバッグしないは[_DEBUG_OFF]ではなく[_DEGUB_OFF]としなければならない。 P16f877.inc ファイルはそのように記述されていました。(MPASM V.4 の場合)MPASM V.5では修正されて[_DEBUG_OFF]になりました。 注意と対策 プログラムを作る際は必ずMPASMの中のINCファイルの中のコードをよく調べておく必要があります。 MPLAB V.5.70.40 の INCファイルはMPLAB → INC フォルダーの中にあります。 原 因 2 (2003.5.24追記) PIC16F877 用 アッセンブラソースプログラムを PIC16F877A 用に移植する場合デバイス名(P=16F877A)とインクルードファイル(”p16f877a.inc”)を書替えただけではアッセンブルは成功しません。 (MPLAB V.5.70.40) 注意と対策 これはインクルードファイルの中身が変わっているからです。 例えばコンフィグレーションの部分は次の様になっています。 p16f877.inc p16f877A.inc __CP_ALL __CP_ALL __CP_HALF __CP_OFF __CP_UPPER_256 −−−−−−−− __CP_OFF −−−−−−−− __WRT_ENABLE_ON __WRT_OFF __WRT_ENABLE_OFF __WRT_256 __WRT_1FOURTH __WRT_HALF (注:見やすくするため全て倍角文字を使っています。) incファイルにしたがってプログラムを修正すればOKです。 原 因 3 (2003.6.5追記) xxxxx.asm が存在するフォルダーに xxxxx.inc ファイルが無いと「Symbol not previously defined」 とエラーが出ます。 注意と対策 MPASMで作業を行なう際、使用するデバイスの .inc ファイルを xxxxx.asm の中に書いたなら、前もってそのデバイスの pxxxxx.inc ファイルを xxxxx.asm があるフォルダーにコピーしておきます。 MPLAB V.6.20.00の場合、通常よく使用する PIC12C509,PIC16F84A などの .inc ファイルは INCフォルダーの中に入っていません。 MPLAB → MCHIP_Tools フォルダーの中にあります。 |
PIC目次へ トップページへ |