本帖最后由 2sainimu78 于 2012-1-14 18:04 编辑
MAIN: MOV A,#0FDH
MOV R0,#40H
MOVX @R0,A
MOVX A,@R0
MOV P0,A
毫无疑问 现在P0=FDH ,用KEIL查看内存 , 片外的FF40H中存有FDH , 而片外的40H中还是0
MAIN: MOV A,#0FDH
MOV R0,#40H
MOVX @R0,A
MOV P2,#0
MOVX A,@R0
MOV P0,A
通过KEIL DEBUGGING看到A的值是0 , 可在实际把程序载到片子里运行后P0=FDH
MAIN: MOV A,#0FDH
MOV R0,#40H
MOV P2,#0FFH
MOVX @R0,A
MOV P2,#0
MOVX A,@R0
MOV P0,A
KEIL 看到的A仍是0 , 实际载到片子里 运行的结果 P0=FDH
最后我又这样实验了一下
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP TT
ORG 30H
MAIN: MOV IE,#81H
SETB IT0
MOV A,#0FDH
MOV R0,#40H
MOVX @R0,A ;看看MOVX @R0,A时会不会影响P2口
MOVX A,@R0 ; P2口与P3口短接 , 一旦P2口有负跳变出现
SJMP $ ;外部中断0就被触发
TT: MOV P0,#0BFH ;进中断 , 闪灯 (P0接着LED灯)
ACALL DE
MOV P0,#0FFH
ACALL DE
MOV P0,#0BFH
RETI
DE: MOV R4,#0FAH ;延时
L2: MOV R3,#0FAH
L1: NOP
NOP
DJNZ R3,L1
NOP
DJNZ R4,L2
RET
END
程序下载运行后的结果是 P0口接的LED灯没有亮
说明 MOVX @R0,A , 或MOVX A,@R0 都不会受P2口影响
MOVX @R0,A, 应该是送入片外00~FFH字节 而不是FF00~FF40
总之我还是不敢相信KEIL会有这种错误 , 请大家看看 |