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


超ローコストPICWRITERの製作

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

[第260回]



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

いまさらですが、当記事はPIC WRITERの開発について書くのが主テーマです。
その主旨からすれば色々なPICをさわってその書き込みができればとりあえずの目的が達成されたことになります。
もうとにかく早く先に進めたいというのが本音であります。
しかし。
もうひとつ別の本音を言えば。
せっかく新規にさわることになったPICならばせめてとりあえずサンプルプログラムぐらいは書くべきではないか。
ただ書くだけではなくて、ちゃんと動作するプログラムを、です。
しかしながらそれはなかなかに面倒なことなのです。
なんたってPICはクセが強いのです。

余談でありますが。
なんですか。
インターネット上に散見されるPIC関連の記事を見ますと皆様大抵はPICのプログラムを書くのにCコンパイラをお使いのようで。
おいおい。
PICのプログラムをCで書くのかよ。
LEDチカチカなんてプログラムをCで書いたりして。
それで本当にその先に進むことができるの?
いささか首をかしげてしまいます。
PICはアセンブラでしょうよ。
いまどきはそう思うことがすでに化石人間の証なのかも。
今や絶滅危惧種でありましょう。
しかししかし。
あくまでわが道を行く。
ゴーイングマイウエイであります。

コンパイラなんてやったってちっとも面白くはありませんでしょう。
アセンブラはつまりはマシン語です。
直接CPUをダイレクトに動かせるのですよ。
それは8080でもそう、Z80もそう、ちょっと大変ですけれど8086だってそうです。
アセンブラならそういうプログラムが書けるのですけれど。
それはなかなかに習得が困難です。
その点PICは比較的アセンブラの習得が容易だと私は考えています。
アセンブラはニーモニックから1対1でマシン語コードに変換されます。
PICのアセンブラはちょいとクセツヨなのが困ったところではありますけれど。
なんたってたった35個の命令しかないのですから!
それも無理に全部覚える必要はありません。
わかるものから少しずつ使っていけばよいのです。

[出典]Microchip Technology Inc. PIC12F629/675 Data Sheet

これが全命令の一覧です。

[出典]Microchip Technology Inc. PIC12F629/675 Data Sheet

たったこれだけです。
紙切れ1枚に収まってしまいます。
しかもこの命令の殆どが1命令クロック(1サイクル)で実行されます。
めっちゃ分かりやすいです。
1命令クロックは4CPUクロックです。
たとえばCPUクロックが4MHzの場合1命令クロックは1MHzつまり1μsで実行されます。
上の表でCyclesとあるのが命令クロックです。
CALL、RETURN、RETFIE、RETLW、GOTOのみが2サイクルです。
条件分岐命令(DECFSZ、INCFSZ、BTFSC、BTFSS)は条件により1または2サイクルです。
ね。
分かりやすいでしょう。
PICによってはこのほかに追加された命令を持つものもありますがそれは上級者になってからでよろしいでしょう。
あの。
上の表を見ておわかりでしょうか。
右の方14−Bit Opecodeというのがマシン語コードです。
嬉しいじゃありませんか。
ここまで書いてあります。
知的好奇心がしっかり満足させられます。
さらにさらに。
有り難いことにPICのData Sheetには命令の詳細まで説明されているのです!
下はその一部です。

[出典]Microchip Technology Inc. PIC12F629/675 Data Sheet

ということで。
当連載記事では各PICごとに実際のテストプログラムを簡単なサンプルプログラムとしてそのリストを掲載するとともに実際にターゲットのPICに書いて実行して動作することを確認していきます。
もしもこれからPICをさわってみようとお考えでしたら、サンプルプログラムリストを参考にしてPICアセンブラプログラムの学習に役立ててください。
えっと。
私はアセンブラソースプログラムをアセンブルしてHEXファイルを作成するのに今はMPLAB IDEを使っておりますが。
それも主としてWindows98SE上で動くMPLAB IDE V8.40を使っています。
それで対応できないPICについてはWindows7上で動くMPLAB IDE V8.92を使っています。
MPLAB X IDEもダウンロードしましたがあんなクソなものは使えません。
そのうち自前のPICアセンブラを作ってしまうつもりでおります。
乞うご期待、であります。

前振りが長くなってしまいました。
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
;

プログラムの主たる部分はloopから後ろです。
そこからgoto loopまでがメインプログラムです。
0.5秒ごとにGPIO出力を00とFFに切り換えています。
出力端子にLEDを接続しましたからプログラムを実行するとLEDが0.5秒ごとに点滅します。
t1msは1msのタイマーサブルーチンです。
nop、decfszが1サイクル、gotoは2サイクルですから1回のループで4μsかかります。
それを250回繰り返しますから1msになります。
t0_5sは1ms×2回のcallを250回繰り返しますから0.5秒のタイマールーチンになります。
ね。
アセンブラって分かりやすいと思いませんか?
なんだかこれなら書けそうだと思えてきませんか?

PIC12F629に書いて実行してみました。

えっと。
ブラウサはアップデートするとろくな事はないので(ブラウザに限らず多くのアプリケーションに共通することですけれど)滅多にアップデートしないことに決めています。
そのせいか私のところのWindows7上のFirefoxでは上の動画はうまく走りません(テストでは駄目だったのですけれど今確認してみたらちゃんと動きました)。
Google Chrome、Microsoft Edge、Internet Explorer(!)では動作することを確認済みです。

0.5秒ごとに点滅するはずなのにちょっと周期が短いようです。
クロックをオシロスコープで測定してみましたら(左側に見えています)周期は800nsしかありません。
このことについては次回に書くことにいたします。

超ローコストPICWRITERの製作[第260回]
2025.4.15 upload

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