

AT90S1200 を使って PIC12F629 の時と同じように 0.5 秒点灯 0.5 秒消灯を繰り返すだけの簡単なプログラムを組んでみた。
次に Project メニューから Add File... を選択してソースファイルを取り込む。 AVRstudio3.56 (以後 AVRstudio と略記) に備わっているエディタでもソースファイルを書くことができるが、ははっきり言って使いにくい。日本語が直接入力できないのだ。使い慣れたエディタかメモ帳を使った方がいいだろう。日本語が直接入力できないのは PIC の MPLAB IDE 6.3 も同様だ。両者で大きく違うのは AVRstudio では日本語を含むファイルを読み込むと 2 バイト文字は文字化けして読めない。読み込んだ後、毎回フォントを日本語に指定しなければならない点は何とも使いにくい。後者では一度日本語に指定しておけばそれ以降読み込んだファイルの 2 バイト文字はきちんと表示される。もっとも日本語を主に使うのはコメントぐらいなので、使わなければ問題ない。

AVR で使うことのできる汎用レジスタは 32 本ある。 R0 から R15 までは特定の命令が使えないが R16 から R31 までのレジスタはすべての命令が使えるとある。なるほどサンプルプログラムを眺めてみると多くのプログラムが R16 から使っている理由がこのあたりにあるようだ。すべてのレジスタに対してシングルサイクルでアクセスできるということだ。命令のすべてがシングルステップではないようだが PIC の 1 ステップ 4 サイクルとは違っている。クロックのわりに動作が速いというのはこのあたりにあるのかもしれない。右の画像は AVRstudio の中で開いた Registers ウィンドウ。割り込みもパワーオンリセット、外部割り込み、タイマー割り込み、アナログコンパレータ割り込みなどがあるが、とりあえず最初のものを除いてまだわよくからないので今回は使わない。
LED を点灯した後と消灯した後にタイマルーチンをおけば 0.5 秒点灯 0.5 秒消灯を繰り返すルーチンを作ることができる。サブルーチンのコールには rcall(Relative Subroutine Call) 命令を使う PIC の call 命令と同じと考えて良さそうだ。スタックレベルは 3 段までなので注意が必要。 PIC16F84A の 8 段までに比べると少ないが、 PIC12C509A ではスタックが 2 段までだったので気を付ければそれほど問題ではない。
シミュレータデバッグによる点灯・消灯のタイムは統合環境の中の Processor ウィンドウの StopWatch で確認しながらソースを書き換えて調整することができる。 MPLAB に慣れてしまっているためか AVRstudio はちょっと使いにくい気もするが、少し使い込めば問題なさそうだ。とりあえず LED の点灯・消灯時間をシミュレータで調整してみた。今回の 4MHz レゾネータを使った場合 1 ステップが 0.25usec となる。タイマサブルーチンは PIC とは命令が違うもののそれほど違和を感じない。



とりあえず初めてのプログラムがきちんと動いたのでうれしい。しかし 20 ピンの AT90S1200 は果たして趣味の世界のどのような場面で使うことができるだろうか。