« 7-2 課題2 LEDの点滅 ~その2~ | メイン | 7-4 課題4 スイッチの使い方 ~その1~ »

はてなブックマークに追加   7-3 課題3 LEDの順次点灯 ~その3、シフト命令~

課題2のCソース・ファイルとHEXファイルはこちらです【LZH】

■ 課題3

 課題2と同じLEDを順次点灯するプログラムです。


 課題2ではLEDごとにON/OFFを記述しましたが、点灯させるLEDが増えると面倒です。シフト命令を使って同じ動作を実現しましょう。

   ○○○○ ○○○●
   ○○○○ ○○●○
   ○○○○ ○●○○
   ○○○○ ●○○○

// ex7-3.c
// PIC16F84A用

#include<16f84a.h>

#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000)
#define ON 1
#define OFF 0

#byte RA=5
#byte RB=6
#bit IRSIG=RA.2
#bit TACTSW=RA.3
#bit DOWN_LED=RB.0
#bit UP_LED=RB.2
#bit RIGHT_LED=RB.1
#bit LEFT_LED=RB.3

void main()
{
int i,led_data;
RB=0x00;
set_tris_a(0x0c);
set_tris_b(0x00);
while(1){
led_data=0x01;
for(i=0;i<4;i++){
RB=led_data;
★★★★;
RB=0x00;
★★★★;
led_data=led_data<<1;
}
}
}

■ 変数と宣言

int i,led_data;

 iやled_dataを変数といいます。変数は数や文字を記憶させておく引き出しです。わかりやすいように名前を付けておくことができます。

 その前についているintですが、変数の型を示しています。intは整数型です。普通のC言語ではintは整数型なので、正負の数を扱えるのですが、CCS-Cでは普通に宣言するとintは正の数を扱う型となります。

 Basic言語には型の考え方はありません。C言語は使う変数がどんな型なのかを宣言することでメモリを節約しています。

■for文

      for(i=0;i<4;i++){
    実行させる内容
      }

 iが0,1,2,3の4回変化する間{}の中を実行します。
 回数が決まっている内容を実行するのに使います。

■ シフト命令

 led_dataという名前の変数に0x01を代入します。これがLED1を点灯するデータになります。

RB=led_data;

 実際にはこの記述により、LEDが点灯します。

 最初のled_dataの内容は0001です。これを0010にするとLED2が点灯します。どうすればよいかというと、シフト命令を使い、次のように記述します。
 シフト命令は変数値を右または左へ1ビットずらす命令です。

  led_data=led_data<<1;

 これを順番に実行すると、

   0001、0010、0100、1000

まで進み、0001に戻ります。これを繰り返すことにより、LEDの順次点灯を実現します。



 説明になかった部分で、プログラムの条件を満たすには★に何を入れればよいでしょうか? 考えてみましょう。

 正解は次回に掲載します。


長野県飯田工業高校 竹内浩一

トラックバック

このエントリーのトラックバックURL:
http://www.eleki-jack.com/mt/mt-tb.cgi/455

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

カレンダ

2008年11月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

おすすめ書籍

会社案内
情報セキュリティおよび個人情報の取り扱いについて

コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。
コメントはそれぞれ投稿した人のものです。

About

2007年10月 9日 08:53に投稿されたエントリーのページです。

ひとつ前の投稿は「7-2 課題2 LEDの点滅 ~その2~」です。

次の投稿は「7-4 課題4 スイッチの使い方 ~その1~」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 4.1