モータ制御においては、FETブリッジ駆動回路への信号線にマイコンのピンからの出力を使用している。これは本来、外部入力割り込み(INT割り込み)や、タイマ/カウンタの操作など、別の用途に用いられるものであるが、それらに対応するレジスタの値を書き換えれば出力に利用する事もできる。よってSFRを操作する事でモータ制御を行うことになる。
モータ制御に関係するSFRは図7.2に示されるP3というレジスタである。この図では左側を上位ビットにしているが、モータ駆動に用いる2bitのうち上位ビットをFETブリッジ回路のIN2に、下位ビットをIN1に接続している。例えば、モータ1を正転させたい時はINT1をL、INT0をHにする。
レスクロ専用のモータ制御コマンドならば単にa3〜a0のビットを見て必要なモータを動かすだけである。しかし、モータの機能ごとのコマンドでは2byte目に処理対象のモータの指定があるので、2byte目をparamという引数に代入したとすると、例えば正転のプログラムは以下のようになる。「byte」はtypedefされたunsigned char型である。
// 正転
void motorFront(byte param)
{
if (param == 0) { // 全モータが対象
P3 |= 0x54;
P3 &= 0x57;
return;
}
if (param & 1) { // モータ1
P3 |= 0x04;
P3 &= 0xF7;
}
if (param & 2) { // モータ2
P3 |= 0x10;
P3 &= 0xDF;
}
if (param & 4) { // モータ3
P3 |= 0x40;
P3 &= 0x7F;
}
}