i = 13 % 10;なおこの余りの3は、「13」の一の位の数であることに注意しましょう。
| ビット数 | 符号あり | 符号なし |
|---|---|---|
| 8bit | -128〜+127 | 0〜255 |
| 16bit | -32,768〜+32,767 | 0〜65,536 |
| 32bit | -2,147,483,648〜+2,147,483,647 概ね -2×109〜+2×109 |
0〜4,294,967,296 概ね 0〜4×109 |
電圧1.3Vのように小数点以下1桁の実数値を扱いたい場合には、 10倍して整数演算すると良いでしょう。 100倍や1000倍でもかまいません。
実数を使おうとすると、以下のようなエラーになります。
*** FATAL ERROR L210: I/O ERROR ON INPUT FILE:
EXCEPTION 0021H: PATH OR FILE NOT FOUND
FILE: C:\KEIL\C51\LIB\C51FPS.LIB
char hoge(void) /* 関数の定義 */
{
...
}
main()
{
...
a = hoge(); /* 関数の呼び出し */
...
}
前半の「char hoge(void) { … }」が関数の定義、
後半の「a = hoge();」が関数呼び出しです。
なお、
char hoge(void);
main()
{
int a;
...
a = hoge; /* 関数へのポインタ (アドレス) */
...
}
もエラーにはなるとは限らないので注意してください。
hogeは関数へのポインタを返します。
関数を呼び出すhoge()とは異なります。
int b;」はエラー (Syntax error) になります。
最初の実行文「a = 0;」より前に置く必要があります。
int a;
main()
{
a = 0; // 最初の実行文
int b; // 「a = 0;」より後にあるのでエラー
以下のように、変数の宣言をブロックの先頭に書けばコンパイルできます。
int a;
main()
{
int b; // 最初の実行文「a = 0;」より前に書きます
a = 0; // 最初の実行文
>>」や「<<」自体には、
変数の値を変化させる効果はありません。
例えば、「a << 1;」を実行しても、
変数「a」の値は変化しません。
変数「a」の値を変化させたい場合は、
「a <<= 1;」または「a = a << 1;」とします。
int a; a = 1; num0= a; a << 1; num1 = a; a = a << 1; num2 = a; a <<= 1; num3 = a;
main()
{
char i;
for(i = 0; i < 10; i++){
hoge(i);
}
}
これは、あとでプログラムをデバッグしたり読み直すときに、
格段に効率が高くなるでしょう。
もちろん、このような機能に頼らなくても済むように、
インデントをきちんとする、
コメントを書くなどの工夫をしておくことをお勧めします。
プログラムを変更しても反映されない
ソースプログラムを変更し、コンパイルし、転送しても、
CPUボードの動作が変わらないことがあります。
原因は多々あります。
代表的な事例には、下記があります。
Toggle 8051 Reset Failed to Open Driver Reset Failed 指定されたファイルが見つかりません。
main()の先頭にある、CPUやI/Oポートを初期化する
プログラムを削除すると、
マイコンをリセットまたは再起動すると動かなくなります。
main()
{
// initialization
CKCON |= 0x07; OEE = 0xef;
前回動作していたとすれば、この初期化をするプログラムを動かした後で、
問題のプログラムを動かしていたためでしょう。
今回使用するマイコンでは、
main()関数を終了させると予測不可能な動作をします。
再びmain()関数を実行し始めることが多いようです。
繰り返すのは、このためでしょう。
なお、main()関数を終了させると、
一見動いているようで、一部の機能がうまく動かないなど、
不可解なトラブルを起こすことがあります。
そのため、下記の無限ループは必ず残しておいてください。
main()
{
// initialization
CKCON |= 0x07; OEE = 0xef;
led = 0; num0 = 10; num1 = 10; num2 = 10; num3 = 10;
while(1){
// write your code here
}
}
最初から、順番に手引書を読んでいくのが、結果として効率がよいことが
多いようです。
印刷
プログラムリストなどを印刷したいときは、Windowsの印刷機能を
用いれば可能です。
プリンタの設定ページを参考に設定するか、
「Brother HL-5380DN series」を選択してください。
プリンタは実験室の右前にあり、ネットワーク経由で接続されています。
なおプリンタの電源がONになっていることや用紙があることを確認しましょう。
なお、「Microsoft Office Document Image Writer」 を指定しても印刷はできません。 「CubePDF」を指定すると、 紙に印刷するのではなく、PDFファイルを作成することができます。