超ローコストPICWRITERの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
「PICBASICコンパイラ」からスピンオフ!!
過去記事を参照することなどを考えて該当する過去記事は「PICBASICコンパイラ」のまま連載回もそのままとします。
以後は前回記事からの流れで[第236回]からとします。
「PICBASICコンパイラ」はなるべく早く連載を再開したいと考えています。
PICはローコスト、高機能で種類も豊富なお手軽マイコンですがプログラムを書き込むためのWRITERが必要です。
それをできるだけ安価に作ってしまおうというプロジェクトです。
最終的には製品化を考えています(組立キット、完成品)。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第325回]
●PIC18アセンブラ(4)SFR
SFRはPIC固有の特殊レジスタでSpecial Fubction Registerの略称です。
MPLABでのPICアセンブラソースプログラムでは大文字で表記します。
しかし製作中のPIC18アセンブラではSFRも通常の変数と同じように小文字で表記することとしてきました。
PIC16アセンブラでそのように決めたことを踏襲しためです。
SFRはPICの特定のRAMエリアに割り付けられていますがPICごとに名前やアドレスが異なっていたりしてアセンブラプログラムで一様に決められないことがそのように決めた主な理由でした。
MPLABのPICアセンブラではSFR名とそのアドレスを引用するためにPICごとに異なるINCファイルを参照します。
そのINCファイルはp18f2450.incというようなファイル名でMPASM Suiteフォルダに収録されています。
そもそもMPLABを使わない(使えない)というのが前提でPIC16アセンブラ、PIC18アセンブラの製作を思い立ったという経緯を考えるとMPASM SuiteのINCファイルを引用するというのはスジが違う気がします(それを引用するためのプログラムを作るのも手間だという手抜きでもありました)。
PICのプログラムを作る場合にはどうせData Sheetで必要なSFRについて確認することになりますからその時点で必要なSFRのアドレスをプログラムに記載すればよいのではないかと考えました。
そのあたりのことを実際に例示するためにまた前回のリストを再掲します。
下は今回のSFRについての変更前のリストです。
アドレス02B8のlatc、02BEのpostinc0、02CEのindf0がSFRです。
これらを定義するためにプログラムの先頭で通常の変数に続けて下のように列記しました。
53行のtosu以下がSFRの定義です。
随分たくさんの定義文ですがこのプログラムではこれだけのレジスタを実際に使っています。
PIC16アセンブラを作ったときには簡単なテストプログラムだけで試したのでこういう方式でよいと思ったのですがこのプログラムは以前に必要があって作ったそれなりに長いプログラムです。
思ったよりもたくさんのSFRを使っていてそのための定義文も結構たくさんの行にわたっています。
これをプログラム作成の度に書くというのもしんどい話です。
さすがにこれは無いなと思ったので覚悟を決めて工夫を試みることにしました。
それでそのようにした結果が前回の終わりにお見せしたリストです。
LATC、POSTINC0、INDF0が大文字になっています。
下はそのように変更を行なったソースプログラムの先頭部分です。
SFRの定義文はありません。
代わりにプログラムの先頭に定義ファイルを引用するための文として#include<p18f2450.inc>の行を置いています。
incファイルをインクルードしているようですがこれはMPLAB用に書いたアセンブラプログラムをそのまま読み込めるようにするためにこのようにしたもので実際に参照するのはincファイルではありません。
独自に作成したp18f2450.txtファイルでこれはあらかじめPICごとに作成してPIC18アセンブラと同じフォルダに置くことを考えています。
下はP18F2450.TXTファイル(一部)です。
ちなみに下はPIC18F2450のData Sheetに記載されているSFRについての説明文です。
[出典]Microchip Technology Inc. PIC18F2450 Data Sheet
ということでかなり大幅な変更作業も行ないましたのでここまでの作業で作成したPIC18アセンブラを検証してみました。
PIC18アセンブラで出力したHEXファイルとMPLABで出力したHEXファイルをWinMergeで比較しました。
先頭のアドレス0000〜000Fの行のみMPLABでは2行に分けて出力されます。
ここを補正しないと左右を正しく比較できません。
左側のPIC18アセンブラの出力の0000〜の行を改行してそれ以下の行の左右を合わせました。
PIC18アセンブラでは各行の最後のCS(チェックサム)は計算しませんからそこだけが相違しています。
左右が一致しているところはオレンジで着色されます。
上の画像は比較の一部でこのあともう少し続きがありますが(そこは省略しました)最後まで一致していることを確認しました。
超ローコストPICWRITERの製作[第325回]
2025.8.23 upload
前へ
ホームページトップへ戻る