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


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第175回]



●PIC18F45K50(2)プログラム書き込み

PIC18F45K50はUSB機能内蔵の40pinICです。
PIC18F4550の改良型とでもいうべきPICです。
特筆すべきはとにかく安い。
PIC18F4550が1100円なのにPIC18F45K50はたったの300円。
ああ。しかし。
いま手元にあります秋月から15年前に購入したPICKIT2互換PICプログラマではPIC18F45K50は認識すらしてくれません。
しかし。
諦めるのはまだ早い。
一年半前のノートをよくよく読んでみましたら。
なんだかごちゃごちゃ試行錯誤の過程を書いておりますが。
うむむ。
苦闘の末にPIC18F13K50用のPIC WRITERプログラムで書き込みができたと書いているではありませんか!
もっともこの時点ではPIC WRITER基板はND80Z3.5の82C55コネクタに接続して書き込みテストをしています。
当然プログラムはZ80アセンブラ。
しかしそれについてはこのところ書いておりますようにPIC18F13K50でコントロールできるようにPICアセンブラで書き直しております。
おお。
それならPIC18F45K50にも書き込みできるはず。
ファイルをさがしてみましたらPIC18F45K50用のテストプログラムも作成しておりました。

MPLABでは対応していたようで、HEXファイルも作成済みでした。
下はテストプログラムのソースプログラムリストです。
昨年の6月に作成しておりますね。
;;;pic p18f45k50 test
;from picio-08a.asm
;23/6/25
;
        #include<p18f45k50.inc>
;cpuclock=48MHz HSPLL_CRYSTAL=12MHz
;wdt=about 32ms(4ms*8)
;
        CONFIG PLLSEL=PLL4X,CFGPLLEN=ON,CPUDIV=NOCLKDIV,FOSC=HSH,PCLKEN=ON,WDTEN=OFF
;       CONFIG PLLDIV=3,USBDIV=2,CPUDIV=OSC1_PLL2,FOSC=HSPLL_HS,VREGEN=ON,WDT=OFF
        CONFIG PBADEN=OFF,LVP=OFF
;
w=0
f=1
c=0
z=2
;
cntr0=0c
cntr2=0d
testcntr=3c
testcntr2=3d
;
        org 00
        goto start
;
;
;
        org 18
start

;       movlw 0f
;       movwf ADCON1
        clrf ANSELA
        clrf ANSELB
        clrf ANSELC
        clrf ANSELD
        clrf ANSELE
        clrf TRISB
        clrf TRISC
        clrf TRISD
testloop
        movf testcntr,w
        movwf PORTB
        movwf PORTC
        movwf PORTD
testloop2
        call t1ms
        decfsz testcntr2
        goto testloop2
        decf testcntr
        goto testloop   
;
;1msec timer
t1ms
        movlw 0a;=10    
        movwf cntr2
t1ms2
        call tm100micros
        decfsz cntr2
        goto t1ms2
        return
;
tm100micros
        movlw 0f0;=240
        movwf cntr0
tm100micros2
        nop
        nop
        decfsz cntr0
        goto tm100micros2
        return          
;
tm15micros
        movlw 24;=36
        movwf cntr0
        goto tm100micros2
;
        end
;

簡単なプログラムです。
ポートB、ポートC、ポートDに8ビットのデータを出力してそれを256msごとに+1しながら出力を繰り返します。
まずはこのプログラムがうまくPIC18F45K50に書き込みできるかどうかのテストです。
あれこれ考えているよりまずはやってみることです。
そう。案ずるより産むが易し、です。
ものは試しということでさっそくHEXファイルをロードして書き込んでみました。
下はそのログファイルです。
logfile piciolog\1206220530.txt open
*** pic i/o ***
picio-30 connected
>/erase
endcode=01
>/hload 45k50test.hex
45k50test.hex cannot open
>/hload 45k50test.hex
loading 45k50test.hex ...
i=365,binbfend=152
>/verify
inbfend=0
startcode=01
i=6,b=2,[04]0000[01]*i=14,b=4,[00]0000[0f]*verify error! 0,0c-ff
i=26,b=8,[00]0018[0f]*verify error!18,5b-ff
i=46,b=16,[00]0020[0f]*verify error!20,5f-ff
i=66,b=16,[00]0030[0f]*verify error!30,20-ff
i=86,b=16,[00]0040[0f]*verify error!40,0a-ff
i=106,b=16,[00]0050[0f]*verify error!50,f0-ff
i=118,b=8,[00]0060[0f]*verify error!60,24-ff
i=124,b=2,[04]0000[01]*i=132,b=4,[00]0000[01]*i=138,b=2,[00]0005[01]*i=148,b=6,[00]0008[01]*vfend
>/picwr
startcode=01
i=6,b=2,[04]0000*i=14,b=4,[00]0000*i=26,b=8,[00]0018*i=46,b=16,[00]0020*i=66,b=16,[00]0030*i=86,b=16,[00]0040*i=106,b=16,[00]
0050*i=118,b=8,[00]0060*i=124,b=2,[04]0000*i=132,b=4,[00]0000*i=138,b=2,[00]0005*i=148,b=6,[00]0008*vfend

>/verify
inbfend=0
startcode=01
i=6,b=2,[04]0000[01]*i=14,b=4,[00]0000[01]*i=26,b=8,[00]0018[01]*i=46,b=16,[00]0020[01]*i=66,b=16,[00]0030[01]*i=86,b=16,[00]
0040[01]*i=106,b=16,[00]0050[01]*i=118,b=8,[00]0060[01]*i=124,b=2,[04]0000[01]*i=132,b=4,[00]0000[01]*i=138,b=2,[00]0005[01]
*i=148,b=6,[00]0008[01]*vfend
>/exit

リモート接続を終了しました
logfile closed at Fri Dec 06 22:08:04 2024

最初に/ERASEコマンドで全消去しました。
普通ですと消去できたかどうかの確認は秋月のPICプログラマでするのですがPIC18F45K50を認識してくれませんからそれはできません。
こうなると消去確認のためのプログラムも作らなければいけませんねえ。
とりあえずは/VERIFYで確認をしてみました。
ベリファイエラーが出てHEXファイルでデータがあるところがFFになっています。
多分消去できたと思います。
そこまでできたのでいよいよ書き込みテストです。
/PICWRに続いて/VERIFYを実行しました。
おお。
今度はベリファイでもエラーは出ませんでした。
なんだかよさそうな感じです。

PICBASICコンパイラ[第175回]
2024.12.10 upload

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