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ファイルを作成することができます。