• 検索結果がありません。

HOGE;

ドキュメント内 マイコンプログラミング講座 (ページ 30-40)

HOGE;

printf("%d\n", N);

printf("%d\n", N);

return 0;

return 0;

} }

の実行結果は?

の実行結果は?

プリプロセッサ プリプロセッサ

ヘッダーファイル ヘッダーファイル

C言語ファイルと拡張子以外の違いは無いC言語ファイルと拡張子以外の違いは無い

インクルードして使う場合は慣例的に「

インクルードして使う場合は慣例的に「.h .h」 」

主に構造体の宣言や関数のプロトタイプ宣言を複数のソース 主に構造体の宣言や関数のプロトタイプ宣言を複数のソース ファイルで共有するときに使う

ファイルで共有するときに使う

#include

#include

指定したファイルの内容を

指定したファイルの内容を#include#includeが書かれた位置に単純に挿が書かれた位置に単純に挿 入する入する

#include <headerfile.h>

#include <headerfile.h>

headerfile.h

headerfile.hをインクルードパスに設定されたディレクトリから探す をインクルードパスに設定されたディレクトリから探す

#include

#include

" "

headerfile.hheaderfile.h

" "

2008/03/04 & 2008/03/11 マイコンプログラミング講座 32

構造体と共用体 構造体と共用体

構造体 構造体

複数のメンバー変数を

複数のメンバー変数を11つにまとめるつにまとめる

共用体 共用体

11つの領域を複数のメンバーで共有するつの領域を複数のメンバーで共有する u.x = 0xFF00

u.x = 0xFF00と代入することはと代入することは u.a = 0xFF, u.b = 0x00

u.a = 0xFF, u.b = 0x00と同じと同じ

ただし ただし H8 H8 (ビッグエンディアン)の場合 (ビッグエンディアン)の場合

int x;

char a; char b;

char a; char b;

struct EXAMPLE1 { struct EXAMPLE1 {

char a;

char a;

char b;

char b;

} }

union EXAMPLE2 { union EXAMPLE2 {

int x;

int x;

struct EXAMPLE1 ex;

struct EXAMPLE1 ex;

} u; } u;

構造体と共用体 構造体と共用体

ex2 ex2 の領域を の領域を ex (struct EXAMPE1 ex (struct EXAMPE1 型 型 ) ) としてアクセスする としてアクセスする か、 か、 x (int x (int 型 型 ) ) としてアクセスするか選べる としてアクセスするか選べる

int w;

int w;

char z;

char z;

struct EXAMPLE1 ex1;

struct EXAMPLE1 ex1;

struct EXAMPLE2 ex2;

struct EXAMPLE2 ex2;

ex2.ex.a = 1;

ex2.ex.a = 1;

ex2.ex.b = 0;

ex2.ex.b = 0;

とすると、

とすると、

ex2.x

ex2.x

256 256

になるになる

w w

z z

ex1.a ex1.a ex1.b ex1.b ex1 ex1

メモリーメモリー

2008/03/04 & 2008/03/11 マイコンプログラミング講座 34

ビットフィールド ビットフィールド

構造体をビット単位で作ることができる 構造体をビット単位で作ることができる

struct TEST { struct TEST {

unsigned char B76:2;

unsigned char B76:2;

unsigned char B54:2;

unsigned char B54:2;

unsigned char B32:2;

unsigned char B32:2;

unsigned char B1 :1;

unsigned char B1 :1;

unsigned char B0 :1;

unsigned char B0 :1;

} }

全体は8bit

B76 B54 B32 B1 B0

0 1 1 0 0 0 0 1

struct TEST t;

struct TEST t;

t.B76 = 1;

t.B76 = 1;

t.B54 = 2;

t.B54 = 2;

t.B32 = 0;

t.B32 = 0;

t.B1 = 0;

t.B1 = 0;

t.B0 = 1;

t.B0 = 1;

汎用入出力ポート

汎用入出力ポート

2008/03/04 & 2008/03/11 マイコンプログラミング講座 36

汎用入出力ポート 汎用入出力ポート

ポート ポート

マイコンの足 マイコンの足

それぞれのポートにはアドレス(ポインタ)が割り当てられている それぞれのポートにはアドレス(ポインタ)が割り当てられている 1つのポートには複数の機能が割り当てられている1つのポートには複数の機能が割り当てられている

ポートコントロールレジスタに値を設定し、どの機能を使うか選択 ポートコントロールレジスタに値を設定し、どの機能を使うか選択

ex) P50

ex) P50と と WKP0、 WKP0 、 PB4と PB4 とAN0 AN0

そもそもレジスタって何よ そもそもレジスタって何よ

CPUCPUに配置された変数に配置された変数

ポインタが割り当てられているので

ポインタが割り当てられているのでCC言語からアクセスできる言語からアクセスできる

汎用入出力ポート 汎用入出力ポート

汎用入出力ポート 汎用入出力ポート

P1P1(ポート1(ポート1)、)、P2、P2、P5P5、、P7P7、P8、P8、、PBPBがあるがある 出力出力

データレジスタに設定した値に応じてポートの電圧が変わる データレジスタに設定した値に応じてポートの電圧が変わる 0→0V 0→0V 、1→5V 、 1→5V (GND ( GND を を 0Vとした場合) 0V とした場合)

入力入力

ポートの電圧に応じてデータレジスタの値が変わる(

ポートの電圧に応じてデータレジスタの値が変わる(0, 1 0, 1) )

P8 P8

大電流ポート(他より大きな電流が流れる)

大電流ポート(他より大きな電流が流れる)

実験用基板で

実験用基板でLEDLEDが接続されているが接続されている

ハードウェアマニュアルを見てみよう

ハードウェアマニュアルを見てみよう

2008/03/04 & 2008/03/11 マイコンプログラミング講座 38

LED LED を点滅させる を点滅させる

ポート ポート 8 8 を汎用出力に設定する を汎用出力に設定する

PCR8PCR8(ポートコントロールレジスタ8(ポートコントロールレジスタ8)を)を1にする1にする

出力する 出力する

PDR8PDR8(ポートデータレジスタ(ポートデータレジスタ88)に値を代入すると)に値を代入すると 値に応じた電圧が出力される

値に応じた電圧が出力される

レジスタとポートの対応 レジスタとポートの対応

(PCR8(PCR8、PDR8、PDR8)レジスタのビット)レジスタのビット0 → P800 → P80((CN2-9CN2-9))

((PCR8PCR8、、PDR8PDR8)レジスタのビット)レジスタのビット1 → P811 → P81((CN2-10CN2-10))

……

(PCR8(PCR8、PDR8、PDR8)レジスタのビット)レジスタのビット7 → P877 → P87((CN2-16CN2-16))

LED LED を点滅させる を点滅させる

C C 言語で書くと 言語で書くと

void main(void) void main(void) { {

unsigned long i;

unsigned long i;

IO.PCR8 = 0xff;

IO.PCR8 = 0xff; //P80 //P80

P87 P87

を出力に設定を出力に設定

for (;;) {

for (;;) {

IO.PDR8.BIT.B0 = 0x01;

IO.PDR8.BIT.B0 = 0x01; //P81 //P81

1 1

を出力を出力

for (i = 0; i < 100000; i++) {

for (i = 0; i < 100000; i++) {

; // ; //

何もしない(時間稼ぎ)何もしない(時間稼ぎ)

} }

IO.PDR8.BIT.B0 = 0x00;

IO.PDR8.BIT.B0 = 0x00; //P81 //P81

0 0

を出力を出力

for (i = 0; i < 100000; i++) {

for (i = 0; i < 100000; i++) {

; // ; //

何もしない(時間稼ぎ)何もしない(時間稼ぎ)

} }

2008/03/04 & 2008/03/11 マイコンプログラミング講座 40

レジスタへのアクセス

レジスタへのアクセス

ドキュメント内 マイコンプログラミング講座 (ページ 30-40)

関連したドキュメント