写真は使用した基板です。ICD-3を使用するためのアダプターを使用していますので、PICを着脱させることなくプログラムのロードとランをすることができます。
プログラムの開発環境はxc-8を使用しました。

                  ソフトの説明
PIC16F84AのBポートに8個のLEDを接続し順次フロー点灯をさせます。
方法は多岐にわたりますが、ここでは次の2種類について行いました。
1つはPORTBに直接16進の数値を書き込む方法で、単純ですがプログラムが長くなってしまいます。

          PORTB=0x01;
          __delay_ms(500);
          PORTB=0x02;
          __delay_ms(500);
          PORTB=0x04;
          __delay_ms(500);
          PORTB=0x08;
          __delay_ms(500);
          PORTB=0x10;
          __delay_ms(500);
          PORTB=0x20;
          __delay_ms(500);
          PORTB=0x40;
          __delay_ms(500);
          PORTB=0x80;
          __delay_ms(500);

動作は次のようになります。oが点灯で*が不灯です。
        o*******
    *o******
    **o*****
    ***o****
    ****o***
    *****o**
    ******o*
    *******o


 PORTBは8ビットですので16進数を代入することになります。これでRB1からRB8まで0.5秒で順次点灯していきます。0xFFを代入すれば全点灯します。
    oooooooo

PORTBに1から8を代入すると、下位4ビットで16進表示し上位4ビットは動作しません。
    o***----
    *o**----
    oo**----
    **o*----
    o*o*----
    *oo*----
    ooo*----
    ***o----

 速度を変えるには__delay_ms(X)のXをかえることにより変わりますが、値が小さいと全点灯しているように見えます。

 今回の順次点灯プログラムは一次配列を使用しました。
この配列をポインタで読みだしていきます。
ポインタはfor文でインクリメントします。
まず、16進数の点灯パターンを順番にaとして配列に入れます。要素数は8です。
ポインタをとしてb = aとすることにより、aの先頭アドレスをbに書き込みます。
c=*bで先頭アドレスの中身をcに代入し更にこれをPORTBに入れます。
次にポインタをfor文によりインクリメントすることによりフロー点灯することになります。


                   ソースリスト
#include <xc.h>

#pragma config WDTE = OFF
#pragma config FOSC = HS
#pragma config PWRTE = OFF
#pragma config CP = OFF
#define _XTAL_FREQ 10000000
char i, X=500, a ;
char *b ,c ;

int main(void)
   { TRISA = 0x02;
    TRISB = 0x00;
  while(1)
    {
     char a[8] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 };

     b = a ; //aの先頭アドレスをb(ポインタ)に書く
     c = *b; //先頭アドレスの値をcに入れる
     PORTB = c;
     for(i= 1;i<9;i++)
      { b++;
       c= *b;
      PORTB = c;
      __delay_ms(X);
              }
      }
}

                  ハードの説明
 基板はmicrochipのデモボードを使用しました。
xc-8はMPLAB Xで動作しますのでPICSTARTが使用できないので、秋月のET-ADAPTERにICD-3を接続して使用しました。PICは着脱しなくてすみます。このアダプターは18Fにも対応しています。
 このアダプタは3階建てになっています。最上段にPICを挿入しモジュラージャックにICD-3のプラグをいれます。最下段のピンを基板に挿入し、ロードとランはプッシュスイッチで行います。これで開発が大幅にスピードアップします。10年前に秋月で1,000円で購入しました。
回路図中Aポートにスイッチがありますが、今回は使用していません。




トップページへ戻る
LEDフロー点灯