LEDを点滅させるプログラム | |
---|---|
#include "common.h" #include "primary.h" void main() { Timer tm; while(true) { LED(1); tm.wait(500); LED(2); tm.wait(500); } } |
1 iodefine.hを読み込んだり、新しい型の設定をしている。 2 基本的なクラスのヘッダファイルを読み込む。(ほとんどは、コメントになっている) 3 4 5 6 tmという名前のTimerオブジェクトを作る 7 永久ループ 8 9 緑のLEDを点灯 10 tmオブジェクトの中のwaitメソッドに500を送る。500ms待ちになる。 11 オレンジのLEDを点灯 12 13 14 |
上級 |
---|
waitUS()メソッドを使えばマイクロ秒単位で使うことができます。 void waitUS(unsigned short US); 引数は16bitです。 |
タイマー2つでLEDを2つ独立に点滅させるプログラム | |
---|---|
void main() { startInit("**** タイマーのテスト****\n"); Timer tm; Timer tm2; Port Green = Port(CPU.port6, 4); Port Orange = Port(CPU.port6, 5); Green.setOutput(); Orange.setOutput(); tm.mark(); tm2.mark(); while(true) { if(tm.timeout(500)) { tm.mark(); Green.writePin(!Green.readPin()); } if(tm2.timeout(300)) { tm2.mark(); Orange.writePin(!Orange.readPin()); } } } |
1 2 3 4 緑のLED用のtmという名前のオブジェクトを作る。 5 オレンジのLED用のtmという名前のオブジェクトを作る。 6 緑のLEDオブジェクトで、名前をGreenにする。 7 オレンジのLEDオブジェクトで、名前をOrangeにする。 8 Greenを出力設定にする。 9 Orangeを出力設定にする。 10 緑のLED用タイマーをセットする。タイマースタート 11 オレンジのLED用タイマーをセットする。タイマースタート 12 13 14 緑用のタイマーが500ms経っていたら、 15 タイマーを再スタートさせる。 16 緑のLEDを反転させる。 17 18 オレンジ用のタイマーが300ms経っていたら、 19 タイマーを再スタートさせる。 20 オレンジのLEDを反転させる。 21 22 23 |
上級 |
---|
timeoutUSメソッドを使えばマイクロ秒単位で使うことができます。 bool timeoutUS(unsigned short timeUS); 引数は16bitです。 |
重要なcpuクラスのメンバー |
---|
フィールド static const unsigned int port1 = 0xFFD4; static const unsigned int port2 = 0xFFD5; static const unsigned int port3 = 0xFFD6; static const unsigned int port5 = 0xFFD8; static const unsigned int port6 = 0xFFD9; static const unsigned int port7 = 0xFFDA; static const unsigned int port8 = 0xFFDB; static const unsigned int portB = 0xFFDD; コンストラクタ cpu(); メソッド static void delay(unsigned wait); 単位は約5μsのつもり static unsigned char readPin(unsigned int port, int bit); static unsigned char readPin(Port& P); static void setInput(unsigned int port); static void setInput(unsigned int port, int bit); static void setInput(Port& P); ポートとビットの情報はPortクラスを用いる static void setIOPort(unsigned int port, int value); static void writePin(unsigned int port, int bit, bool value); static void writePin(Port& P, bool value); static void writePort(unsigned int port, unsigned char value); static void writePort(Port& value); static void setOutput(unsigned int port, unsigned char bit); static void setOutput(unsigned int port); static void setOutput(Port& P); ポートとビットの情報はPortクラスを用いる static void setOutputPort(unsigned int port, int value); static int readPort(unsigned int port); static void BuzzerSet(unsigned char pitch , unsigned char vol); ブザーの設定 static void BuzzerStart(); ブザーを鳴らす static void BuzzerStop(); ブザーを止める |
A/Dコンバーターの値を表示させる | |
---|---|
void main() { startInit("**** ADコンバーターのテスト****\n"); Timer tm; ADCon ad; while(true) { printf("left: %4d leftC: %4d\n", ad.value(0), ad.value(1)); tm.wait(500); } } |
1 2 3 4 タイマーオブジェクトを作る。 5 A/Dコンバーターのオブジェクトを作る。 6 永久ループ。 7 8 それぞれ測定し、値を表示する 9 500ms待つ 10 11 |
上級 |
---|
ADCScanメソッドを用いると、4チャンネルを高速に測定できます ADCScan(BYTE channel); 測定された値は、 int* value(); // 4つの大きさの配列のアドレスが戻ります void value(int* val); // 自前の配列に入れてもらいたい場合 上記のメソッドは、1回のスキャンですが、次のメソッドで、autoScanをtrueにすると、連続的に測定します。 ADCScan(BYTE channel, bool autoScan); |