[[I2C温度計その3]] * サブルーチンを使いたい! [#s25973e9] - miniCPU は、サブルーチンを実現するための一般的なcpu が持っている、call, return, branch and link などの命令を持っていません。 - miniCPUでサブルーチンを実現する手法について説明します。 * 特徴 [#w55fe670] - miniCPUのハードウェア(回路)は変更しません。 - miniCPUが持っている命令だけで実現します。 - recursive なプログラムには(現時点では)対応していません。 * 方法 [#cdbca096] - サブルーチンにジャンプする直前に、プログラムの中で、戻るアドレス(12bit)をスタックにプッシュします。 - サブルーチンでは、最初に、プッシュされた戻るアドレス(12bit)を取り出し、これと, jmp 命令である、0x4000 の論理和をとります。 - 上の値を、サブルーチンの実行コードの最後に埋め込みます。 * 例 [#o0dd2d18] - [[サブルーチンコールその1]]... ADT7420で温度を読み取るプログラムを、ほぼ、そのままサブルーチンにしています。 - [[サブルーチンコールその2]]... 一般的にI2Cを簡単に利用できるように様々なサブルーチンを定義し、それを使った例です。 - [[サブルーチンコールその1]]... ADT7420で温度を読み取るプログラムを、ほぼ、そのままサブルーチン(SubI2C1)にしています。 - [[サブルーチンコールその2]]... ADT7420で温度を読み取るプログラムのデータをI2Cの機能ごとに分割し、SubI2C1を呼び出して実行しています。 ---- #counter