練習プログラム4


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

続いては、マイコンへの入力信号を処理するプログラムを作ります。

入力信号の処理方法には、情報の確認を何度も繰り返す「ポーリング」、ハードウェアの要求によって処理を発生させる「割り込み」があります。
ポーリングは単純な手法ですが、常にループさせて情報をチェックする必要がある上、処理が長くなるとループを1周する時間が長くなり、応答性が悪くなるという欠点があります。
それに対して、割り込みは応答が早いですが、特殊なルーチンを書く必要があり(既存の関数があれば楽ですが)、また、処理できる数も使用するCPUによって制約を受けがちです。

今回は、プログラム的に簡単な処理であるポーリングを用います。


参考プログラム④『スイッチを押してる間だけLEDを点滅させよ』
#include <3694.h>
#define SW !IO.PDR1.BIT.B4   //スイッチ(押されたら1 押されてないと0)
/*------------------------------------------*/
/*              指定ms待つ関数                   */
/*------------------------------------------*/
void ms_wait(unsigned int ms){
   //====指定msループ====//
   while(ms--)
   {
       //====TMA設定====//
       TA.TMA.BYTE = 0x1c;  //Clear TCA
       TA.TMA.BYTE = 0x13;  //PSS, 入力クロックφ/512
       while(TA.TCA < 40);  //約1ms待つ
   }
}
/*----------------------------------------------*/
/*                   メイン関数                     */
/*----------------------------------------------*/
int main(void){
 IO.PCR5 = 0xff;            //ポート5を全て出力に設定
 IO.PCR1 = 0x00;            //ポート1を全て入力に設定
 while(1){                  //無限ループ
   if(SW==1){               //もしスイッチが押されたら、
     IO.PDR5.BYTE = 0x00;   //LED全点灯
     ms_wait(200);          //0.2秒待つ
     IO.PDR5.BYTE = 0xff;   //LED消灯
     ms_wait(200);          //0.2秒待つ
   }
   else{                    //押されていない時は、
     IO.PDR5.BYTE = 0xff;   //消灯
   }
 }
 return 0;
}

 

 

プログラムの解説

今回の回路では、スイッチを押していない時は、端子の状態が【High】に、スイッチを押している時は、端子の状態が【Low】になるようになっています。

すなわち、スイッチを押していない時は、port1の0bit目を読み込むと1が、スイッチを押している時は0が読み込まれます。

このままIO.PDR1.BIT.B0と直接書いてもいいのですが、最初に

#define SW !IO.PDR1.BIT.B4

と#defineを用いてマクロ定義します。 論理演算子!によってport1の4bit目の情報を反転させ、それをSW1と定義することにより、スイッチを押している時はSW1=1、押していない時はSW1=0となる、分かりやすいプログラムにしています。

続いてメイン関数です。 port8は今まで通り出力ですが、port1を入力として用いるため、

IO.PCR1 = 0x00;

とします。PCR1の初期値は0ですが、明示的に0にしておきます。 
その後はif文を使い、SWが1であれば

IO.PDR5.BYTE = 0x00;
ms_wait(200);
IO.PDR5.BYTE = 0xff;
ms_wait(200);

というLED点滅の処理を、SWが0であれば

IO.PDR5.BYTE = 0xff;

というLED消灯の処理を行います。 これを無限ループさせることにより、スイッチを押している間だけLEDが点滅します。


課題プログラム④『スイッチを押したらLED全点滅開始』

ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。