8051单片机I/0口的读写

发布者:光速思考最新更新时间:2015-10-13 来源: eefocus关键字:单片机  I0口 手机看文章 扫描二维码
随时随地手机看文章
前两天看资料,见到关于I/O口作为输入时,要先输出1的说明,有点迷惑。今天特意查了一些资料,费了半天劲,虽然还没有完全弄明白,但也算有所收获,下面就列出来,以便将来查询并进一步补充。                   

【转】8051单片机I/0口的读写

  

1、作为I/O口使用时,输入和输出原理

作I/O口使用时,在控制信号的作用下,与门关闭,V1截止,同时多路开关打向下边,与锁存器的反向输出端Q^相连。

输出数据时,“写锁存器”端发出脉冲,将“内部总线”上的数据写入输出锁存器,由Q^端控制V2,从而在引脚上反应出相应的状态。此种应用时P0端口各引脚应外接上拉电阻。

输入数据时,分为读引脚和读端口两种方式。读端口的位置就是上图中的“读锁存器”,而读引脚则是上图中的“读引脚”。至于何时读端口,何时读引脚则是根据不同的指令由硬件自动完成的,这不需要我们操心。

 

附:

读端口的指令

读端口的指令为端口内容取反这样的“读-修改-写”指令。资料称:下面这些的指令才有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)

 

读引脚的指令

如下所示,读之前应先将端口置1,即先输出1,修改锁存器的内容为1。

MOV A, P1

MOV 20H, P1

MOV R0, P1

MOV @R0, P1

 

2、为什么读之前要先写1?

从上图可知,如果不对端口置1,端口锁存器原来的状态有可能为0,Q端为0,Q^为1,加到场效应管栅极的信号为1,该场效应管就导通对地呈现低阻抗,此时即使引脚上输入的信号为1也会因端口的低阻抗而使信号拉低,使得外加的1信号读入后不一定是1,若先执行置1操作则可以使场效应管截止,引脚信号直接加到三态缓冲器中,实现正确的读入。

 

3、实际应用

P0、P1、P2、P3作I/0口使用时,如果要从外部读取数据,读取之前应先将端口置1。因初始化时,四个I/O均被初始化为0xFF,所以若端口在整个程序过程中无输出时,即输出锁存器的状态始终为1,则读数据时可不用手动置1。(附:参考引脚内部结构图可知,纵使锁存器D口数据在变(内部数据线),只要时钟触发端clk没有触发信号,锁存器中的内容永远都不会改变,也就是说,不管外部引脚信号如何变,也不管执行过多少次读引脚操作,端口锁存器中的内容是不会发生变化的。那么,端口内容何时变化?答曰:只要执行过一次输出,端口内容必为输出值,因为端口就是输出的数据锁存器。)

而当端口实际应用时要不停地同外部数据交换时,即又有输出又有读入时,如单片机与存储器24C16通过IIC总线相连,SCL总是由单片机输出可不用考虑,而SDA则可通过单片机向外发数据,又可以从外部读数据,假若之前发送的最后一位数据为0时,此时若再读数据,因为锁存器的状态仍为0,则之后立即读数据时就有可能出错。所以实际操作时,在发送数据代码之后,总会有一个单片机主动将SDA拉高的指令,之后再读数据时才不会出问题。(本人浅见,不一定正确)

而当P0与P2口作总线使用与外部并口连接时,应该就不会有上面的问题,因为从上图可知,当作总线使用时,在控制信号的作用下,与门导通,同时多路开关通过反向器与“地址/数据总线”连接,此时V1与V2的驱动电路形成反相,形成推拉式电路。在这种情况下输出时,可直接驱动电路,不需要接上拉电阻(因为V1导通)。而输入时,直接读引脚即可,不需置1。(因为输入时,地址/数据线上没有数据,V2应该截止(我认为的,此处存疑)。

P1_0=!P1_0在KEIL中编译后的反汇编指令为CPL 1.0;从上面所述可知为读端口指令(读-修改-写),所以可以在C中直接使用,如用作看门狗的清除脉冲和LED灯的闪烁等。

读端口指令似乎是要对内部的端口寄存器(P0~P4)进行改写时才进行的,所以说要先读端口锁存器状态,改写完后同时有锁存器输出。而读引脚指令没有改写寄存器。

关键字:单片机  I0口 引用地址:8051单片机I/0口的读写

上一篇:最简单的51延时
下一篇:STARTUP.A51注解

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

51单片机学习笔记(一)_总记
单片机电路仿真软件Proteus;编程软件Keil; 在Proteus中设计好电路图、在Keil中编写程序编译生成十六进制文件。 在电路图中载入该十六进制文件通过相应的程序控制电路。 51hei单片机+Proteus视频+实例+开发工具包 http://download.csdn.net/detail/leytton/7658297 http://www.51hei.com/ 文章阅读 http://www.51hei.com/mcuteach/252.html http://www.51hei.com/mcuteach/150.html 视频教程 http://www.51hei.com/sp/
[单片机]
51<font color='red'>单片机</font>学习笔记(一)_总记
单片机定时器(更准确的模式1操作)
;让LED灯每隔R1ms变化一次 COUNT EQU 9217 ;对于11.0592的晶振来说,9217相当于10ms LED EQU P1.1 ORG 0000H MOV R0,#00H DJNZ R0,$ MOV R1,00H ;用R1来作为整体计数时用 MOV SP,#60H MOV R1,#00H //MOV A,TMOD //ANL A,#11110000B //CLR ACC.3 //CLR ACC.2 //CLR ACC.1 //SETB ACC.0 //MOV TMOD,A MOV TMOD,#00000001B ;上面的写法可以用这个代替,更简练一些 MOV TH0,#(65
[单片机]
飞思卡尔凭借最新的Qorivva 汽车动力总成微控制器引领未来
2012年4月24日-底特律(SAE 2012年世界大会)讯 -飞思卡尔半导体公司(NYSE: FSL)日前宣布推出Qorivva MPC5746M多核微控制器(MCU),旨在满足全球对提高汽车动力总成系统性能日益增长的需求,同时又能符合最新的安全和应用要求。 MPC5746M是飞思卡尔首款基于新型200 MHz四核 Power Architecture®平台的高性能32位MCU产品。这种新设计拥有集成式安全校验器和并行I/O处理器,有助于优化多核平台上的软件和安全策略。MPC5746M MCU最适合内燃机、混合动力系统和传输系统;随着车辆联网程度提高,它还有助于识别和预防电子系统故障,保护车辆免受可能的软件攻击。 Qor
[汽车电子]
第十一节:PIC系列单片机低功耗模式(SLEEP)
一、进入SLEEP 执行一条 SLEEP 指令即可进入低功耗模式。当进入SLEEP后,WDT被清零,然后重新开始计数。状态寄存器F3K中的PD位被置成 0 ,TO位置成 1 ,同时振荡停止(指OSC1 端的振荡 电路 )。所有的I/O口保持原来的状态。这种工作模式功耗最低。 为使耗 电流 最小,进入SLEEP前,应使所有的I/O口处于高 电平 VDD或低电平VSS,而不应使其处于高阻态,以免产生开关电流损耗。你可以在I/O口加上拉或下拉 电阻 ,或者把I/O口都置成输出态来避免其处于高阻态(浮态)。 RT CC 端亦应置为VDD或VSS(通过上拉或下拉)。 MCLR必须处于高电平状态。 二、唤醒SLEEP
[单片机]
设计单片机日志系统
环境: 主机:WIN10 开发环境:MDK5.12 MCU:STM32F407 说明: 为单片机设计了一套简单的日志系统,通过日志系统提供的接口可以查看设备状态,并进行一些基本的调试。 日志系统通过串口输出,所以单片机需要准备一个串口供日志系统使用。注意串口发送不能用DMA发送(避免在在中断中打印日志造成的中断竞争),接收可以用DMA接收。 功能: 打开/关闭各个模块的调试输出 输入动作指令,让设备进行一些动作 打印系统运行日志 指令: H:帮助 O:调试输出全开 O1:打开1号模块,打开其他模块指令类似 F:调试输出全关 F1:关闭1号模块 I:输出系统日志 C:清除系统日志 A1:执行1号动作,执行其他动
[单片机]
高性价比Flash MCU系列【盛群半导体】
盛群推出全新精简的New Flash MCU系列,有I/O型的HT68F1x系列及A/D型的HT66F1x系列,全系列符合工业上 ﹣40℃ ~ 85℃工作温度与高抗噪声之性能要求,搭配盛群ICP (In Circuit Programming)技术方案,可轻易实现成品韧体更新,可有效提高生产效能与产品弹性。 New Flash MCU系列Program Memory为1~4K Words,SRAM由64~192 Bytes,除Crystal、ERC mode外并内建精准Internal RC oscillator,提供4/8/12Mhz 及32Khz四种频率.具有4个software SCOM输出,可直接驱动小
[单片机]
高性价比Flash <font color='red'>MCU</font>系列【盛群半导体】
单片机接口控制真彩色液晶屏方案
如果您使用的是8位\16位单片机、ARM等微控制器,并希望通过简单易操作的控制器来控制相应的液晶屏,那么请选用单片机接口控制方案。此方案提供8bit并口数据总线接口,成本低廉,技术成熟,使用便捷,是众多数字化行业性价比较高的理想选择;主要由五部分构成:输入信号、多媒体显示控制器、TFT液晶屏、逆变器及配件。   原理框图2-1   a.适用输入信号:   8bit并口数据总线,如单片机(8051、51 、96 、X86 、8088 、Z80 、DSP 等),ARM等   b.单片机接口控制方案特点:   (1) 单片机接口控制方案是杭州平望科技公司推出,采用 ALTERA 公司大规模可编程集成电路( FPGA ) E
[单片机]
<font color='red'>单片机</font>接口控制真彩色液晶屏方案
基于8xC749单片机的电动自行车智能充电器的设计与实现
    摘要: 介绍了PHILIPS公司的8xC749微处理器为核心的智能充电控制器的控制原理,讨论充电器的硬件结构和各主要组成部分的设计思想,并介绍智能充电器中的两种新技术:均衡充电和脉冲充电。结合铅酸电池对充电器的控制算法进行探讨。     关键词: 充电器  智能控制器  均衡充电  脉冲充电  8xC749单片机     随着经济的发展,越来越多的电器走进人们的日常生活,家庭使用的小容量蓄电池的比例将会逐渐增加。因此,研究如何延长蓄电池的寿命,提高蓄电池的使用效率,并设计、生产出高质量、高效率、符合家庭使用要求的充电器,有着十分重要的意义。     评估蓄电池的优劣有很多指标,其
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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