2025.7.30
前へ

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


超ローコストPICWRITERの製作

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

[第316回]



●PIC16アセンブラ(3)

当テーマとしては一週間振りの更新です。
その間にWindows11についての記事を書きましたからそれを含めて最後に書いてからですと5日振りということになります。
この間はぎりぎりに迫った納期に責められてとてもホームページを更新する余裕がありませんでした。
昨日やっとぎりぎりで発送できてほっと一息ついたところです。
昔に比べるとパワー不足をしみじみ感じます。
有り難いことですが古くからのお得意様から今もご注文をいただきます。
以前よりも長い納期をいただきながら作業をこなしています。
とはいえせめて少しでも早くお納めしないと先方にも負担をかけてしまいますからつまるところ土日休日をつぶして仕事をすることになってしまいます。
お盆?
夏休み?
早々と仕事の予定で埋まってしまいました。
何年経っても「月月火水木金金」です。
上記を普通に「かな」で入力しましたらまともに変換できませんでした。
もう死語のようです。
昭和も遠くなりにけりです。
花金どころか花木なんて時代もあったんですものねえ。
そんな中でなんとかやりくりをつけて、と言いますか気分転換でプログラム作成とか回路設計をちょこちょこやったりしています。
もう病気でありますね。
真性ワーカーホリックであります。
当ホームページについてはまだしばらくぽつんぽつんと間をあけながらあれこれを書いていくことになると思います。
気長なお付き合いをお願いいたします。

このところ作成中のPIC16アセンブラなのですが肝心のところが未完成でした。
それはもちろん十分承知しておりましたのでここ数日時間をみつけてその作業に取組んでいました。
そもそもなんのためのPICアセンブラなのかといいますと。
PICWRITERに入力するためのファイルを作成するのが最終的な目的です。
ずっと以前から使っております秋月のPICプログラマPICKITUの入力ファイルはINTELヘキサ形式のHEXファイルです。
またMPLABが吐き出すファイルも同じ形式のHEXファイルです。
HEXファイルについては[第312回]で過去記事を検索しました。
三週間前の記事です。
Google検索で過去記事をみつけました。
Google様さまです。
詳しくは「PICBASICコンパイラ」[第193回]を参照願います。
[第312回]ではPIC12F1612用のテストプログラムのHEXファイルを裏技で作成しました。
下に再掲します。
:020000040000FA
:020000000528D1
:06000A00033088008C01A8
:10001000013088006830990058309A008C018801BE
:100020008C011C20FF308C001C201028FA30A0000E
:100030000000A00B18280800FA30A1001620162096
:06004000A10B1E280800C0
:02400E00FC317C
:00000001FF

これと同じファイルを作成することになります。
ということで。
下が今回作成したHEXファイルです。
:020000040000FA
:100000000528FF3FFF3FFF3FFF3F033088008C0100
:10001000013088006830990058309A008C01880100
:100020008C011C20FF308C001C201028FA30A00000
:100030000000A00B18280800FA30A1001620162000
:10004000A10B1E280800FF3FFF3FFF3FFF3FFF3F00
:02400E00FC3100
:02401000FF3E00
:024012009F3F00
:00000001FF

PIC16アセンブラプログラムの都合で一部が異なっています。
MPLABでアセンブルするとアドレス0000の行にGOTO命令があってそれ以後に空きがあるとそこが2行に分けられます。
具体的にはアドレス0000が0528の2バイトで終わりその次の行がアドレス000Aから始まっています。
この間は割込みテーブル等になるのでそれを意識してそのようになっているのではと思いますがそうしなければならないということではないはずです。
割り込みを使わないので0000からGOTOなしでベタにプログラムを書いてしまうこともありますが普通に実行できています。
ここは自作アセンブラでは全部続けて他の行と同じ16バイト/行にしています。
大抵の場合プログラムの終わりの行は16バイトに満たなくて半端な行になりますがそこもわざわざそうするのは面倒なので最後の行も16バイト/行にしています。
正規のHEXファイルでは各行の終わりには1バイトのチェックサム値が置かれますがPICWRITERでは利用しないのでそこは適当な値(通常は00)にしてあります。
テストのためConfigはConfig1〜Config3まで記述してあります。

今回のHEXファイルの作成プログラムの追加ではいろいろ考えたのですがすでに作成済みのLISTファイルの一部を利用することに落ち着きました。
LISTファイルは前回お見せしました。
その時点ではマシン語コードの16進数表記では英小文字のa〜fを使っていました。
HEXファイルでは英大文字のA〜Fを使います。
そこでそのところを変更しました。
*******
0000      ;25/07/4 25/7/22 for p16asm
0000      ;7/23
0000      ;clock=4MHz
0000      ;     #include <p12f629.inc>;*****************
0000      ;
0000      ;     __CONFIG _CP_OFF & _MCLRE_ON & _WDT_OFF & _INTRC_OSC_CLKOUT;********0000      ;
0000      ;
400E FC31       config1=31fc
4010 FF3E       config2=3eff
4012 9F3F       config3=3f9f
0000 00   cf=0
0000 02   zf=2
0000 01   f=1
0000 00   w=0
0000      ;
0000 08   bsr=08
0000 0C   porta=0c;bnk0
0000 0C   trisa=0c;bnk=1
0000 19   osccon=19;bnk=1
0000 1A   oscstat=1a;bnk=1
0000 0C   ansela=0c;bnk=3
0000 20   cntr0=20
0000 21   cntr1=21
0000      ;
0000            org 00
0000 0528       goto start
0002      ;
000A            org 05
000A      start
000A 0330       movlw 3
000C 8800       movwf bsr
000E 8C01       clrf ansela
0010 0130       movlw 1;bsf STATUS,5 ;bank 1
0012 8800       movwf bsr
0014 6830       movlw 68;PLL disenable,intosc=4MHz
0016 9900       movwf osccon
0018 5830       movlw 58;HFINTOSC
001A 9A00       movwf oscstat
001C 8C01       clrf trisa;clrf TRISIO
001E 8801       clrf bsr;bcf STATUS,5;bank 0
0020      ;
0020      loop
0020 8C01       clrf porta;clrf GPIO
0022 1C20       call t0_5s
0024 FF30       movlw 0ff
0026 8C00       movwf porta;movwf GPIO
0028 1C20       call t0_5s
002A 1028       goto loop
002C      ;
002C      t1ms
002C FA30       movlw 0fa;=250
002E A000       movwf cntr0
0030      t1ms2
0030 0000       nop
0032 A00B       decfsz cntr0,f
0034 1828       goto t1ms2
0036 0800       return
0038      ;
0038      t0_5s
0038 FA30       movlw 0fa;=250
003A A100       movwf cntr1
003C      t0_5s2
003C 1620       call t1ms
003E 1620       call t1ms
0040 A10B       decfsz cntr1,f
0042 1E28       goto t0_5s2
0044 0800       return
0046      ;
0046      ;     end ************************
0046      ;

これでPIC16アセンブラは基本的には完成したと思います。

超ローコストPICWRITERの製作[第316回]
2025.7.30 upload

前へ

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