I/O LEDを光らせる


 

〜デジタルI/O〜

さてさて、プログラムの仕方も分かって書き込みもできるようになりましたね(^^
さぁ!さっそくプログラムを始めましょう!

〜LEDを光らせる〜

まず、考えられる一番簡単なプログラムから始めましょう。
そう、LEDを光らせるのです。
LEDはマイコンにつながっています。じゃあLEDがつくって言うのはどういうことでしょうか?
電気が流れればLEDはつくんですよね。じゃあLEDがつながってる所に電気が流れるように
プログラムすればOKってことです。

どうやって電気を流すか。まず、回路を見てみましょう。



回路的にはこんな風になっています。
マイコンのポートに抵抗とLEDがつながっている。LEDの先は0Vにつながれてるので
もし、マイコンの出力を5Vとかにすることができれば 電気が流れてLEDが光るわけです。
どうやって流すのか?
それは この回路をもう1度見てみてください
「PORTC13」
ってあるでしょ?これがポイントです。
マイコンにはいくつか足があって 何個もLEDなんかをつなぐことができるようになってます。
で、それぞれの足をポートに分けて管理してるんです。
例えば今は ポートC の13 番につないでいますが。他にもポートBの6とか マイコンによって違いますが
たとえばdsPIC2012ならポートBは0〜9番まであります。
さてさて、番号で管理されてるわけだから
「ポートCの13番に電気を流す」
ってなプログラムを書けばLEDは光るわけです。

実際に見てみましょう

#include<p30f2012.h>

void main(void){
TRISCbits.TRISC13=0;
while(1)LATCbits.LATC13=1;

}

これがLEDを光らせるプログラムです。
コピーして貼り付ければ出来ると思います。
どうですか?LEDは光りましたか?

さぁて 何をしたのでしょうか?
順を追って説明します。

while(1)LATCbits.LATC13=1;

こういうのがありますね。これがLEDを光らせている大元です。
while()
っていうのは () の中が0じゃなかったら、右側にあるものを繰り返し実行する っていうものです。
この場合 1 って入れちゃってますから、
LATCbits.LATC13=1;
が永遠に実行されるわけです。
これは「
LATCレジスタのビット13を1にする
っていうプログラムです。
意味がわかりませんね(^^;
レジスタってなんでしょう?

マイコンにはCPUがあって、メモリーがありますよね?
プログラムはROMに書いてあって、それをCPUで実行しています。
で、他にもRAMって奴があります。
これにはプログラムは書いてないんですが、好きなようにデータを書き込んだり読み込んだりできます
LATCレジスタってのはここにあります。
つまりマイコンの中にあるRAMにデータを書き込んだのです。



LATC=100;
ってやれば100が書き込まれます。
今回は
LATCbits.LATC13=1;
って書きました。
これは「
LATCレジスタの13ビット目だけ1にする」っていうことです
LATCレジスタは0と1のデジタルが0〜15番の合計16こあります。
このうちの13番目を1にしたのです。

なぜこれでLEDがついたのでしょうか?
それは、このレジスタとポートのON・OFFが連動してるんです。
ポートCの13番に電気を流したければ LATCの13ビット目を1にすればいいんです。
逆に0にしたらLEDは消えます。

こんな感じにね。

今回はLEDをポートCの13番につないだので
ポートCの13ビット目を1にしたのです。
デジタルですから1にしたら電源電圧(今回は5Vかな)0にしたらGND(0V)になります。

これでわかりましたね(^^

 

TRISCbits.TRISC13=0;

 

これがしていることは簡単です。
ポートはほぼすべて、出力と入力が切り替えられます。
TRISCはポートCを入力にするか出力にするかを決めるレジスタです。
今回は出力ですから TRISCの13ビット目を0にして LEDのところを出力にしました。
これをやらないとLATCを1にしたってLEDは光りません。
これで、何をやってるかわかりましたね?

#include<p30f2012.h>

void main(void){
TRISCbits.TRISC13=0;
while(1)LATCbits.LATC13=1;

}

もう、さっきのプログラム見ても分かるようになったと思います。
ちなみに
#include<p30f2012.h>使うマイコンが何なのかを指定するためのものと思ってくれればOKです。
void main(void){

}
っていうのは。この中にプログラムを書くもんだと思ってくれればOKです。

じゃあ今日やったおさらい。
#include<p30f2012.h>で、使うマイコンを指定して
TRISCレジスタの13ビット目を0にして出力に設定。
そのあと、LATCの13ビット目を1にする。

これだけです。(^^
簡単でしょ?


ちなみに、何でwhileで無限に1にし続けるのかというと。
やることが無くなるとマイコンは暴走するので、無駄に1にさせてるだけです。
別にこの命令は1回実行するだけでちゃんとLEDはつくんですよ。

 

今回のまとめ・・・

1、すべてのI/Oポートは ポートCの何番 みたいに番号が振られてる。

2、ポートに対応したレジスタがあって、それに1を書き込むとポートに電気が来る

3、LATっていうのが電気を流すかどうか TRISっていうのが出力か入力か。
  今回の場合ポートCだから LATCとTRISCだった

 

 

戻る ホームへ