各位大神!!懂指针的进

2020-02-04 09:13发布

    首先在51中P1的物理地址是90H,如果我不通过用《reg51.h》或者sfr之类的直接用指针,应该
也是可以对P1口进行操作的。
代码如下
void main()
{   
   unsigned char*p;
   p=( volatile unsigned char *)(0x90);
   *p=0xf0;
   while(1);
}
如果上面的代码正确的话,那么8个led是一半亮一半不亮啊,纳闷的是这个程序运行的时候没一点反应,望各位大侠多多指教!!十分感谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
34条回答
y574924080
1楼-- · 2020-02-05 05:17
jingyong 发表于 2012-4-13 13:09
不是很懂指针 但是我觉得*P是数据指针吧 不是程序指针 用汇编去理解

没有说明区别时,在keil里是通用指针,占三个字节

这个在keil的用户手册那里有说明~~~~~
shi_90
2楼-- · 2020-02-05 05:38
 精彩回答 2  元偷偷看……
墨非
3楼-- · 2020-02-05 09:47
记得 51 的128字节SFR 与RAM高128字节是地址重叠的吧
p=( volatile unsigned char *)(0x90); 指向的RAM区0x90  非SFR区的。
rookieli
4楼-- · 2020-02-05 12:52
墨非 发表于 2012-4-13 13:55
记得 51 的128字节SFR 与RAM高128字节是地址重叠的吧
p=( volatile unsigned char *)(0x90); 指向的RAM区 ...

首先谢谢大家了,你说得对,那么怎么指向SFR区呢?谢谢了
rookieli
5楼-- · 2020-02-05 16:55
NemoGu 发表于 2012-4-13 13:10
典型的没事找事
0x90只是SFR地址 SFR定义到SRAM中地址不一定是0x90

呵呵 那是多少,望大虾解答一下,谢谢了
784956936
6楼-- · 2020-02-05 18:01
应该指针指向不对,我不懂汇编,用c语言的话应该是:
*p=P0;或者p=&P0;它就表示指向P0
在给它赋值才对

一周热门 更多>