8051单片机并行I0口读写.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8051 单片机并行 I0 口读写 8051 单片机并行 I/0口读写 前两天看资料, 见到关于 I/O口作为输入时,要先输出 8051 单片机并行 I/0 口读写 前两天看资料, 见到关于 I/O 口作为输入时,要先输出 1 的说明,有点迷惑。今天特意查 了一些资料,费了半天劲, 虽然还没有完全弄明白,但也算 也所收获,下面就列出来,以便将来查询并进一步补充。 也所收获,下面就列出来, 以便将来查询并进一步补充。 1、作为 I/O 口使用时,输入和输出原理。作 I/O 口使用时, 在控制信号的作用下,与门关闭, V1 截止,同时多路开关 打向下边,与锁存器的反向输出端 QA相连。输出数据时,“写 锁存器”端发出脉冲,将“内部总线”上的数据写入输出锁 存器,由QA端控制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,修改锁存器的内容为 1。 MOV A, P1 MOV 20H, P1 MOV R0, P1 MOV @R0, P1 )2、为什么读之前要先写 1?从上图可知,如果不对端口置 MOV @R0, P1 ) 2、 为什么读之前要先写 1?从上图可知, 如果不对端口置 1, 端口锁存器原来的状态有可能为 0, Q 端为0, QA为1, 加到场效应管栅极的信号为 1,该场效应管 就导通对地呈现低阻抗 ,此时即使引脚上输入的信号为 1 也 会因端口的低阻抗而使信号拉低,使得外加的 1 信号读入后 不一定是 1 ,若先执行置 1 操作则可以使场效应管截止,引 脚信号直接加到三态缓冲器中,实现正确的读入。3 脚信号直接加到三态缓冲器中,实现正确的读入。 3、实际 应用P0、P1、P2、P3作I/O 口使用时,如果要从外部读取数 据,读取之前应先将端口置 1 。因初始化时,四个 I/O 均被 1。初始化为 0XFF ,所以若端口在整个程序过程中无输出时, 即输出锁存器的状态始终为 1 1。 附: 参考引脚内部结构图可知, 纵使锁存器 D 口数据在变 内部数据线) ,只要时钟触发端 clk 没有触发信号, 锁存器 中的内容永远都不会改变,也就是说,不管外部引脚信号如 何变,也不管执行过多少次读引脚操作,端口锁存器中的内 容是不会发生变化的。那么,端口内容何时变化答曰:只要 执行过一次输出,端口内容必为输出值,因为端口就是输出 的数据锁存器。 )而当端口实际应用时要不停地同外部数据 交换时,即又有输出又有读入时,如单片机与存储器 lt;?xml:namespace prefix = st1 /gt;24C16 通过 I2C 总线相 连, SCL 总是由单片机输出可不用考虑,而 SDA 则可通过 单片机向外发数据,又可以从外部读数据,假若之前发送的 最后一位数据为 0 时,此时若再读数据,因为锁存器的状态 仍为 0,则之后立即读数据时就有可能出错。所以实际操作 时,在发送数据代码之后,总会有一个单片机主动将 SDA 拉高的指令,之后再读数据时才不会出问题。 (本人浅见, 不一定正确)而当P0与P2 口作总线使用与外部并口连接时, 应该就不会有上面的问题,因为从上图可各,当作总

文档评论(0)

wangsux + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档