首先在51中P1的物理地址是90H,如果我不通过用《reg51.h》或者sfr之类的直接用指针,应该
也是可以对P1口进行操作的。
代码如下
void main()
{
unsigned char*p;
p=( volatile unsigned char *)(0x90);
*p=0xf0;
while(1);
}
如果上面的代码正确的话,那么8个led是一半亮一半不亮啊,纳闷的是这个程序运行的时候没一点反应,望各位大侠多多指教!!十分感谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
0x90只是SFR地址 SFR定义到SRAM中地址不一定是0x90
51是冯诺依曼结构的 AVR才是哈佛结构
- ; . est.SRC generated from: test.c
- ; COMPILER INVOKED BY:
- ; C:KeilC51BINC51.EXE test.c BROWSE DEBUG OBJECTEXTEND SRC(. est.SRC)
- NAME TEST
- ?PR?main?TEST SEGMENT CODE
- EXTRN CODE (?C_STARTUP)
- EXTRN CODE (?C?CSTPTR)
- PUBLIC main
- ; void main()
- RSEG ?PR?main?TEST
- main:
- USING 0
- ; SOURCE LINE # 1
- ; {
- ; SOURCE LINE # 2
- ; unsigned char *p;
- ; p=( volatile unsigned char *)(0x90);
- ; SOURCE LINE # 4
- MOV R3,#00H
- MOV R2,#00H
- MOV R1,#090H
- ;---- Variable 'p?040' assigned to Register 'R1/R2/R3' ----
- ; *p=0xf0;
- ; SOURCE LINE # 5
- MOV A,#0F0H
- LCALL ?C?CSTPTR
- ?C0001:
- ; while(1);
- ; SOURCE LINE # 6
- SJMP ?C0001
- ; END OF main
- END
复制代码一周热门 更多>