Translate

2009年10月3日土曜日

PIC16F84AでLEDを点灯(1)

LED実験ボードが出来たのでプログラムの練習です。

[実験 MikroC Pro PIC16F84A_LED_0001]
PIC16F84AでLEDを全部点灯せよ。
●●●●●●●●


MikroC Pro for picを起動します。













P 16F84A





20MHz





84A_LED_0001




void main() {
}

main 関数が自動で出来ているので、


TRISA = 0x00; // PortAをOutput
TRISB = 0x00; // PortBをOutput
PORTA = 0xFF; // PortAをHigh
PORTB = 0xFF; // PortBをHigh

4行入力します。





Edit Project





[ Configurationの設定 ]






OscillatorをHS

セラミック発振子は、HS






Power Up Timer をON


パワーアップタイマイネーブルビットの
パワーアップタイマを動作させる。

(OFFでも良い)




OK





Build





Finish successfullyが最後の行に出れば、Build成功。





84A_LED_0001.hexをPIC16F84Aに焼きます。





上部が、PortAのLED 左から
RA5,RA4,RA3, RA2,RA1,RA0,OSC1,OSC2

下部が、PortBのLED 左から 

RB0,RB1,RB2,RB3,RB4,RA5,RA6,RA7


RA4の出力は、オープンドレインタイプ。
RA5は、通常動作中の MCLR リセットスイッチ。アクティブLowでReset。

左の黄色いタクトスイッチを押してみて下さい。
押している間は、LEDが消灯し、
指を放すと、LEDが再び点灯します。








[ C言語の説明 ]

void main(){
  処理1;
  処理2;
  …… ;
  処理n;


main関数(main function)は、

C言語のプログラムの中で最初に実行される重要な関数です。
原則として「処理1」「処理2」………「処理n 」と下へ処理が実行されます。

プログラムを見やすくするために、Tabキーを押して字下げをします。
これをインデントといいます。

C言語では、文の終わりには「 ; (セミコロン)」の記号を書くことになっています。
これを単文と呼びます。
{ }で囲われた部分を複文と呼びます。

MicroC Pro では、C言語の「/* から */」と
C++言語の「//」の
2種類のコメント(comment)が使用可能です。
 
/* 1行コメント */  または  /* 複数行コメント */
// 1行コメント



[ プログラムの説明 ]

mikroC Proでは、「(レジスタ名)=(値)」で=演算子を用いて
レジスタに直接値を代入できます。



また、ポートの各ビットを指定する場合には、
「(ポート名).F(ビット名)」という書式もあります。

(値)を書くには、16進数、2進数、10進数の3つの表記が使われています。

16進数を表記する場合、数値の前に0xを付けます。
2進数の場合には、0bを付けます。
10進数の場合には、何も付けないという規則があります。



PIC16F84A は、8Bitマイコンなので下記のように表記します。





TRISA = 0x00; // PortAをOutput
TRISB = 0x00; // PortBをOutput
PORTA = 0xFF; // PortAをHigh
PORTB = 0xFF; // PortBをHigh



または

TRISA = 0b00000000; // PortAをOutput
TRISB = 0b00000000; // PortBをOutput
PORTA = 0b11111111; // PortAをHigh
PORTB = 0b11111111; // PortBをHigh


でもかまいません。

16Bitマイコンの場合は、下記のように見にくいですね。


TRISA = 0b0000000000000000; // PortAをOutput
TRISB = 0b0000000000000000; // PortBをOutput
PORTA = 0b1111111111111111; // PortAをHigh
PORTB = 0b1111111111111111; // PortBをHigh



TRISレジスタは、ピンの入出力(Input,Output)の方向を決めるレジスタです。

0ならば出力(Output)、1ならば入力(Input)となります。

出力(Output)とは、LED、モータ、油圧、空圧など。
入力(Input)とは、スイッチ、センサーなど。

ですから、まず
TRISレジスタでピンの役割 (InputかOutput)をPICに指示します。


TRISA = 0x00;
TRISB = 0x00;

次に、PORTレジスタで1ならばHigh(5v)、
0ならばLow(0v) をPICの各PINに指示します。

PORTA = 0xFF;
PORTB = 0xFF;

つまり、出力(Output)に指定した、LED、モータ、油圧、空圧などの
ONまたはOFFを決めてやります。



逆にプログラミングしても正常に動きます。

mikroC PRO for PIC

3 件のコメント:

  1. こんばんは、最近picに興味を持ちだしたものです。プログラム作りでアドバイス頂けると幸いです。またお邪魔させて頂きますね。突然失礼いたしました。

    返信削除
    返信
    1. プログラム作りでアドバイスは出来ないと思いますが、picに興味を持って頂きありがとうございます。

      削除
  2. どうぞ宜しくお願い致します。

    返信削除