PIC12C509(以下12C509)は、PICマイコンのロー・レンジに位置する、 極めて限定された機能のみを持つ8ピンの小さいPICマイコンである。基本的な、 命令は、PIC16F84とだいたい同じである。また、12C509は、非常に安価で、 一個150円で売っている。12C509は、4MHzの内部RC発振モードを 持っており、外部の発振回路から、クロックを送らなくても使用する事が出来る。
12C509で、プログラミング(特に、内部RC発振を利用)するとき、 まず、OSCCAL(校正値レジスタ)に、校正値を入れなければならない。校正値 は、プログラムが開始するとき、プログラムメモリの最後部に出荷時に書き込ま れた校正値がWレジスタに格納されるので、プログラム上では、プログラムの 始めに、Wレジスタの値をOSCCALレジスタに格納すればよい。
-------------------------------------------------------------------- 例 ORG 00H MOVWF OSCCA ; 校正値を設定 --------------------------------------------------------------------
12C509で、ポートの入出力を設定するときは、TRIS命令を使用する。 これは、入出力を設定するレジスタが、物理メモリに存在しないからである。 さらに、GR2ピンであれば、その入力を、タイマー0に送ると言うような設定 をしたいときには、OPTION命令を使用する。これも、先ほどと同じ様に、 OPTIONレジスタは、物理メモリには、存在しないからである。
-------------------------------------------------------------------- 例 ORG 00H ..... MOVLW B'00000001' ; GP0ピンを入力に設定 TRIS MOVLW B'00100000' ; GP2ピンの入力をタイマー0に入力 --------------------------------------------------------------------
GP3ピンだけは入力専用で、設定次第で、汎用入力ピン、 MCLR(マスター・クリア・リセット入力)ピン、プログラム書き込み電圧入力 ピン(設定とは関係なく、プログラム書き込み時に電圧を加える)の3つの機能を 持つ事が出来る。そのため、汎用I/Oポートとして利用する際には、入力にしか 設定出来ない。また、GP5ピンは、内部RC発振モードの時以外は、汎用I/Oポート としては、使えない。よって、GP3ピンは、常に、入力に設定する。
12C509では、PIC16F84では存在した、ADDLW, SUBLW, RETURN 命令が 存在しない。つまり、定数との加算、減算が出来ないことになる。しかし、 RETURN 命令だけは、RETLW命令で代用できる。ただし、この命令は、Wレジスタ に、値をセットしてリターンする命令なので、Wレジスタの値を持って帰るには ファイルレジスタに一旦入れておいて、後から取り出す必要がある。
------------------------------------------------------------------- 例 CALL SUB MOVFW TEMP ; 待避させたデータをWレジスタに戻す .......... SUB MOVWF TEMP ; Wレジスタの値を待避 RETLW 0 ; Wレジスタに入れる定数は何でもよい -------------------------------------------------------------------
12C509には、(WDTやMCLRを除いた)割り込みは存在しない。 例えば、タイマー0がオーバーフローしたときに、割り込みをかける、といった事 が出来ない。当然の事ながら、割り込み処理ベクタも、コントロールレジスタも 存在しない。よって、割り込み処理をしようとした時、タイマー0など割り込み 要因となる物の値を読むなどして、自分でやる必要がある。
以上が、12C509を使う上での注意点である。これらのことさえ知って いれば、後はPIC16F84と同じ様にプログラムが開発出来る。12C509は、 それほど、複雑な物ではなく、むしろシンプルである。ただし、唯一プログラム 開発で、問題になるのは、このデバイスの書き込みが一回限りであることで ある。つまり、一度書き込んでしまうと、二度と修正出来なくなってしまう。 しかし、かなり高価であるが、一個1600円の、紫外線消去型12C509J/Wがある。 これは、プログラムメモリの内容を紫外線を利用して消去するもので、 開発、テスト用に用いられる。このデバイスの注意点は、プログラムメモリ の最後部にある校正値も一緒に消してしまうので、必ず校正値をセーブする 必要があるところである。
12C509を使ってみて、まず最初に困った事が、資料がほとんどなかった 事である。PIC16F84の資料は、増えつつあるにも関わらず、12C509の資料は マイクロチップ社の提供するデータシートぐらいしか無く、そのほかは、 サンプルプログラムをみて、自分で解析しなければならなかったのである。 そのことが、このレポートを書くきっかけとなった。このデバイスは、低機能 ではあるが、特定処理をモジュール化出来ると言う点で、非常に優れている。 (今回のロボフェス出場機に、このデバイスを使ってCPUから制御出来るPWM をのせた)今後も、このデバイスは、こういった特定処理のモジュール化に 役立つと思う。
1)PIC12C5xx Data Sheet ,Microchip Technology Inc (1999) 2) 永浦 清/上野 幸一 小規模CPLDの設計、トランジスタ技術2001年 8月号、p281〜286、CQ出版社