2025.8.11
前へ
次へ
ホームページトップへ戻る


超ローコストPICWRITERの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
「PICBASICコンパイラ」からスピンオフ!!
過去記事を参照することなどを考えて該当する過去記事は「PICBASICコンパイラ」のまま連載回もそのままとします。
以後は前回記事からの流れで[第236回]からとします。
「PICBASICコンパイラ」はなるべく早く連載を再開したいと考えています。
PICはローコスト、高機能で種類も豊富なお手軽マイコンですがプログラムを書き込むためのWRITERが必要です。
それをできるだけ安価に作ってしまおうというプロジェクトです。
最終的には製品化を考えています(組立キット、完成品)。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第318回]



●PIC16アセンブラ(5)エラーコード

10日振りの更新になってしまいました。
記録的な猛暑が続いていますが私の毎日もなかなかにホットです。
先週末に遅れに遅れていた納品作業をぎりぎりで片付けて連休直前にやっとのことで発送してほっと一息ついたところです。
もっともそれで全部済んだわけではありません。
まだ納品しなければならない注文が残っています。
毎年のことなのですが今年も結局お盆休みを全部つぶして仕事をする毎日になってしまいます。
それ以外にもやらなければならないこと、やりたいことはいっぱいあって猛暑以上にホットな毎日を過ごしています。
結果としてホームページの更新ができない毎日になってしまいました。
まだしばらくはこの状況が続きそうです。
そんな状況なのですがやっと納品がひとつ済んで少しですが時間ができましたのでこの機会に片付けてしまいたいと思っていた作業に取り掛かりました。
それが今回のテーマです。
PIC16アセンブラについては前回までのところで一応は完成しました。
ここで「一応」と書いたのにはわけがあります。
アセンブラの処理部分はできたのですが「例外処理」、はっきり言えば「エラー処理」については未整理の状態でした。
プログラムにエラーはつきものです。
まともに書いたソースプログラムについては正しくアセンブルされるけれども間違った記述についてはどうなのか、そこのところの対策は重要事項です。

アドレスXXXXで不正なアクセスがありました。
詳しくは管理者にお尋ねください。
いやあ腹が立ちますよねえ。
不正なアクセスって何やねん。
どこをどうしたらそうなるのかを言ってよ。
そういう気持ちになります。

C++コンパイラなんかもひどいものです。
謎のメッセージを連発してくれます。
おいおい。そこじゃないだろうよって迷宮の探索にでかけなくてはなりません。
そんなことにならないようにエラー処理はしっかりやりたいものです。
そんな作業をここ3日ほどやっておりました。

まずは簡単にPIC16アセンブラプログラムの文法から。

使う文字は半角英数記号のみで、かな、カナ、全角文字は使えません。
基本的にはMicrochipのPIC16アセンブラに準じますがそれよりもルールは少し厳格です。
ざっと列記しますが具体的には記事中にあるサンプルプログラムを参考にしてください。
変数名に英大文字は使えません。
コメント記号「;」の後ろには半角大文字や記号も使えます。
変数名は先頭の1文字はa〜zのみで数字、−は不可です。
2文字目からはa〜z、0〜9と−が使えます。
最大13桁です。
8ビットアセンブラですから使える数値は00〜FFの範囲の16進数が基本です。
ORGでのアドレス指定に限って最大4桁の16進数が使えます。
あっと、それとCONFIGについても16進数で指定します。
ORGとCONFIGの場合には第1桁がa〜fでも0をつける必要はありません。
10進数はD’12’のように指定します。
最大255までの数に限られます。
変数の定義は事実上アドレスの指定になります。
たとえばportaとかtrisbなども大文字ではなくて小文字でアドレスを指定します。
PICごとにアドレスが異なるのでMPLABのように大文字で定義なしに使うという使い方はできません。
EQUは使えません。
porta=20
のように=で指定します。
この場合「20」はアドレスを示す16進数です。
変数定義文およびラベルは第1桁から記載します。
命令文は第2桁以降に記載します。
命令と定数や変数の間に必要な空白は1文字のみです。
2文字以上の空白でも正常に完了する場合もありますが原則として1文字と考えてください。
プログラムの終わりにEND行は不要です。

次はエラーコード(エラーメッセージ)です。
エラーによってはコメントした以外の原因による場合もあります。
erc=xx
のように表示されます。
エラーはいまのところerc=1〜erc=11の11通りです。

erc=1
変数名、ラベル名が長すぎる。最大13桁。
erc=2
変数名、ラベル名の第1桁がa〜zでない。
erc=3
変数名、ラベル名が未定義で使われた。
erc=4
ラベルの後ろに「;」以外の文字がある。
erc=5
bcf、bsfなどのビット命令で「,」がないかパラメータの記述が間違っている。
erc=6
8ビットの16進定数の第1桁がa〜fの場合には先頭に0(数値のゼロ)が必要。
erc=7
ORG、CONFIGの定数が16進数ではない。
erc=8
変数名やラベル名が多すぎる。
erc=9
10進定数の記述が間違っている。
D’12’のように記述する。
erc=10
変数名、ラベル名が二重に定義された。
erc=11
存在しない命令。

考えた通りにエラーコードが表示されるかどうかを確認するためにわざと間違った文を入れたテストプログラムを作ってテストしてみました。
前回までテストに使ったテストプログラムの一部を書き換えて作りました。
エラーの表示にはエラーコードとともにエラーが発生した行も表示します。
行の表示にはどこの行かを分かりやすくするために先頭から行番号をつけてその行番号を表示します。
BASICと違ってアセンブラソースプログラムの作成では行番号はつけません。
ですから普通にメモ帳などで表示しても行番号はありません。
Terapadでは行番号付きで表示することができます。
ここでは参考までにTerapadでの表示を画像で示します。







下が実行した結果です。
最終的な実行プログラム名はp16asmにするつもりですがまだテスト中ですから後ろにバージョンコードをつけています。



実行を開始するとinfilename=と表示されますからソースファイル名を入力します。
ソースファイルの拡張子はasmですがここで入力するときには拡張子はつけません。

エラーがいっぱい表示されました。



はじめのほうはスクロールしてしまって見えません。
こういうときのためにログファイルが作成されます。
作成されたログファイルです。
infile p16asmerrt2.asm opened at Mon Aug 11 18:18:46 2025

start pic16assembler
907,erc=11
line#=3 #include <p12f629.inc>;*****************
907,erc=11
line#=5 __CONFIG _CP_OFF & _MCLRE_ON & _WDT_OFF & _INTRC_OSC_CLKOUT;***************
907,erc=11
line#=11 config3 1234
172,erc=1
line#=18 b1234567890123=0c;bnk0
172,erc=2
line#=19 -abc=123
178,erc=10
line#=27 cntr0=22
907,erc=11
line#=33 org=05
204,erc=4
line#=35 start+1
204,erc=4
line#=36 start2 ,,,
907,erc=7
line#=38 org abc8
907,erc=5
line#=39 bcf porta
907,erc=6
line#=40 bcf porta,
907,erc=3
line#=42 movwf bsr
907,erc=6
line#=45 movlw ab
907,erc=3
line#=46 movwf bsr
907,erc=11
line#=47 movflw D'15'
907,erc=6
line#=49 movlw d'15'
907,erc=9
line#=50 movlw D'123
907,erc=9
line#=51 movlw D'12345'
907,erc=3
line#=57 clrf bsr;bcf STATUS,5;bank 0
907,erc=11
line#=59 loop
907,erc=11
line#=147 end;************************
928,erc=3
line#=65 goto loop
error=23

説明の追加です。
addwf cntr1,w
addwf cntr1,f
などのように使う場合wやfを定義する必要はありません。
コマンドの一部としてそのまま使えます。
line#=65でgoto loopがエラーになっています。
よく見るとline#=59のloopがエラーになっています。
ラベルや変数定義は第1桁から書かなければエラーになります。

超ローコストPICWRITERの製作[第318回]
2025.8.11 upload

前へ
次へ
ホームページトップへ戻る