资讯详情

51单片机I/O端口的读写操作

MCS-51单片机通常有4个8位I/O端口, 将数据写入相应端口的存器中, 然而,读取每个端口有两种方式:读取锁定器和读取引脚

1 读-修改-写操作

Pn(指P0,P1,P2,P3)是51汇编语言中的特殊标识符,代表Pn代表端口引脚Pn锁存器(Pn SFR)。在MCS-51指令系统中的一些指令读取锁存器的值, 有些指令读取引脚上的值。读取锁存器指令是从锁存器中读取一个值并进行处理, 将处理后的值(原值或修改后的值)重新写入锁定器。这类指令称为读写指令, 表1列出了具有该功能的指令 当目的操作数为Pn端口或Pn某个端口. 该指令读取锁存器的值.

0818b9ca8b590ca3270a3433284dd417.png

这些指令的共同特征, 就是要先平行读入Pn锁存器(非Pn在一定程度上修改端口引脚中的值,然后将其写入谚语端口的锁存器中。表1中晶体后三个指令的读写关系不够明显。事实上,他们的执行程序是:首先Pn共同读取8个锁定器的内容,然后修改指定位置, 然后又 8位一起写入锁存器。

读-修改-写指令。直接读锁存器而不是读端口引脚, 这是因为从引脚读取的数据并不一定能真正反映锁的状态 例如:若用Pn某个引脚直接驱动一个NPN三极管的基极在此端口写1 时, 三极管导通,端口引脚的电平钳位约为0.7 V (硅管) 这时,CPU若从此引脚读取数据. 将数据(应为1)误读为0;如果直接从锁定器中读取, 读取正确的数据。

理解了Pn读-修改-写指令后, 理解指令并不难PUSH Pn的含义了。它的执行过程是:读Pn引脚(非读Pn锁定器), 然后将这个值压入堆栈 以下是测试程序:

ORG 1000H

1000 75A07F MOV P2,#7FH

1003 7900 MOV R1,#00H

1005 74FF MOV A,#0FFH

1007 COA0 PUSH P2

1009 D0A0 POP P2

100B F3 MOVX @R1,A

100C 22 RET

这个程序的初衷是将FFH立即存入人外RAM地址为7F00的单元中, 但具体的操作结果与电影内外的程序密切相关。若在片中,结果与程序原意一致;若在片外,MCU执行此片外程序后 结果却把FFH错误地送到外面RAM 的1000H地址去。为什么会出错?因为在执行片外程序时, 出现在P2端口引脚上的数据是PCH (程序指针高8位,此时为10H),在执行PUSH P2指令时.读取P2引脚上的数据是10H.所

以将10H压入堆栈,紧跟POP P2指令是当前栈顶数据10H弹出并写入P2锁存器,然后执行的MOVX @R1,A指令,写入A中的数据[P2R1](此

时P2RI=1000H)地址中 有兴趣的读者可以尝试一下。

2 可靠读取Pn锁定器中数据的方法

上述程序没有实际操作意义, 在这里只是引出如何可靠地读取Pn锁定器中的数据问题。在MCS51指令系统中没有一个指令可以让汇编程序员直接读取Pn锁定数据。在表1中只有JBC Pn.Y,Label可以快速获得Pn锁定器第Y位值。由于篇幅关系,本文只介绍P2.其他锁定器的操作可参考锁定器的操作P2写出 下面是获取P2锁定器值的子程序。

GetSfrP2:PUSH IE ;保护中断允许寄存器

CLR EA ;禁止所有中断

MOV A.#0FFH

JBC P2.0,$ 5;P2锁存器位0为"1" 则清"0"并跳

;转到$ 5地址(JBC P2.1,$ 5)

CLR ACC.0 ;否则ACC.0清为"0"

JBC P2.1,$ 5

CLR ACC.1

JBC P2.2,$ 5

CLRACC2

JBC P2.3,$ 5

CLR ACC 3

JBC P2.4,$ 5

CLR ACC 4

JBC P2.5,$ 5

CLRACC 5

JBC P2.6,$ 5

CLR ACC.6

JBC P2.7,$ 5

CLR ACC.7

MOV P2,A ;恢复P2锁存器原值

POPIE ;允许寄存器恢复中断

RET

另外也可在RAM 中建立各Pn锁定器的图像.通过专用程序对Pn操作锁定器 这样,在不影响引脚状态的情况下,可以快速可靠地读取和阅读Pn锁定器的相同值。RAM 中建立P2映像为例:

EP2 Data 60H ;P2锁存器映像

WriteSfrP2: MOV EP2,A ;将A写人P2锁存器映像

MOV P2,A ;将A写人P2锁存器

RET

ReadSfrP2: MOV A,EP2 ;将P写入锁定器图像A

RET

如果确信读P端口值等于P2锁定器中的值可以简单地使用51单片机地址指针及其应用程序的操作方法PUSHP2和POP P用于保护和恢复现场程序段的指令2P2锁存器 以上三种读取Pn锁定器值的方法, 第二种方法,即在RAM 中建立Pn锁定器图像的方法,存取速度快,适台MCS-51的任何工作方法在阅读过程中都不会正确Pn三种方法中口引脚状态有任何干扰,是三种方法中最好的。

标签: 1o5o三极管三极管100b

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台