PICBASICコンパイラ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第205回]
●PIC16F84
PIC16F627はBULK ERASEでこけてしまったのですがいつまでもそこにこだわっていると先へ進めません。
前回書きましたように後になって但し書き付きですがPIC16F627も消去できるようになりました。
それについては後で説明することになると思います。
とにかく先に進むことにして、次に書き込みに挑戦することにしたPICはPIC16F84です。
PIC16F84は最初にさわったPICだったと記憶しています。
端子配列はPIC16F627と同じです。
現在はPIC16F84の代わりにその改良型のPIC16F84Aが一般に流通していますがPIC16F84もまだ製造はしているようです。
手持ちを確認したところほとんどは16F84Aでしたが1個だけ16F84が残っていましたのでとりあえずはそれを使ってみることにしました。
PIC16F627はI/OとTIMERのほかにアナログコンパレータが使えましたがPIC16F84はI/Oのほかには8bitのTIMERが1つあるだけです。
実にシンプルなPICです。
[出典]Microchip Technology Inc. PIC16F84 Data Sheet
CPUクロックは10MHzまででオシレータは内蔵していません。
クリスタル発振回路のほかには外付けのRCによるRC発振回路が利用できます。
[出典]Microchip Technology Inc. PIC16F84 Data Sheet
PIC16F84用のテストプログラムです。
;;;pic p16f84 test ;from 16f627test ;25/1/28 ; #include <p16f84.inc> __CONFIG _WDT_OFF & _RC_OSC ; ;R=5.1K,C=100pF FOSC=about1MHz ; w=0 f=1 c=0 z=2 ; cntr0=20 testcntr=21 testcntr2=22 ; org 0 goto start ; org 5 start 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 3e;=62 movwf cntr0 t1ms2;16micros xorwf PORTB;1 decfsz cntr0;1 goto t1ms2;2 return ; end ; |
PIC16F627のテストプログラムをもとにしてPIC16F84用に変更しました。
後で気が付いたのですがうっかりしておりました。
ソースプログラムのコメント行が以前に書いたプログラムからそのままコピーしたためにRの値が違っていました。
R=5.1KΩとして計算していますが実際に回路基板に実装しているのは10KΩでした。
下はR、CとFoscの目安になる表です。
[出典]Microchip Technology Inc. PIC16F84 Data Sheet
チップによってかなりばらつきがあるようですし温度の影響もかなりあるようです。
ですからざっくりとした目安でしょう。
R=10KΩ、C=100pFのところを見るとFosc=756kHzとなっています。
PICの1命令クロックはFosc/4ですからこの場合の1命令クロックは189kHzです。
実行時間に直すと1/0.189≒5.3μsになります。
すると上のプログラムのt1ms2の1回の実行時間は5.3×4=21.2μsになります。
t1msはそれを62回実行していますから21.2×62≒1.3msになります。
1msのつもりだったのですが実際の実行時間はそれよりも3割ほど遅い1.3msということになります。
これは後で実際にロジアナで確認してみることにします。
次回に続きます。
PICBASICコンパイラ[第205回]
2025.1.28 upload
前へ
次へ
ホームページトップへ戻る