目次
前
次
変数
PICでC言語を利用する場合、アーキテクチャ上の
問題から、スタックを確保できません。グローバルを
利用し、出来る限りスタック操作エミュレートが発生
しないようにします。
データ型再定義
CCS社のC言語コンパイラは、C言語の仕様である
そのコンピュータで、基本となるビットサイズをint
に割り当てるという設計思想のもとに、8ビットを
intにしています。
これでは、使いにくいので、次のようにデータ型を
再定義します。
typedef signed int SBYTE ;
typedef unsigned int UBYTE ;
typedef signed long SWORD ;
typedef unsigned long UWORD ;
通信関連変数
本ボードには、8個ないしは12個のサーボモータを
接続できます。PCから、どのサーボモータに、値を
渡すのかを、シリアルで送信します。PICの中に、
シリアル用のバッファを用意しておき、PCから来る
情報を保存します。
バッファとバッファ中の位置を示す、2変数が必要に
なります。配列を利用して、バッファを構成します。
UBYTE sbuf[5] ;
UBYTE s_idx ;
サーボモータ制御用変数
本ボードには、最大16個のサーボモータを接続する
ので、1個のサーボモータに送り出すパルス幅を個別
に格納しておかなければなりません。配列変数chに、
パルス幅を格納します。
サーボモータには、20msに1度、1ms〜2msの間の
パルス幅を出力しなければなりません。
最小値が1ms、最大値が2msになります。
100us毎に割込みで、変数stateをインクリメントします。
ステートマシンを動かし、20msでステートが一巡する
ように工夫します。
また、100usの幅でHレベル出力時間を可変できるように
するため、サイズ10の配列を2つ用意します。0〜7の
サーボモータには配列変数svbを、8〜15のサーボモータ
には配列変数svcを割り当てます。
#define CHA_MAX 12
UBYTE state ;
UBYTE ch[CHA_MAX] ;
UBYTE svb[10];
UBYTE svc[10];
フラグ用変数
本ボードには、受信割込み、タイマー割込みを利用
するので、2つのフラグを用意します。
タイマー割込みは、タイマーが100usを計測する度に
オンにします。
受信割込みは、コマンドを入力し終わったときに、
フラグをオンにします。
UBYTE sflag ;
UBYTE tflag ;
オフセット用変数
本ボードには、カスケードにシリアル通信コードを
接続できます。4ビット回転DIPスイッチを利用
して、ボードの番号を設定します。ボードの番号を
オフセットとして、保存する変数を用意します。
UBYTE offset ;
目次
前
次