aの5と6番名のビットで、モーター制御かA-D変換かD-A変換かを決定する。通信プロトコルで決めたように、もし5と6ビットには1と1だったら、モーター制御が行われる。0,1,2番目のビットで制御したいモーターの番号を決定する。そのモーターの動きは3,4番目のビットできまる。
a=getc();
if ((a&0x60) == 0x60) { // a の 0,1 番目のビットだけをみる。
if ((a&0x03) == 0x01) { //モーター 1
motor1(a);
}
if ((a&0x03) == 0x10) { //モーター 2
motor2(a);
}
if ((a&0x03) == 0x02) { //モーター 3
motor3(a);
}
}
マイコンの動作を決定させたり動作状態を調べたりするためのレジスタ類はSFR(スペシャルファンクションレジスタ)と呼ばれ、データメモリ領域の一部にある。なので、それぞれのレジスタにはきちんとアドレスが割り当てられ、メモリへのデータ読み書きと同じ要領でレジスタの操作が可能である。
モーター制御に関係するスペシャル・ファンション・レジスタは図6.3に表される。
例えばアームを制御したい時はレジスタP3のT2EX、T2の値を変えれば良いのでプログラムは次のようになる(P3,T2EXの値は表5.1で決まる)
void motor3(char a){ モーター 3
if ((a&0x18) == 0x10) //a の3,4番目のビットをみる。10は正転の場合。
P1 = 2;
if ((a&0x18) == 0x08) //01: 逆転
P1 = 1;
if ((a&0x18) == 0x18) //11: ブレーキ
P1 = 3;
if ((a&0x18) == 0x00) //00: 停止
P1 = 0;
}