技术论文

MCS—51单片机的并行I/O端口的结构及功能

字号+ 作者:admin 来源:未知 2010-04-17 10:32 我要评论( )

1 引言 MSC—51是70年代末的产品,目前出现了很多功能更强大的单片机,但在目前市场上的产品中MSC—51仍占单片机的多半产品,且MCS—51是其他单片机的基


1   引言

MSC—51是70年代末的产品,目前出现了很多功能更强大的单片机,但在目前市场上的产品中MSC—51仍占单片机的多半产品,且MCS—51是其他单片机的基础。本文将详细讨论MSC—51的并行接口,目的是为单片机的使用者提供更好的理论依据。

2  MSC—51的并行I/O端口

2.1  I/O端口简介

I/O端口又称为I/O接口或I/O通路,是MSC—51单片机对外部实现控制和信息交换的必经之路,是一个过渡的大规模集成电路,用于信息传递过程中的速度匹配和增强单片机的负载能力。I/O端口可以实现和不同外设的速度匹配,以提高CPU的工作效率,可以改变数据的传送方式,如:内部并行总线与外部设备串行数据传送的转换。

2.2  MSC—51各并行I/O的组成

I/O端口分为串行口和并行口。串行I/O端口一次只能传送一位二进制信息;并行I/O端口一次可传送一个字节的数据。MSC—51单片机有四个并行端口,分别命名为P0、P1、P2、P3,每个端口都有八条端口线,用于传送数据或地址信息。由于每个端口的结构各不相同,因此它们在功能和用途上差别颇大。

每个I/O端口都由一个八位数据锁存器和一个八位数据缓冲器组成,其中八位数据锁存器的端口与P0、P1、P2、P3同名,属于21个特殊功能寄存器中的4个,对应内部RAM地址分别为80H、90H、A0H、B0H。需要输出数据时,8个数据锁存器用于对端口引脚上输入数据进行锁存。需要输入数据时,8个数据缓冲器用于对端口引脚上输入数据进行缓冲。另外访问并行I/O端口除了可以用字节地址访问外,还可以进行按位寻址。

3   P0综述

3.1  P0口功能

P0.7—P0.0为P0所用。P0口的访问地址是80H,位地址范围是80H—87H。由于P0口具有较大的负载能力,最多可推动8个TTL门,因此是真正的双向I/O口。

一般来说,P0口具有两种功能:第一,P0口可以作为通用I/O接口使用,P0.7—P0.0用于传送CPU的输入/输出数据。输出数据时可以得到锁存,不需外接专用锁存器,输入数据可以得到缓冲。第二,P0.7—P0.0在CPU访问片外存储器时用于传送片外存储器的低8位地址,然后传送CPU对片外存储器的读写数据。

3.2  P0口的结构

  

图1

P0是由一个输出锁存器(D型触发器),两个三态门缓冲22(控制读引脚或读锁存器),与门和多路开关MUX组成的输出控制电路,一对场效应晶体管FET构成的输出电路所组成。

P0口的多路开关的输入有两个:地址/数据输出和锁存器输出/Q,多路开关的切换由内部控制信号控制。

3.3  P0口的工作原理

3.3.1  P0口的I/O操作(通用I/O端口)

在P0口作为通用I/O端口时,控制电路中“控制”端输入为0电平。此时,多路开关MUX接入下方的锁存器的/Q端。由于“控制”输入为0,上端的FET截止。

输出操作

当内部总线信号置0时,锁存器输出/Q输出高电平,下端FET导通,由于上端FET截止,因此P0引脚输出低电平。当内部总线置1时,锁存器输出低电平,下端FET截止,由于上拉电阻的作用,P0口引脚输出高电平。

注意:由于两个场效应管均截止,使输出处于“悬浮”状态,因此当MOS负载连接时需要加上一上拉电阻,以保证端口能够正确的输出高电平。如图1所示。

输入操作

输入操作比较复杂,实际上有两种输入方式:

a.读引脚

在响应CPU的读引脚操作时,引脚的电平值通过缓冲器BUF1进入内部总线。注意,再执行这种类型的指令时,执行之前必须将端口锁存器置1.执行程序为:

MOV  P0,#0FFH;端口锁存器置1

MOV  A,P0;    读引脚

此时,下端FET截止,外部数据通过读引脚操作,把数据正确传给数据总线,若不执行MOV P0,#OFFH,则A点可能为高电平,此时下端FET导通,即P0引脚接地,无法正确输入外部电平数据。

b.读锁存器

在执行读锁存器的操作时,CPU首先完成将锁存器的输出值Q通过缓冲器BUF2读入,然后进行修改,再重新写到锁存器中去,即读锁存器一般完成的是“读—修改—写”的操作。这种类型的操作指令只有算术(INC,DEC,ADD),逻辑(ORC,XRL,ANL),位(JBC,CPL,CLR)操作指令等。采用读锁存器而不是读引脚操作可以避免一些错误,例如:(如图2)如果使用一个晶体管驱动继电器,当端口输出高电平驱动晶体管导通时,P0.x引脚的输出电平只有0.7V。如果将引脚信号读回来,就会得到一个低电平的错误结果;而采用读锁存器则会保证数据的准确。

 

图2

P0口的两种数据操作

P0口的操作分两类:字节操作和位操作。

CPU对于P0口不仅可以作为一个八位口来操作,也可以按位来操作。有关字节操作指令以MOV为例:

输出   MOV P0,A        ;P0←A

       MOV P0,#data     ;P0←data

       MOV P0,direct     ;P0←direct

输入   MOV A,P0        ;A←P0

MOV direct,P0     ;direct←P0

有关位操作指令,例如:

置位、清除  SETB   P0.i      ;P0.i←1

           CLR  P0.i         ;P0.i←0

输入,输出:MOV  P0.i,C    ;P0.i←Cy

           MOV  C,P0.i     ;Cy←P0.i

判    跳:JB  P0.i,rel        ;P0.i=1跳转

         JB  P0.i,rel         ;P0.i=0跳转

                              且清P0.i=0

逻辑运算:ANL  C,P0.