PICBASICコンパイラ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第234回]
●PIC16F628A(2)テストプログラムのソースリスト
前回の続きです。
時間が無いなかで書くとついはしょって書いてしまいます。
何回も書いておりますように当プログ風記事は私の備忘録を兼ねております。
ずっと後になってから「はて、あれはどういうことだったっけ?」なんてときに過去記事を検索したりすることがあります。
ところがはしょって書いていたりすると後になってから読んだときに「ううう。肝心のことが書いてない!」なんてことになってしまいます。
そうならないように、まずは少し整理をしておくことにします。
現在進行中のPIC16F628AのWRITEプログラムについては、以前に行なったPIC16F627についてのテストを受けて、そのWRITERプログラムがPIC16F628Aでもそのまま使えるのかというあたりのところからテストを開始しました。
PIC WRITERが正しく機能するかどうかを確認することが目的ですからそこで書き込みに使うHEXプログラムの中身はどうでもよいようなものですが。
HEXファイルだけではどういうテストプログラムなのかよくわかりません。
ま。
どうでもよいことなのですが。
やっぱりこんなプログラムです、と書いておいたほうが後々の参考になりますでしょう。
そこで確認をしてみましたらPIC16F627のテストプログラム(サンプルプログラム)は[第201回]にありました。
16F627TEST.ASMです。
参考までに下に再掲します。
;;;pic p16f627 test ;25/1/7 1/8 ; #include <p16f627.inc> __CONFIG _WDT_OFF & _INTRC_OSC_CLKOUT ; ;int CLOCK 4MHz ; w=0 f=1 c=0 z=2 ; cntr0=20 testcntr=21 testcntr2=22 ; org 0 goto start ; org 5 start movlw 7;a0-a3 is digital movwf CMCON bsf STATUS,5 ;bank 1 clrf TRISA clrf TRISB bcf STATUS,5 ;bank0 ; testloop movf testcntr,w movwf PORTA testloop2 call t1ms decfsz testcntr2 goto testloop2 decf testcntr goto testloop ; ;1msec timer t1ms movlw 0fa;=250 movwf cntr0 t1ms2;4micros xorwf PORTB;1 decfsz cntr0;1 goto t1ms2;2 return ; end ; |
このテストプログラムはHEXファイルをPIC WRITERプログラムにLOADしてPIC16F627に書き込み読み出しテストを行なうのに使いました。
試行錯誤の末に最終的に[第232回]でテストを終えました。
最終テストでは上記のプログラムにコピープロテクトを追加したプログラム16F627TEST2.ASMを使いました。
16F627TEST2.ASMのソースリストは[第221回]にあります。
プログラムの先頭のCONFIGのところに_CP_ALLを追加しただけです(下記)。
;;;pic p16f627 test2(cp) ;25/1/7 1/8 1/27 ; #include <p16f627.inc> __CONFIG _CP_ALL & _WDT_OFF & _INTRC_OSC_CLKOUT ; ;int CLOCK 4MHz ; (以下略) |
ところで。
よくよく考えてみましたらPIC WRITERで書き込み読み出しのテストはしたのですけれど、PIC16F627に書き込んだプログラムが実際に動くかどうかのテストはしていませんでした。
PIC16F84の動作テストは[第207回]でやっています。
ということで、同じテストをPIC16F627でもやってみました。
写真では静止していますが実際にはLEDがプログラムした通りに点滅を繰り返しています。
ここまでOKです。
次は懸案になっておりますPIC16F628Aです。
PIC16F628Aのテストプログラムは16F628ATEST.ASMです。
コピープロテクト版は16F628ATEST2.ASMです。
16F627と同じでCONFIG行にCPを追加しただけですから、ソースリストはコピープロテクト版の16F628ATEST2.ASMを下に示します。
;;;pic p16f628A test from 16f627test ;25/3/10 3/13 ; #include <p16f628A.inc> __CONFIG _CP_ON & _WDT_OFF & _INTOSC_OSC_CLKOUT ; ;int CLOCK 4MHz ; w=0 f=1 c=0 z=2 ; cntr0=20 testcntr=21 testcntr2=22 ; org 0 goto start ; org 5 start movlw 7;a0-a3 is digital movwf CMCON bsf STATUS,5 ;bank 1 clrf TRISA clrf TRISB bcf STATUS,5 ;bank0 ; testloop movf testcntr,w movwf PORTA testloop2 call t1ms decfsz testcntr2 goto testloop2 decf testcntr goto testloop ; ;1msec timer t1ms movlw 0fa;=250 movwf cntr0 t1ms2;4micros xorwf PORTB;1 decfsz cntr0;1 goto t1ms2;2 return ; end ; |
基本的にPIC16F627と16F628Aは同じプログラムで動作します。
CONFIGも大体は同じなのですがMICROCHIP社は実に困ったところがあって全然同じというわけにはいかないのですよねえ。
全く困ったものです。
CONFIGのコピープロテクトの指定が異なります。
下は16F627TEST2.ASMと16F628ATEST2.ASMの比較です。
PIC16F627は_CP_ALLなのですがPIC16F628Aはここを_CP_ONにしないとアセンブルエラーになってしまいます。
こんなところをいじくったりしますかねえ。
こういうところがPICの困ったところなのです。
そんなことを書いていましたら本日もタイムオーバーになってしまいました。
次回に続きます。
PICBASICコンパイラ[第234回]
2025.3.14 upload
前へ
次へ
ホームページトップへ戻る