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


超ローコストPICWRITERの製作

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

[第284回]



●PIC16F54(2)テストプログラム

いつものように簡単なテストプログラムを作りました。
以前PIC16F716用に作ったものをもとに作成しました([第270回])。
;;;pic16f54test from pic16f716test
;25/5/12
;
        #include <p16f5x.inc>
        __CONFIG _WDT_OFF & _RC_OSC
;
;
w=0
f=1
c=0
z=2
;
cntr0=10
cntr1=11
cntr2=12
;
        org 0
;
        movlw 0
        tris PORTA
        tris PORTB
;
testloop
        movf cntr2,w
        movwf PORTA
testloop2
        call t1
        movf cntr1,w
        movwf PORTB
        decfsz cntr1
        goto testloop2
        decf cntr2
        goto testloop   
;
t1
        nop;1
        decfsz cntr0;1
        goto t1;2
        return
;
        end
;

PIC16F716と同じで内蔵クロック発振モードはありませんがその代わりにクロック端子に抵抗とコンデンサを接続することでRC発振をCPUクロックにすることができます。


[出典]Microchip Technology Inc.PIC16F5x DataSheet

PIC16F716のところでも書きましたが([第270回])RC発振の場合抵抗とコンデンサの組み合わせによる発振周波数についての具体的な数値は記載されていません。
発振周波数は供給電圧、抵抗値とコンデンサの容量、それと温度によって決まるとだけ書かれています。


[出典]Microchip Technology Inc.PIC16F5x DataSheet

これもPIC16F716のときと同じでPIC16F84を使ったLCD表示回路基板をテストに利用しました。
下はLCDIFの回路図です。


RC発振をクロックとして使う場合にはCONFIGで_RC_OSCを指定します。
さて。
前回の終わりに書きましたが普通PICではI/Oポートの入出力の向きを指定するにはTRISレジスタを使います。
TRISレジスタは大抵はPORTレジスタのバンク違いの同じアドレスにあります。
ところが前回書きましたようにPIC16F54にはレジスタバンクが1つしかなくて見たところTRISレジスタはありません。
じゃあどうやって入出力の設定をするのだろうと思ってDataSheetを読んで見ましたら、なんとtrisなんて見た事もない命令を使うのだそうです。
普通はTRISレジスタのあるバンクに切り換えて
movlw xx
movwf TRISA
とするところをPIC16F54では
movlw xx
tris PORTA
のように書きます。
一体それがどのようにマシンコードに置き換わるのかと思ってアセンブルリストを確認してみました。
0000                  00017         org 0
                      00018 ;
0000   0C00           00019         movlw 0
0001   0005           00020         tris PORTA
0002   0006           00021         tris PORTB
                      00022 ;
0003                  00023 testloop
0003   0212           00024         movf cntr2,w
0004   0025           00025         movwf PORTA
0005                  00026 testloop2
0005   090C           00027         call t1
0006   0211           00028         movf cntr1,w
0007   0026           00029         movwf PORTB

あれ?
PORTA、PORTBはそれぞれアドレス05、06のはずなのですがmovf PORTA、movf PORTBでは25、26になっていますね。
そしてtris命令を使うところではアドレス05、06になっています。
やっぱり別バンクがあるようです。
さすがはMicrochip様。
勝手放第といいますか融通無碍と申しましょうか。
バンク切り換えをするためにはPIC16F627などではSTATUSレジスタの一部のビットを使ってバンクを指定します。
するとそのための仕組みが必要になります。
そこを上のようにすればアセンブラをちょいとひねるだけでソフト的にやってしまうことができます。
なるほど。
納得いたしました。

余計なことを書いていましたら時間がなくなってしまいました。
続きは次回にいたします。

超ローコストPICWRITERの製作[第284回]
2025.5.17 upload

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