原文网址:http://blog.sina.com.cn/s/blog_3e8a48bf0100cm2g.html
(1)引脚的结构图清楚吗?
以上是P0口一位的结构。以上结构说明:读引脚之前一定要对端口先置1,使mosfet V2截止,以免信号被拉低而读错,这一点很容易理解。
(2)什么指令读端口?什么指令读引脚?
一般的教科书上都会强调:读端口的指令为端口内容取反这样的“读-修改-写”指令。而读引脚之前,先置1,然后用Mov A,Px之类的指令即可。
“资料称: 这样的指令才有 Read-Modify-Write 功效
ANL (logical AND, e.G., ANL P1,A)
ORL (logical OR, e.g., ORL P2,A)
XRL (logical EX-OR, e.g., XRL P3,A)
JBC (jump if bit = 1 and clear bit, e.g., JBC P1.1, LABEL)
CPL (complement bit, e.g., CPL P3.0)
INC (increment, e.g., INC P2)
DEC (decrement, e.g., DEC P2)
DJNZ (decrement and jump if not zero, e.g., DJNZ P3, LABEL)
MOV PX.Y,C(move carry bit to bit Y of PORT X)
CLR PX.Y(clear bit Y of PORT X)
SETB PX.Y(set bit Y of PORT X)
”
(3)有没有读端口的指令(而不修改端口)?
可以说,没有直接的读端口的指令。无论之前是否置1,以下指令
MOV A, P1
MOV 20H, P1
MOV R0, P1
MOV @R0, P1
读的都是引脚,尽管不一定读准确。
要想知道端口内容,可以采用的方法是(以下代码来源于网络):
“
51端口锁存器是能读取!!仿真机才会用到
READ_PORT_P1_REG2ACC:
L_06:
L_05:
L_11: