データを記憶する。
また、出ました、LEDチカチカプログラム。
上のプログラムの 0x07、0x00、0x20 とかはデータです、このデータを使うには、どこかに記憶しておく必要があります、その記憶しておく場所がレジスタです、レジスタには番地が割りふられているのですが、それは16進数すなわち数値ですから、プログラマーには覚えにくい、そこで、名前が付けられています、SFRの場合は、決まった名前があって、PICのマニュアルに書かれています(下の図参照)。
では、汎用レジスタはどうでしょう、実は名前はついていません、プログラムでは、プログラマーが名前を付けて使います。
汎用レジスタの名前の事を、変数と言い、プログラマーが名前と変数の型を宣言して使います。
上のプログラムを見てください。
int count = 5; は、変数を宣言する命令です、int の部分を変数の型、count が変数の名前、= は右側を左側に入れる、5 はデータ、; が命令の終わりです。
変数の型には、いくつかの種類があり、目的に応じて使い分けます。
char(int8とも書く)8ビット(2進数8桁)の整数、char には、signed(符号付、-128~+127までの整数を扱う)、と unsigned(符号なし、0~255までの整数を扱う)、があり、char(int8)だけだと unsigned char になる。
int(int16 とも書く)16ビット(2進数16桁)の整数、int にも、signedと unsignedがあり、int(int16)だけだと signed int になる。
変数の型に扱うビット数の違う型があるのは、変数をレジスタに記憶する場合、長いビット数の型だけだと、短いビット数のデータしか扱わない場合レジスタを不必要に消費するから、効率よくデータを記憶するため。
他にもありますが、PICの電子工作程度だとこの2つで事足りる。
変数には、名前を付けねばなりません、この場合 count が変数の名前です。
変数名を付けるにあたり約束事があります。
1.使用できる文字は、半角英数字と半角_(アンダーバー)です。
2.1文字目に、数字を使っては、いけません。
3.あらかじめ決められた予約語(命令、SFRのレジスタ名、等)は、使えません。
例;momotaro ok、1kakaku 1文字目が数字だからダメ、kakaku-1 -は使えないからダメ、ono2hon ok、void 予約語だからダメ。
次に、= 5 の部分ですが、count の初期値は5にせよと言う事です(ここは、なくても良い)。
変数は、上のプログラムの count = count + 1;のようにして使います。
この式は、数学の上では間違った書き方(count が count に1を足したものと等しい・・ありえないですね)ですが、プログラミングの世界では、立派に通用します。
プログラミングの世界では、count = count + 1;を、count に1を足したものを、count に上書きすると理解します、つまり、count の内容を取り出して、それに1を加えて得た答えを、count の内容をクリアして、書き込むと言う事です。
例;count の内容は5、5に1を加えると6になり、これをcount にかきこむ、だから、count = count + 1 の処理が終わると、count の内容は6になる。
変数を使うには、宣言をしなければなりません、変数の宣言は、その関数の最初に行っておきます。
変数の宣言はなぜ必要か、変数の宣言によって、指定された型に応じて、レジスタを用意し、そのレジスタと変数名を関連付けておくのです、変数が宣言されると、汎用レジスタの最初からレジスタが変数に割り当てられていきます。
上の図を見てください、PIC16F627Aの汎用レジスタは、20hから始まります、一つのレジスタは、8ビットのデータを記憶できます、char count ; が 宣言されるとchar count ; は8ビットのデータを扱うので、20番地が確保され、20番地には count という名前が付けられます、次に、int step; が宣言されたとすれば、int step; は16ビットデータを扱うので、21番地と22番地が確保され、step という名前が付けられます、つまり、今後、count が出てきたら、20番地のレジスタを操作することになるわけです、しかし、プログラマーがこの辺の所を意識してプログラムを組む必要はありません。