見出し画像

マイコンde学習しよう(プログラム記述編)


<はじめに>

プログラムはC 言語で記述しています。
特に難しい書き方はしていないつもりですので、理解に困るということは無いと思いますが、ビット操作についてはマイコンではよく使うので説明をしておきます。
プログラムの最初に、#include <avr/io.h> とすることで、プロジェクト作成時に指定したマイコンに応じたヘッダファイルを参照してくれます。
プログラムは、ioavr128da28.h で定義された名前を使って記述しています。
Microchip Studoをインストールした後、下記にあります。

C:\Program Files\Microchip\xc8\v2.31\dfp\xc8\avr\include\avr\ioavr128da28.h
(V2.31 のところはパソコンによって変わる場合があります)

プログラムを作る際に頻繁に見ることになるので、デスクトップ上に移しておくといいかもしれません。
レッスン1 で下記のように記述している部分があります。

/* SW を入力に設定 */
PORTA.DIRCLR = PIN0_bm | PIN1_bm ;
ここでPORTA.DIRCLR はレジスタ名を指しています。
レジスタとはマイコンのCPU を動かすのに必要な値を入れる場所と思って下さい。
PIN0_bm とPIN1_bm はioavr128da28.h のなかでそれぞれ、
#define PIN0_bm 0x01
#define PIN1_bm 0x02
と定義されています。
|はOR 記号なので、0x01 + 0x02 と同義です。よって、
PORTA.DIRCLR = PIN0_bm | PIN1_bm ;
は、PORTA.DIRCLR レジスタに0x03 を代入することを意味します。
また、A = B | C という書き方と、A |= B | C という書き方があった場合、= は右辺で記述したビット以外を0 にするのに対し、|= は右辺で指定したビット以外の値はそのままです。
例えば、8 ビットレジスタA の中身が0b11110000、B とC の値がそれぞれ0x01、0x02 であった場合、
A = B | C の結果は0b00000011、A |= B | C の結果は0b11110011 になります。

<割込みについて>

レッスンでは割込みを多用しています。
割込みは割込みハンドラ(ISR)により行われます。
ioavr128da28.hのなかに***_vectの名称で割込みハンドラのベクタ名が記されていて、例えばPORTAのポート割込みハンドラはPORTA_PORT_vectであり、プログラム中で下記のようにISR(ベクタ名)と記述します。

ISR(PORTA_PORT_vect)
{
 処理
}

<プログラムの書式について>

人によってプログラムの書き方は異なるかとは思いますが、本レッスンでは下記の順番で統一しています。
・include
・各種定義(グローバル変数等)
・割込み処理
・関数
・メインルーチン(MAIN)

プログラムはメインルーチンから実行されるので、目で追う際はここを見てください。

ここから先は

0字
単体で有料公開している記事を集めていますので、まとめてご覧いただくとおトクです。

AVRマイコンプログラミング入門用として、レッスン形式にまとめました。 マイコンの機能の理解にも役立ちます。 トレーニング用の基板頒布も行…

この記事が気に入ったらサポートをしてみませんか?