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

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第519回]


●PICサンプルプログラムの説明(ヘッダーファイル)

また2日も間が空いてしまいました。
やっと納品は済んだのですけれど、なにしろまだやらなければならないことや、やってしまいたいことなどが目白押しなものですから、相変わらず時間不足です。
時間がない中で書こうとしますと、つい手抜きになってしまいます。
しかしそれでは読んでも読まなくてもよいような記事になってしまいます。
そうならないようにしようとしますとやたら手間がかかってなかなか先に進めません。
ものを書くというのはなかなかどうして難しいものです。

ずっとテーマ違いで脱線したままですが、乗りかかった船ですので、とりあえずはしばらく行き着くところまで行きたいと思います。
PICサンプルプログラムは[第516回]でお見せしました。
最近はPICのプログラムもC言語で書いたりする方が多くなってきたようです。
しかしPICのプログラムは、やはりマシン語(アセンブラ)で書きたいものです。
Microchip社のサイトからフリーの開発環境MPLAB IDEをダウンロードして無償で利用することができますから、これを利用しないという手はないでしょう。
私はMPLAB IDE v8.40を使っています。
ダウンロードしてからかなり経っていますから、バージョンが変わっているかもしれません。
しかし私はいまのところ現在のバージョンで十分満足しています。

MPLAB IDEについてはダウンロードや使い方などを解説しているサイトがたくさんありますから、そちらを参照なさってください。
Googleなどで「MPLAB ダウンロード」とか「MPLAB 使い方」で検索してみてください。

さて、プログラムの説明に入ります。
まずは先頭の部分です。

;;; table lookup & timer1 sample
; 13/11/23
;
;  INTclock=4MHz
        #include <p16f887.inc>
        __CONFIG _CONFIG1,_WDT_ON& _INTOSC & _PWRTE_ON & _MCLRE_ON & _LVP_OFF
        __CONFIG _CONFIG2
;        
;WDT period is 16.5ms(reset value)
;
cf=0
zf=2
f equ 1
w equ 0
;


最初のインクルード文はC言語と同じです。

#include <p16f887.inc> 

この文をプログラムの先頭部分に書いておくことで、そのPICに固有のレジスタ名などを定義しないで使うことができるようになります。
私は昔はそんなことも知らなかったので、
status equ 03
porta equ 05
などとひとつずつ定義して使っていました。
ちなみにそれらのレジスタ名はSTATUS、PORTAのように大文字で表記します。

なおp16f887.incなどのヘッダーファイルはMPLABをダウンロードしたときについてくるMPLAB Suiteフォルダにあります。
ひょっとするとバージョンによっては違うフォルダになっているかも知れません。
場所がわからないときは「ファイル名の検索」で探してみてください。
ヘッダーファイルを開くと、定義されているレジスタ名などを知ることができます。
それを見ますと

cf=0
zf=2
f equ 1
w equ 0

は、それぞれ

C EQU H’0000’
Z EQU H’0002’
F EQU H’0001’
W EQU H’0000’

と定義されていますから、わざわざ定義しなくても、cf、zf、f、wの代わりにC、Z、F、Wを使えばよいことがわかりますが、私は昔からの習慣で、わざわざそのように定義して使っています。

その次のCONFIGについてはちょっと特殊な書き方をします。
PIC16F628AなどはCONFIGレジスタが1つだけなのですが、PIC16F887などCONFIGレジスタが2つあるものはこのように記述しないとエラーになってしまいます。
機種によってはヘッダーファイルにCONFIGの書き方のサンプルが書いてあるものもあるのですが、p16f887.incにはそれがありません。
これに関してネット上では「エラーになって困っています。教えて」という質問が目に付きます。
このあたりがPICのちょいと困ったところです。

なおMPLABでビルド(機械語に翻訳する手続き)する前に、Configureで「PIC16F887」を選択しておかないと、CONFIGの行でエラーが表示されてしまいます。

_INTOSC

などはp16f887.incに記載されています。
今回はCPUクロックに内蔵オシレータを使いますからそのように記述しますが、たとえばクリスタルを外付けする場合には、その周波数によって

_XT_OSC
_HC_OSC

などと記述します。

本日は時間がなくなってしまいました。
この続きは次回にいたします。

ワンボードマイコンでCP/Mを![第519回]
2013.12.6upload

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