21行目void main(
void);
メイン関数のプロトタイプ宣言
「この関数が後で出てくるので使って良いですよ」という予告
引数も戻り値も設定されていません。(
関数化の回のタイプ4相当)
C言語ではある関数を使う場合、「その関数を
使う場所より上に関数を作らなければならない」という規則があります。
関数のプロトタイプ宣言をすると、関数の中身は置いといて使うことができるようになります。
プロトタイプ宣言のメリットなどは
関数化を参照のこと。
メイン関数のプロトタイプ宣言は組み込み系特有らしいですが、今のところ私はメイン関数のプロトタイプ宣言を有効活用できたことはありません。
メイン関数のプロトタイプ宣言は
削除しても問題なく動きます。
28行目~40行目メインの処理が書かれたメイン関数で、LEDが点滅する機能はこの部分に書かれています。
ここからが本番です。
メイン関数の中身
メイン関数の中身は「初期設定」部分と「実際の処理」部分に分かれます。
30行目~32行目:初期設定
34行目~39行目:実際の処理
30行目long int t;
変数tを使うために整数型(
int型)として宣言しています。
また、大きめの数字を扱うのでrx220の標準的な32bit(-32768 ~ 32767)ではなく長い(
long)64bit(-2147483648 ~ 2147483647)として宣言しています。
31行目、32行目LEDが接続された端子を初期化しています。
マイコンの端子は一般的に入力にも出力にも使うことができます。
また、様々な特殊機能に設定することもできます。
何にでも使えるのですが、何に使うのかはそれぞれ自分で設定する必要があります。
ベースボードのLEDはRX220のポートHの0と1に接続されているのでPORTHを操作しています。
用語PODR:
Port
Output
Data
Register ポート出力データレジスタ
出力するデータです。
1に設定するとH(5V)、0に設定するとL(0V)が出力されます。
PDR:
Port
Direction
Register ポート方向レジスタ
入力にするか出力にするか設定します。
0だと入力、1だと出力になります。
0x:16進数であることを表すための記号
数字の頭に0xと書くと16進数扱いになります。
PODRとPDRは共に端子1つずつ(BIT)アクセスする事も、8端子まとめて(BYTE)アクセスすることもできます。
サンプルでは8端子まとめてガバッと設定しています。
関連(
2進数と16進数)
PORTH.
PODR.
BYTE=
0x00;
ポートHの
出力値を
8端子分まとめて0に設定PORTH.
PDR.
BYTE=
0xff;
ポートHの
入出力設定を
8端子分まとめて出力に設定ポートHのビット2はスイッチが繋がっているので、出力に設定するのはマズイと思います。
PORTH.PDR.BYTE=
0xFB; //1111 1011 ビット2は入力
を推奨します。
33行目while()はカッコ()の中が0以外のときに、{}の中を繰り返し処理します。
while(1)は無限ループを表します。
34行目から39行目までを無限ループします。
35行目出力値を8端子分まとめて0000 000
1に設定しています。
ポートHの0番には
赤LEDが接続されているので、赤LEDが光ります。
それ以外の出力は0になっています。
PORTH.PODR.BYTE=0x01;
を1端子ごとの設定方法に変えると、端子0と1のみ操作する場合は
PORTH.PODR.BIT.B0=1;
PORTH.PODR.BIT.B1=0;
の様になります。
36行目for文を使って空ループをしています。
授業で習う
for文だと
{ }を使ってなにかしらの繰り返し処理を行うことがおおいですが、サンプルでは
for文のあとに
; を付けて
for文を終わらせているため何もしません。
20000の部分を変えるとLEDが光る時間が変わります。
37行目出力値を8端子分まとめて0000 00
10に設定しています。
ポートHの1番には
緑LEDが接続されているので、緑LEDが光ります。
それ以外の出力は0になっています。
PORTH.PODR.BYTE=0x02;
を1端子ごとの設定方法に変えると、端子0と1のみ操作する場合は
PORTH.PODR.BIT.B0=0;
PORTH.PODR.BIT.B1=1;
の様になります。
38行目空ループ。割愛。
program1_1.c
手順書のp.59に記載されているプログラムで「第3章終了後のプログラム集」フォルダの中にあります。
TEST1.cとの大きな違いは出力の8端子まとめて(
BYTE)アクセスから、端子1つずつ(
BIT)アクセスへの変更です。
赤光る→赤消える→緑光る→緑消える
の繰り返しです。
37行目と39行目を逆にすると
赤光る→緑光る→赤消える→緑消える
となります。
program2.c
手順書のp.61に記載されているプログラムで「第3章終了後のプログラム集」フォルダの中にあります。
やっと入力が出てきました。
スイッチがONだと赤LEDが点滅して、スイッチがOFFだと緑LEDが点滅します。
32行目PORTH.PDR.BYTE=0xfb;
入出力設定がスイッチの繋がっているビット2だけ入力に設定されています。
用語PIDR:
Port
Input
Data
Register ポート入力データレジスタ
端子に入力されたデータです。
H(5V)が入力されると1に、L(0V)が入力されると0になります。
35行目ポートHのビット2を調べて、1の時と1以外の時で動きを変えています。
1の時は36行目~41行目が実行されて、
1以外の時は43行目~48行目が実行されます。
それぞれの動きの説明は割愛。