Pi:Co Classic2 製作記(移行中)

2015年新人研修 マイクロマウス編(08)

こんにちは。

本日はプログラムの書き換えをしました。
その前に使われているC言語の勉強です。

#include ファイルをその場所に挿入
ex)#include”iodefine” iodefineというファイルをその場所に挿入

struct 構造体
グループ分けをするワードです。

; 文節終わり

#define 定義する(=)
アドレスを簡単に定義するワードです。
アクセスするときにここを辿ればいいわけです。
またコマンドの置き換えや、変数の設定にも使います。

シフト
<< 左シフト
ex)<<1 00001⇒00010を表しています。
>> 右シフト
ex)>>2 00100⇒00001を表しています。
シフトのあとの数字は2の〇乗の〇が入ります。
bitをずらすのに用います。

さて後半です。
Lチカをウェーブさせたいと思います。

/*と*/ではさんだ部分は無効になります。
なのでまずLチカの部分を↑のではさみます。
そして教えていただいた通り以下のように打ち込みました↓

while(1) //無限ループ
{
/*
LED0 = LED1 = LED2 = LED3 = 1;  //LED点灯
for(i = 0; i < 0xfffff; i++);  //時間待ち(空ループ)
LED0 = LED1 = LED2 = LED3 = 0;  //LED消灯
for(i = 0; i < 0xfffff; i++);  //時間待ち(空ループ)
*/
LED0 = 1; LED1 = 0; LED2 = 0; LED3 = 0;
LED0 = 0; LED1 = 1; LED2 = 0; LED3 = 0;
LED0 = 0; LED1 = 0; LED2 = 1; LED3 = 0;
LED0 = 0; LED1 = 0; LED2 = 0; LED3 = 1;
}

コンパイル、ビルドをして転送します。
確かに光ってはいますが、ウェーブが早すぎてウェーブしているように見えません。
これではいけないので、wait文を書き加えます↓

while(1) //無限ループ
{
/*
LED0 = LED1 = LED2 = LED3 = 1;  //LED点灯
for(i = 0; i < 0xfffff; i++);  //時間待ち(空ループ)
LED0 = LED1 = LED2 = LED3 = 0;  //LED消灯
for(i = 0; i < 0xfffff; i++);  //時間待ち(空ループ)
*/
LED0 = 1; LED1 = 0; LED2 = 0; LED3 = 0;
for ( i  =  0 ;  i < 0xfffff ;  i++ ) ;  //時間待ち(空ループ)
LED0 = 0; LED1 = 1; LED2 = 0; LED3 = 0;
for ( i  =  0 ;  i < 0xfffff ;  i++ ) ;  //時間待ち(空ループ)
LED0 = 0; LED1 = 0; LED2 = 1; LED3 = 0;
for ( i  =  0 ;  i < 0xfffff ;  i++ ) ;  //時間待ち(空ループ)
LED0 = 0; LED1 = 0; LED2 = 0; LED3 = 1;
for ( i  =  0 ;  i < 0xfffff ;  i++ ) ;  //時間待ち(空ループ)
}

先端の4つのLEDがウェーブするように光りました!
でもこのプログラムは汚いんだそうです。
確かに行数が多いですよね。
これをシンプルにきれいにできるそうです。
先ほど書いたプログラムをスラッシュとアスタリスクで挟んでから
教えていただいた通り書き込んでいきます。
それがこちら↓

void main ( void )
 int i ;
 char j ;
 j = 0x08 ;

  PFC.PEIORL.WORD = 0x000f ; //LEDが繋がっているポートを出力に設定

while(1) //無限ループ
{
  PE.DRL.BYTE.L = j ;
  for ( i  =  0 ;  i < 0xfffff ;  i++ ) ;  //時間待ち(空ループ)
  j = j >> 1 ;
  if ( j == 0x00 ) j = 0x08;

/*
LED0 = LED1 = LED2 = LED3 = 1;  //LED点灯
for(i = 0; i < 0xfffff; i++);  //時間待ち(空ループ)
LED0 = LED1 = LED2 = LED3 = 0;  //LED消灯
for(i = 0; i < 0xfffff; i++);  //時間待ち(空ループ)
*/
/*
LED0 = 1; LED1 = 0; LED2 = 0; LED3 = 0;
for ( i  =  0 ;  i < 0xfffff ;  i++ ) ;  //時間待ち(空ループ)
LED0 = 0; LED1 = 1; LED2 = 0; LED3 = 0;
for ( i  =  0 ;  i < 0xfffff ;  i++ ) ;  //時間待ち(空ループ)
LED0 = 0; LED1 = 0; LED2 = 1; LED3 = 0;
for ( i  =  0 ;  i < 0xfffff ;  i++ ) ;  //時間待ち(空ループ)
LED0 = 0; LED1 = 0; LED2 = 0; LED3 = 1;
for ( i  =  0 ;  i < 0xfffff ;  i++ ) ;  //時間待ち(空ループ)
*/
}

短くすっきりしました。
定義してあるものをうまく使うと、すっきりまとめることができるみたいです。

C言語はまだ理解しにくいですが、しっかり覚えていきたいと思います。

タイトルとURLをコピーしました