忍者ブログ

Fグループ電子工作講座

秋月電子SH7125ボードで始めるマイコン開発

秋月RX220サンプルプログラム解説

TEST1.c

14行目
#include"iodefine.h"
開発環境が自動生成したRX220用の設定を読み込んでいます。

16行目~19行目、22行目~26行目、42行目~47行目
C++の環境からTEST1.cを読み出す時に有効になります。
Cでプログラムを作成している場合は気にしなくて良い部分です。
Cでプログラムを作成している場合は削除しても問題なく動きます
マイコンを始めたばかりの人はこの行は気にしないでください。

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を操作しています。

用語
PODRPortOutputDataRegister ポート出力データレジスタ
出力するデータです。
1に設定するとH(5V)、0に設定するとL(0V)が出力されます。

PDRPortDirectionRegister ポート方向レジスタ
入力にするか出力にするか設定します。
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 0001に設定しています。
ポート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 0010に設定しています。
ポート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だけ入力に設定されています。

用語

PIDRPortInputDataRegister ポート入力データレジスタ
端子に入力されたデータです。
H(5V)が入力されると1に、L(0V)が入力されると0になります。

35行目
ポートHのビット2を調べて、1の時と1以外の時で動きを変えています。
1の時は36行目~41行目が実行されて、
1以外の時は43行目~48行目が実行されます。
それぞれの動きの説明は割愛。
PR

コメント

プロフィール

HN:
ぼんどF博士
性別:
男性
自己紹介:

最新コメント