当前位置:首页 > 单片机 > 单片机
[导读]MCS-51单片机通常有4个8位I/O端口, 向各端口的写数据均写入到对应端口的锁存器中, 但对各端口的读操作却有两个方式:读锁存器和读引脚1 读-修改-写操作 Pn(指P0,P1,P2,P3)在51汇编语言中是特殊的标识符,既代表Pn端口

MCS-51单片机通常有4个8位I/O端口, 向各端口的写数据均写入到对应端口的锁存器中, 但对各端口的读操作却有两个方式:读锁存器和读引脚

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

这些指令的一个共同特点, 就是要先并行读入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 ;将P2锁存器映像写入A
RET

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


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭