51单片机读端口与读引脚彻底研究(个人浅见)

发布者:salahc1983最新更新时间:2015-10-19 来源: eefocus关键字:51单片机  读端口  读引脚 手机看文章 扫描二维码
随时随地手机看文章
要弄清读端口、读引脚问题,思考以下问题:

 

(1)引脚的结构图清楚吗?

 [转载]51单片机读端口与读引脚彻底研究(个人浅见)

以上是P0口一位的结构。以上结构说明:读引脚之前一定要对端口先置1,使mosfet V2截止,以免信号被拉低而读错,这一点很容易理解。

(2)什么指令读端口?什么指令读引脚?

一般的教科书上都会强调:读端口的指令为端口内容取反这样的“读-修改-写”指令。而读引脚之前,先置1,然后用Mov A,Px之类的指令即可。 以下是从web(http://www.dzsc.com/dzbbs/20061112/200765184756359377.html)上搜集的资料:

“资料称: 这样的指令才有 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:
     CLR A ; MOV A, #0FFH
     CPL A

     JB P1.0, L_11 ; $+11 ; pin 为“1”时,锁存器肯定为“1”
       JBC P1.0, L_06; $+ 6 ; 用JBC TEST 锁存器, 为“1”时,跳    
          JBC ACC.0, L_05; $ + 5 ; == clr acc.0   / sjmp L_05
                                  用2周期/3bytes, 代替 3周期/4bytes
L_06:       SETB P1.0       ; 恢复 锁存器 为“1”
L_05:
L_11:

     JB P1.1, $+11  
     JBC P1.1, $+ 6
         JBC ACC.1, $ + 5
       SETB P1.1

     JB P1.2, $+11
     JBC P1.2, $+ 6
         JBC ACC.2, $ + 5
       SETB P1.2

     JB P1.3, $+11
     JBC P1.3, $+ 6
         JBC ACC.3, $ + 5
       SETB P1.3

     JB P1.4, $+11
     JBC P1.4, $+ 6
         JBC ACC.4, $ + 5
       SETB P1.4

     JB P1.5, $+11
     JBC P1.5, $+ 6
         JBC ACC.5, $ + 5
       SETB P1.5

     JB P1.6, $+11
     JBC P1.6, $+ 6
         JBC ACC.6, $ + 5
       SETB P1.6

     JB P1.7, $+11
     JBC P1.7, $+ 6
         JBC ACC.7, $ + 5
       SETB P1.7

     RET

我们只需注意到上面方法中巧妙运用的JB指令:

“JB P1.0, L_11 ; $+11 ; pin 为“1”时,锁存器肯定为“1””

 

(4)端口的内容什么时候发生改变?当Px口作为输入,若外部引脚信号不断变化,读取引脚值之后,

端口内容是否变化?

某网友的看法与我不谋而合:“ 由于复位后各引脚寄存器的值是明确的,而以后各引脚的寄存器的值的改变不会因为芯片外面而,影响到引脚寄存嚣的值,引脚的寄存器的值只可能由程序来改变,所以就没有必要只读寄存器的值而不改变寄存器的内容了。”

参考引脚内部结构图可知,端口就是一个锁存器,纵使锁存器D口数据在变(内部数据线),只要时钟触发端clk没有触发信号,锁存器中的内容永远都不会改变,也就是说,不管外部引脚信号如何变,也不管执行过多少次读引脚操作,端口锁存器中的内容是不会发生变化的。

     那么,端口内容何时变化?答曰:只要执行过一次输出,端口内容必为输出值,因为端口就是输出的数据锁存器。

(5)端口上的内容亦即反映到引脚上来吗?

Px口如果作为输出口,由引脚内部结构可知,端口内容是直接反映到引脚上去的。这对于P1口更为直接。而其他口,由于有第二功能,是否作为I/O口受内部控制信号的控制(注意mux)。

(6)什么时候是I/O口,什么时候是地址/数据口?

并非取决于硬件,而取决于当前的状态。例如:执行任一条指令时,这时候,在时序的不同阶段,P1口输出地址或读取指令码,这时候mux一定是倒向上面的(兴许还受控于地址范围?)。总之,系统自己会决定。但只要执行了向P1口输出的指令,锁存器中的内容一定会及时地传递到引脚上去的。

关键字:51单片机  读端口  读引脚 引用地址:51单片机读端口与读引脚彻底研究(个人浅见)

上一篇:12864实际应用的驱动程序
下一篇:c52串口通讯RS232总结

推荐阅读最新更新时间:2024-03-16 14:36

51单片机快速入门指南】8:看门狗定时器(WDT)
普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 摘自《STC89C52系列单片机器件手册》 适用型号: STC89C51,STC89C52,STC89C53,STC89C14,STC89LE51,STC89LE52,STC89LE53,STC89LE14,STC89C54,STC89C58,STC89C516,STC89C510,STC89C512,STC89C514,STC89LE54,STC89LE58,STC89LE516,STC89LE510,STC89LE512,STC89LE
[单片机]
【<font color='red'>51单片机</font>快速入门指南】8:看门狗定时器(WDT)
基于8051单片机的中断控制
(1)由中断源提出中断请求,由中断控制允许控制决定是否响应中断,如果允许响应中断,则CPU按设定好的优先级的顺序响应中断。如果是同一优先级的中断,则按单片机内部的自然优先级顺序(外部中断0→定时器0中断→外部中断l→定时器1中断→串行接口中断)响应中断。 CPU响应中断请求后,就立即转入执行中断服务程序。保护断点、寻找中断源、中断处理、中断返回,程序返回断点处继续执行。 (2)由中断允许寄存器IE控制开放和禁止中断。欲开放某一中断,则应先开放总中断允许(EA置1),然后开放相应中断的中断允许(相应位置1);若要要禁止中断,则EA置O即可。 (3)由中断优先级控制寄存器IP控制中断优先级,相应位置1,则设为高级中断,置0
[单片机]
51单片机信号交通灯系统源代码
本程序所用的原理图下载: 点这里 ,单片机芯片使用的stc89c52 /*项目:交通灯控制系统 *项目设计 交通灯用于控制行人和车辆依 次通过十字路口。 *其设计要求 如 下: 1)、首先车行道亮绿灯 45s,同时人行道亮红 45s; *45s 后,2)、车行道黄灯闪烁 3 次,亮、灭各 1s, *此时人行道 仍维持红灯; *3)、6s 后,转为 人行道亮绿灯 20s,车行道亮 红灯 20s; *4)、20s 后,再转到 第 1步,如此循环往复; 5) *51 系列单片机控制整个系统工 作; 6) 交通信号灯用 LED 代 替; */ /** *项目名称:信号交通灯控制系统; *作者:徐冉; *日期:2013-06-01-10:00
[单片机]
51单片机制作4路抢答器
此抢答器具有限时抢答,超时无效的特点,并可以对主持人未喊开始而提前抢答的犯规情况作出判断。 由于用了单片机,所以电路很简单。懒得写译码程序,也不想做驱动电路。干脆直接用了一片74LS48译码驱动器来驱动数码管。 呵呵,面包板上插一下,由于之前在Proteus中仿真过,所以直接就正常运行了~上一张实物图 左边的是STC89C52的最小系统版,P1口上接了8个LED,当时做流水灯的。直接拿来用了。P2口是显示输出,P3口接受按键。那个小的芯片就是74LS48啦~下方的是编程器+电源,STC的芯片就是编程方便,支持在线烧写,这么小巧的编程器~ 当然最重要的是程序,附上代码清单。写的比较烂,竟然上了100行,希
[单片机]
用<font color='red'>51单片机</font>制作4路抢答器
什么是指令 51单片机共有多少指令
所谓 指令 ,就是规定计算机进行某种操作的命令。 一条指令只能完成有限的功能,为使计算机完成一定的或者复杂的功能,就需要一系列指令。一般来说,一台计算机的指令越丰富,寻址方式越多,且每条指令的执行速度越快,则它的总体功能就越强。 我们学习的80C51单片机共有111条指令,这111条指令共有七种寻址方式。其中: 数据传送类指令 29条 算术运算类指令 24条 逻辑运算及移位类指令 24条 控制转移类指令 17条 位操作指令 17条 这111条指令的具体功能我们在后面的课程中将会逐条的与大家进行分析。
[单片机]
51单片机:D/A数模转换实验
一、实验内容 利用0832 D/A数模转换输出方波。 二、仿真图 三、代码 C语言实现: 汇编实现: CS0832 EQU 0FFE8H ORG 0000H LJMP START ORG 0030H START: MOV SP,#60H MOV DPTR,#CS0832 SETB P1.0 CLR P1.1 SETB P1.2 MLOOP: MOV A,#00H ;方波 MOVX @DPTR,A LCALL DELAY MOV A,#0FFH MOVX @DPTR,A LCALL DELAY SJMP
[单片机]
<font color='red'>51单片机</font>:D/A数模转换实验
基于51单片机驱动S8330E C语言程序
//S8330E是日本精工的一个电源IC,需要软件调节电压输出值 #include reg52.h #include intrins.h sbit DIN = P1^0; sbit CLK = P1^1; sbit STB = P1^2; sbit Key = P3^4; sbit LED = P1^7; void Delay(unsigned int MS) { unsigned char us,usn; while(MS!=0) { usn = 2; //for 12M while(usn!=0) { us=0x
[单片机]
8051单片机供水系统水位控制的硬件电路设计
供水系统水位控制原理 下图是水塔水位控制原理图。图中虚线表示允许水位变化的上下限。在正常情况下,应保持水位在虚线范围之内,为此,在水塔的不同高度安装固定不动的三根金属棒,以感知水位变化情况。其中A棒处于下限水位以下,C棒处于上限水位,B棒在下限水位处。A棒接+5V电源,B棒、C棒各通过一个电阻与模拟地相连。 水塔由电机带动水泵供水,单片机控制电机转动以达到对水位控制的目的。供水时,水位上升,当达到上限时,由于水的导电作用,B棒、C棒连通+5V电源,因此,b、c两端均为高电平“1”状态。这时,应停止电机和水泵的工作,不再给水塔供水。 当水位降到下限时,B棒、C棒都不能与A棒导通,因此,b、c两端均为“0”状态。这时,应启动电机,
[单片机]
80<font color='red'>51单片机</font>供水系统水位控制的硬件电路设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved