Include ファイルはよく見ておこう

不具合

[****.ASM]をアッセンブルしたときにできるアッセンブル・リスト[****.LST]の中に Symbole not previously defined.(xxxx)とエラー表示が出る。

原 因 1
ソースプログラムの始めにMPASMのINCLUDEファイル「p*****.inc」を使う場合、その中に書いてあるレジスタ名や特定ビット名に対し自分の書いたプログラム中の名前と異なるためにアッセンブルできない。

例1 PIC12C671のデータシートのレジスタファイルマップでは、バンク2の85hにTRIS レジスタがある。 このレジスタはプログラムの中ではTRISIOにしないとアッセンブルできない。 P12c671.inc ファイルにおいてTRISTRISIOとなっている。

例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 用 アッセンブラソースプログラムを PIC16F877 用に移植する場合デバイス名(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目次へ     トップページへ