51单片机 访问特殊功能寄存器

C51的编译器,能不能用类似指针的方式访问特殊功能寄存器?
比如,我想往P1口(0x90)写数据 0x0f,以下代码是没有用的:
main()
{
char *p;
p = 0x90;
*p = 0x0f;
while(1);
}
它无法访问到特殊功能寄存器。
但我想在C语言下,用类似指针的方式访问。
有没有可能?有可能的话,要怎么弄啊?
注:可以接受嵌入汇编代码。。

由于 51 单片机特殊功能寄存器,只能进行直接访问,不能进行间接访问,间接访问为80H~FFH
的RAM 空间,所以 不管是 C语言 及 汇编语言 都 不可能做到间接访问特殊功能寄存器。
或者 可以变通为 如
if (p = 0x90) { P1=0x0f };
if (p = 0xa0) { P2=0x0f };
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-23
为你解答;

C51程序设计时,只有访问数组时,才使用指针。可以在循环程序中 顺序访问数组中的数据。

特殊寄存器,都是直接访问的,没有必要采用指针 即间接方式访问。

在C51程序设计中,可以嵌入汇编代码。本回答被网友采纳
第2个回答  2012-07-23
不能用类似指针的方式访问特殊功能寄存器。
采用指针、数组方式访问的,是高128字节的RAM。

往P1口(0x90)写数据 0x0f,如下:

P1 = 0x0f;

即可。

当然,在程序的开头,应有头文件,才可以使用 P1。
第3个回答  2012-09-21
你定义char *p访问的是内部RAM,而不是特殊功能寄存器,寄存器定义要先用SFR定义,然后再去写数据。
SFR P1 = 0x90;
main()
{
P1 = 0x0f;
whlie(1);
}