か
キーマトリクス
(1)4つのポートにスイッチを直列で各ポートにつき4つずつつなぐ(16個)。
(2)スイッチのもう一方に横から4つのアウトポートをつなげる
(3)(2)を順番にONして、(1)の状態を読み取る
8個のポートで16個のボタンの状態を読み取れるというストーリ。
コンフィギュレーション
コンフィギュレーションには3つあるような気がする
(1)プログラムと直接関係ないが、周辺機能的な内容の決定
(2)複数の役割があるPINのどの機能を使うかを決める
(3)I/Oの入力と出力の方向を決定する
(1) に関しては、コードプロテクトとか、クロックは外部or内部とか、ウォッチドッグタイマは使うのかとか、リセットは有効かとか。
どのようにして使うかは、コンパイラによっても異なるけど、
__CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF & _IntRC_OSC
のようにして設定する。
(2)に関しては、GP2/TOCKI/FOSC4 みたいにあったら、はI/0ポートとして使用することもできれば、
タイマ割り込み用のクロックの入力、あるいは内部クロックの1/4周波数の出力にも使える(兼用になってる)。
だから、どの機能として使うかをコンフィギュレーションしてやる必要がある。
これは、特定のレジスタのビットを立てたり下したりすることもあれば、
(1)の結果、変わるものもある。たとえば、リセットを無効にすると(_MCLRE_OFF)I/Oピンになれる…というものもあるようだ。
(3)に関しては、
bsf STATUS,RPO ;bank=1
bcf TRISI0,0
bcf STATUS,RPO ;bank=O
のようにして、TRISIOのビットを0にすると出力になる。
PICで、I/Oポートのデフォルト(POR:Power On Reset)値は入力である。
上記では、バンクの切り替えをしているが、どのバンクにどのレジスタがあるかは、
そのCPUのデータシートを見ないとわからない。
なお、貧弱なCPUの中では、
movlf b'11111110'
TRIS GPIO
のように、命令が存在しないために、妙な命令での代用が必要なこともある。
さ
サイクル(1サイクル)
1つの処理。PICでは1サイクル=4クロックであるのが標準。
どうも、命令の読み出しに2クロック、命令の実行に2クロック使っているらしい。
4MHzで動作するCPUは、1命令1μsecで動くよとか言われるのは、このため。
ちなみに、CALLとgotoなどは例外で、2サイクル使用するらしい。
DECFSZ(decrement f skip if zero)などは、DECREMENTは1サイクルだが、skip(=goto)は2サイクルなので、
条件が成立したときだけ2サイクル使用する。
結構、いい加減な時間測定にはこいつを使用することもある。
いい加減な時間測定になる理由は2つあって
(1)サイクル数がぴったり1000とかにするのは難しい
(2)内部クロックがずれている
(2)は要するにOSCCALのこと。
起動時にWレジスタにOSCCALの値が入るようになっていて、movwf OSCCAL (move w to file register)としてやるが、
このとき、movlw Ox26のようにして、リテラルとしてwに別の値を入れれば、OSCCALを補正できる。
BSFでOSCCALのFOSC4ビットをオンにすると、これによりPICの3番ピンはI/0としてではなく、
1/4クロックの周波数出力ピンとして動作させられるので、
ここにオシロを当ててチェックするという流れ。
は
バリコン:
バリアブルコンデンサーの略。電気容量を変えられるようにしたコンデンサ。
コンデンサの金属板を回転させることで、コンデンサのSを可変にしている。
メイク接点(a接点)とブレイク接点(b接点)
アクティブハイのスイッチがa接点で、アクティブローのスイッチがb接点
ブロックダイアログ
PIC10F200の内部を表した図。BLOCK DIAGRAM。
ALUとかのブロック図が書いてあって、「どうでもいいよ」と読み流してしまいがちだが、
実はプログラムのときに見ておくべき内容がある。
プログラム可能なステップ数
Flash 256X12 Program Memory
12bit の命令を 256個(256ステップ)まで書けるよという意味
I/Oピンの入出力
GPIOというブロック図から、外側のPINにどういう矢印が出ているか。
双方向の矢印なら入出力として使える。
外側から内側(GPIOとある方向)にしか矢印がない場合は、入力としてしか使えない。
ま
メイク接点(a接点)とブレイク接点(b接点)
:アクティブハイのスイッチがa接点で、アクティブローのスイッチがb接点
ら
リセットベクタ
PICに電源が投入されたり、あるいはリセット動作が行われた場合、最初に実行されるアドレスのことで
PICは000番から順番に命令を実行する。
したがって、PICのプログラムは#includeや__CONFIGの後に
ORG 0x000
と書くのがお約束である。
わ
ワード
そのCPUで最も自然な命令幅のこと。
32ビットCPUなら4バイトが1ワード。
PICでは,CPUのグレードによって12bitだったり、もう少し高機能だと14bitが1ワードだったり。
CPUによっては命令ごとに命令幅がまちまちなことも多いが、PICは全ての命令が1ワードに収まっている。
割り込みベクタ
割り込み機能を持つCPUだけが持つアドレスのこと。
割り込みが発生すると、このアドレスに飛んでくる。
PICでは、0x004である。
したがって、下記のようなプログラムはお約束となっている。
ORG 0x000 goto main
;割り込みハンドラ ORG 0x004 (割り込み処理) retfie
main (メイン処理)