直接レジスターをアクセスする方法はありますか?

ハードウェア・レジスタは、Cの変数として割り当てることにより直接リード/ライトすることができます。タイマー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);

コンパイラはたくさんの組み込み関数内でC関数コールを多くの共通した手段により行っています。そこでは可能な限り直接レジスタのアクセスを行っています。 レジスタのロケーションはチップやおなじレジスタを操作するときでも関連するレジスタの値を変更することにより変化します。コンパイラーはこれらの違いを組み込み関数のインプリメンテーションに影響を与えないように割り当てます。 例えば、*0x85=0;とするよりset_tris_a(0)という関数を使った方がこれらのトラブルを回避することができます。