由于 51 单片机特殊功能寄存器,只能进行直接访问,不能进行间接访问,间接访问为80H~FFH
的RAM 空间,所以 不管是 C语言 及 汇编语言 都 不可能做到间接访问特殊功能寄存器。
或者 可以变通为 如
if (p = 0x90) { P1=0x0f };
if (p = 0xa0) { P2=0x0f };
为你解答;
C51程序设计时,只有访问数组时,才使用指针。可以在循环程序中 顺序访问数组中的数据。
特殊寄存器,都是直接访问的,没有必要采用指针 即间接方式访问。
在C51程序设计中,可以嵌入汇编代码。
不能用类似指针的方式访问特殊功能寄存器。
采用指针、数组方式访问的,是高128字节的RAM。
往P1口(0x90)写数据 0x0f,如下:
P1 = 0x0f;
即可。
当然,在程序的开头,应有头文件,才可以使用 P1。
你定义char *p访问的是内部RAM,而不是特殊功能寄存器,寄存器定义要先用SFR定义,然后再去写数据。
SFR P1 = 0x90;
main()
{
P1 = 0x0f;
whlie(1);
}