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


超ローコストPICWRITERの製作

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

[第311回]



●PIC12F1612(4)テストプログラム

前回書きましたようにPIC12F629のテストプログラムでは全く駄目だということがわかりました。
ではどこをどのように直したらよいのかそこを考えてみました。
PIC12F1612のテストプログラムを書くのは難しいことではありません。
それは今まで他のPICでもやってきました。
問題はただ書いただけでは駄目だということです。
私の現在の環境ではPIC12F1612のソースプログラムはアセンブルできません。
現在開発中の自前のPICWRITERを使えばPIC12F1612にプログラムを書き込むことができるということは既に確認しています([第308回])。
そのときはPIC12F629のためのHEXファイルを読み込んでそれをPIC12F1612に書き込みました。
PIC12F1612のためのHEXファイルを作成するにはPIC12F1612のソースプログラムをアセンブルできるアセンブラが必要です。
勿論ここまで来たからにはそれは近日中に作ってしまうつもりです。
それは正攻法なのですが。
正攻法ではなくても「とりあえず」ということならここは奇策で行ってみたいと思います。
マシン語が理解できればこういう面白い策もあるのです。
元にするのはPIC12F629のテストプログラムです。
;;;PIC 12F629  testprogram test.asm
;16/1/3 25/04/14
;clock=4MHz
        #include <p12f629.inc>
;
;Program Configuration Register 1
        __CONFIG _CP_OFF & _MCLRE_ON & _WDT_OFF & _INTRC_OSC_CLKOUT
;
cf=0
zf=2
f=1
w=0
;
cntr0 equ 20
cntr1 equ 21
;
        org 00
        goto start
;
        org 05
start
        bsf STATUS,5 ;bank 1
        clrf TRISIO
        bcf STATUS,5;bank 0
;
loop
        clrf GPIO
        call t0_5s
        movlw 0ff
        movwf GPIO
        call t0_5s
        goto loop
;
t1ms
        movlw 0fa;=250
        movwf cntr0
t1ms2
        nop
        decfsz cntr0,f
        goto t1ms2
        return
;
t0_5s
        movlw 0fa;=250
        movwf cntr1
t0_5s2
        call t1ms
        call t1ms
        decfsz cntr1,f
        goto t0_5s2
        return
;
        end
;

このプログラムは[第260回]でお見せしました。
このプログラムではGPIOの全てのビットを出力にするためにTRISIOを0にしています(TRISIOをクリアしている)。
TRISIOはbank1にあるのでSTATUSレジスタのビット5を1にしてからTRISIOにアクセスしています。
その後はBANK0のGPIOにアクセスするためSTATUSレジスタのビット5を0にしています。
前回書きましたようにそこの部分が大きく変わります。
それとほかに2点新たに加えなければならないことがあります。
その一つ目はアナログ端子の処理です。
PIC12F1612のI/Oポートの端子には別の機能の入出力が多重に割り当てられています。
一番問題なのはアナログの機能です。
I/Oポート(デジタル)端子にアナログ機能が割り当てられているPICではデフォルトではアナログが有効になっています。
その端子を普通にデジタルのI/Oポートとして使うためにはアナログ機能をディスイネーブルにしなければなりません。
PIC12F1612の場合それはANSELAレジスタの該当するビットを0にすることです。
それからもうひとつは内蔵クロック発振モードの指定です。
PIC12F629は内蔵クロック発振モードを指定するとクロックは4MHzになります。
PIC12F1612ではさらに発振する周波数を選択する必要があります。
デフォルトの周波数でもいいのですがせっかくなのでここはPIC12F629と同じ4MHzを指定してみます。
ここのところはちょっと面倒です。
以上を考慮してPIC12F1612のためのテストプログラムをウラ技的に書くとこうなります。
;;;PIC 12F1612  testprogram from pic12f629test.asm
;25/07/4
;clock=4MHz
        #include <p12f629.inc>;*****************
;
        __CONFIG _CP_OFF & _MCLRE_ON & _WDT_OFF & _INTRC_OSC_CLKOUT;***************
;
cf=0
zf=2
f=1
w=0
;
bsr=08
porta=0c;bnk0
trisa=0c;bnk=1
osccon=19;bnk=1
oscstat=1a;bnk=1
ansela=0c;bnk=3
cntr0 equ 20
cntr1 equ 21
;
        org 00
        goto start
;
        org 05
start
        movlw 3
        movwf bsr
        clrf ansela
        movlw 1;bsf STATUS,5 ;bank 1
        movwf bsr
        movlw 68;PLL disenable,intosc=4MHz
        movwf osccon
        movlw 58;HFINTOSC
        movwf oscstat
        clrf trisa;clrf TRISIO
        clrf bsr;bcf STATUS,5;bank 0
;
loop
        clrf porta;clrf GPIO
        call t0_5s
        movlw 0ff
        movwf porta;movwf GPIO
        call t0_5s
        goto loop
;
t1ms
        movlw 0fa;=250
        movwf cntr0
t1ms2
        nop
        decfsz cntr0,f
        goto t1ms2
        return
;
t0_5s
        movlw 0fa;=250
        movwf cntr1
t0_5s2
        call t1ms
        call t1ms
        decfsz cntr1,f
        goto t0_5s2
        return
;
        end
;

ANSELAはBANK3にあります。
最初にその部分を書き加えました。
次にクロックモードの指定をしています。
関係するレジスタはOSCCONとOSCSTATです。
いずれもBANK1にあります。
ここの部分の詳細は説明がしつこくなりますから省略します。
そしてTRISAもBANK1にあります。
最後にBANK0を選択します。
BANKの切り換えはBSRで行ないます。

ここからがウラ技です。
MPLABではPIC12F1612のプログラムはアセンブルできません。
そこをウラ技でムリムリにアセンブルさせてしまいます。
このソースプログラムにはそのためのシカケがいくつかあります。
最初の仕掛けは
#include<p12f629.inc>
です。
MPLABはPIC12F1612のプログラムはアセンブルできませんがPIC12F629のプログラムならアセンブルできます。
ですからp12f629.incをインクルードして、このプログラムはPIC12F629のプログラムだとMPLABに告げています。
そんなことをしてもいいの?
実はこれはその下にあるCONFIGのための宣言です。
こうしないとHEXファイルにCONFIGのための記述が行なわれません。
もっともこのCONFIG文はPIC12F629のためのものなのでPIC12F1612には意味がないのですけれどそれでもヒナ型は必要です。
それからbsr=08以下PIC12F1612のSFRのアドレスを記述しています。
これもウラ技です。
これで本当にPIC12F1612のHEXファイルが作れるのか?
ということなのですが。

あいかわらず多忙で時間がありません。
説明の途中ですが今回はここまでです。
この続きは次回にいたします。

超ローコストPICWRITERの製作[第311回]
2025.7.7 upload

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