例題2:2つのステッピングモータで威風堂々を演奏するプログラム
//PIO0_9 タイマ16を使ってパルス出力を行うための周波数の値
define hdos 64939 //ド#周波数
define hre 61295 //レ周波数
define hres 57854 //レ#周波数
define hmi 54607 //ミ周波数
define hfa 51543 //ファ周波数
define hfas 48650 //ファ#周波数
define hso 45919 //ソ周波数
define hsos 43342 //ソ#周波数
define hra 40909 //ラ周波数
define hras 38613 //ラ#周波数
define hsi 36446 //シ周波数
//PIO1_6 タイマ32を使ってパルス出力を行うための周波数の値
define atmi 109215 //ミ周波数
define atfa 103086 //ファ周波数
define atfas 97300 //ファ#周波数
define atso 91839 //ソ周波数
define atsos 86684 //ソ#周波数
define atra 81819 //ラ周波数
define atras 77227 //ラ#周波数
define atsi 72892 //シ周波数
define btdo 68801 //高いド周波数
define btdos 64940 //高いド#周波数
define btre 61295 //高いレ周波数
define btres 57855 //高いレ#周波数
define btmi 54608 //高いミ周波数
/マクロ**/
/グローバル変数**/
/メイン関数**/
void hstep (int ontei ){
LPC_TMR16B0->TCR=0; //タイマ16のカウント停止
LPC_TMR16B0->TCR |=(1<<1); //タイマ16カウントリセット「 LPC_TMR16B0->MR1=ontei; //周期を入力
LPC_TMR16B0->TCR =1; //タイマ16カウント開始
}
void tstep(int ontei){
LPC_TMR32B0->TCR=0; //タイマ32のカウント停止
LPC_TMR32B0->TCR |=(1<<1); //タイマ32カウントリセット LPC_TMR32B0->MR0=ontei; //周期を入力
LPC_TMR32B0->TCR=1; //タイマ32のカウント開始
}
int main (void)
{
const unsigned short MainCycle = 50; //50Hzに保つ
Init(MainCycle);
LPC_IOCON->PIO2_4=0xd0;//PIO2_4レジスタをIOポートとして使うための設定。2進数で00011010000を代入、
//3,4ビット目を10にしてプルアップ抵抗を使うモードに、10ビット目を0にして通常の入出力IOポートとして設定
LPC_IOCON->PIO2_5=0xd0;//PIO2_5レジスタをIOポートとして使うための設定。2進数で00011010000を代入、
//3,4ビット目を10にしてプルアップ抵抗を使うモードに、10ビット目を0にして通常の入出力IOポートとして設定
LPC_GPIO2->DIR |= (1<<4); //GPIO2DIRレジスタの4ビット目だけを1にして、PIO2_4を出力IOポートに設定
LPC_GPIO2->DIR |= (1<<5); //GPIO2DIRレジスタの4ビット目だけを1にして、PIO2_5を出力IOポートに設定
LPC_TMR16B0->PR = 1; //2回ステップでカウントが1個上がるようにしている
LPC_TMR16B0->PWMC &= ~(1<<1); //PIO0_9 MAT1をEM1により制御
LPC_TMR16B0->MCR |= (1<<4); //MR1によるリセット(MR1R=1)
LPC_TMR16B0->EMR |= (3<<6); //トグル出力を選択(EMC1="11")
LPC_TMR32B0->PWMC &=~(1<<0); //EM0により制御 (PIO1_6)
LPC_TMR32B0->EMR |=(3<<4); //MR0をトグル出力に設定
LPC_TMR32B0->MCR |=(1<<1); //MR0によるTCリセット
LPC_TMR32B0->MCR &=~(1<<10); //MR3によるTCリセット解除 これをしないとPWMが出ない
tstep(0); //ステッピングモータ1停止
hstep(0); //ステッピングモータ2停止
LPC_GPIO2->DATA &=~(1<<4); //PIO2_4を0V(low)ステッピングモータ1時計回り
LPC_GPIO2->DATA &=~(1<<5); //PIO2_5を0V(low)ステッピングモータ2時計回り
while(getSW()==0){} //ボタンが押されるまで待つ
LED(1);//緑LED点灯
//以下威風堂々を演奏する
Wait(2000);
tstep(btre);
Wait(1000);
tstep(btdos);
Wait(250);
tstep(btre);
Wait(250);
tstep(btmi);
Wait(500);
tstep(atsi);
Wait(1000);
tstep(atra);
Wait(1000);
tstep(atso);
Wait(1000);
tstep(atfas);
Wait(250);
tstep(atso);
Wait(250);
tstep(atra);
Wait(500);
tstep(atmi);
Wait(1000);
Wait(1000);
tstep(atfas);
Wait(1000);
tstep(atsos);
Wait(250);
tstep(atra);
Wait(500);
tstep(atsi);
Wait(250);
tstep(btmi);
Wait(1000);
tstep(atra);
Wait(1000);
tstep(btre);
Wait(1000);
tstep(btre);
Wait(250);
tstep(btdos);
Wait(500);
tstep(atsi);
Wait(250);
tstep(atra);
Wait(2000);
tstep(btre);
hstep(hre);
Wait(1000);
tstep(btdos);
hstep(hmi);
Wait(250);
tstep(btre);
Wait(250);
tstep(btmi);
Wait(500);
tstep(atsi);
hstep(hfas);
Wait(1000);
tstep(atra);
hstep(hre);
Wait(1000);
tstep(atso);
hstep(hsi);
Wait(1000);
tstep(atfas);
hstep(hre);
Wait(250);
tstep(atso);
Wait(250);
tstep(atra);
Wait(500);
tstep(atmi);
hstep(hsos);
Wait(1000);
Wait(1000);
tstep(atfas);
hstep(hre);
Wait(1000);
tstep(atsos);
hstep(hmi);
Wait(250);
tstep(atra);
Wait(500);
tstep(atsi);
Wait(250);
tstep(btmi);
hstep(hdos);
Wait(1000);
tstep(atra);
hstep(hfas);
Wait(1000);
tstep(btre);
hstep(hsi);
Wait(1000);
tstep(btre);
hstep(hmi);
Wait(250);
tstep(btdos);
Wait(500);
tstep(atsi);
Wait(250);
tstep(atra);
hstep(hdos);
Wait(2000);
tstep(0); //ステッピングモータ1停止
hstep(0); //ステッピングモータ2停止
}


