直接レジスターをアクセスする方法はありますか?
ハードウェア・レジスタは、Cの変数として割り当てることにより直接リード/ライトすることができます。タイマー0レジスタをアクセスする例を示します:
コンパイラはたくさんの組み込み関数内でC関数コールを多くの共通した手段により行っています。そこでは可能な限り直接レジスタのアクセスを行っています。
レジスタのロケーションはチップやおなじレジスタを操作するときでも関連するレジスタの値を変更することにより変化します。コンパイラーはこれらの違いを組み込み関数のインプリメンテーションに影響を与えないように割り当てます。
例えば、*0x85=0;とするよりset_tris_a(0)という関数を使った方がこれらのトラブルを回避することができます。
#BYTE timer0 = 0x01
timer0= 128; //set timer0 to 128
while (timer0 ! = 200); // timer0 が 200になるのを待つ
また、レジスタの特定のビットを割り当てるには次のようにします。: #BIT T0IF = 0x0B.2
....
....
....
while (!T0IF); // timer0 インターラプトを待つ
レジスターは間接アドレスによってアクセスすることもできます。
次にそのような例を示します。
:
printf ("enter address:");
a = gethex ();
printf ("\r\n value is %x\r\n", *a);