还有其他方式访问IO值的方式吗?
现在能够通过‘&’来获取引脚P2的地址,但是无法通过‘*’来获取或修改P2的值,sfr P2 = 0xA0;
char *pin = &P2;
*pin = 0xFF; //无法赋值
想问一下,还有其他方法来修改P2的值吗?
C51 就只能这样(或者说keil C51 只能这样,其他的编译器不知道),,你可以用sbit 定义其中的一个位,,sbit P20 = P2^0;大概是这样写,,,
指针的方式就别想了,, 51单片机中高128字节RAM和特殊程序寄存器使用相同的逻辑地址,所以应该是普通指针变量只能表示RAM中的地址,是没法操作特殊程序寄存器的。没看到过其他方法操作特殊程序寄存器,还是老老实实用sfr 定义吧 还可以这样,P2=x;然后对x就行操作。 _奶咖君_ 发表于 2024-6-10 21:30
C51 就只能这样(或者说keil C51 只能这样,其他的编译器不知道),,你可以用sbit 定义其中的一个位,,sb ...
好的谢谢,之前用sdcc的时候可以,现在就想keil能不能这样,尝试了一天也没有结果{:4_167:} soma 发表于 2024-6-10 21:42
还可以这样,P2=x;然后对x就行操作。
谢谢 xxxevery 发表于 2024-6-10 21:41
51单片机中高128字节RAM和特殊程序寄存器使用相同的逻辑地址,所以应该是普通指针变量只能表示RAM中的地址 ...
感谢回答{:4_197:} soma 发表于 2024-6-10 21:42
还可以这样,P2=x;然后对x就行操作。
这个主意不错,可以写成函数形式,通过形参赋值 _奶咖君_ 发表于 2024-6-10 21:30
C51 就只能这样(或者说keil C51 只能这样,其他的编译器不知道),,你可以用sbit 定义其中的一个位,,sb ...
所有 51(包括251)指令集,不支持指针的方式对 IO口寻址,所以,与编译器无关(硬件不支持)。
当然,也可以写个伪函数,模仿M0/M3, 用指针方式读写 IO口,只是效率很低。 LAOXU 发表于 2024-6-11 07:10
所有 51(包括251)指令集,不支持指针的方式对 IO口寻址,所以,与编译器无关(硬件不支持)。
当然, ...
哦哦 了解了 ,,在往深的 就不太清楚了,就只知道51的没法直接指针访问寄存器,{:4_167:}
页:
[1]
2