MCS-51 IO口介绍及Proteus控制仿真_机械行业_中国百科网
MCS-51 IO口介绍及Proteus控制仿真
&&& MCS-51单片机总共有P0、P1、P2、P3四个8位双向输入输出端口,每个端口都有锁存器、输出驱动器和输入缓冲器。就电路结构而言,P0口是三态双向口,P1-P3是准双向口。
&&& 4个I/O端口都能作输入输出口用,其中P0和P2通常用于对外部存储器的访问。在无片外扩展存储器的系统中,这4个端口的每一位都可以作为准双向通用I/O端口使用。在具有片外扩展存储器的系统中,P2口作为高8位地址线,P0口分时作为低8位地址线和双向数据总线。
1 MCS-51单片机I/O口介绍
&&& MCS-51单片机4个I/O端口线路设计的非常巧妙,学习I/O端口逻辑电路,不但有利于正确合理地使用端口,而且会给设计单片机外围逻辑电路有所启发。下文将详细论述MCS-51单片机I/O口的内部逻辑结构。
&&& 1.1 P0口
&&& P0 口是一个三态双向口,可作为地址/数据分时复用口,也可作为通用I/O 接口。P0.X结构图如图1所示。
图1 P0.X结构图
&&& 1.位电路结构
&&& P0口某一位的电路包括:
&&& (1)一个数据输出锁存器,用于数据位的锁存。
&&& (2)两个三态的数据输入缓冲器,分别是用于读锁存器数据的输入缓冲器和读引脚数据的输入缓冲器。
&&& (3)一个多路转接开关MUX,它的一个输入来自锁存器的 端,另一个输入为&地址/数据&信号的反相输出。MUX由&控制&信号控制,实现锁存器的输出和地址/数据信号之间的转接。
&&& (4)为了增大带负载能力,数据输出的控制和驱动电路,由两个场效应管V2和V1组成。
&&& 2.P0口工作过程分析
&&& (1)P0口用作地址/数据总线
&&& P0口作为数据/地址总线使用时,可以分为两种情况:
&&& ① 输出数据/地址。CPU内部发出控制电平&1&,打开&与门&,同时使多路开关MUX把CPU内部数据/地址线反相后与驱动场效应管T2的栅极联通。如图可以看出,输出场效应管T1、T2构成了推拉输出电路,其负载能力大大增加。
&&& ② 输入数据。输入信号从引脚通过输入缓冲器进入内部总线。
&&& (2)P0口用作通用I/O口
&&& 作通用的I/O口时,对应的&控制&信号为0,MUX打向下面,接通锁存器的 端,&与门&输出为0,上方场效应管截止,形成的P0口输出电路为漏极开路输出。
&&& ①P0口作为输出口
&&& 当P0作为输出口使用时,内部总线与P0端口同相位,写脉冲加在D触发器的CP端上,内部总线就通过端口引脚输出数据。由于输出驱动是漏极开路电路,所以需要外接上拉电阻,阻值常为5-10K欧。
&&& ②P0口作为输入口
&&& P0口作输入口使用时,有两种读入方式:&读锁存器&和&读引脚&。
&&& 当CPU发出&读锁存器&指令时,锁存器的状态由Q端经上方的三态缓冲器进入内部总线;当CPU发出&读引脚&指令时,如果锁存器的输出状态Q=1,而使下方场效应管截止,引脚的状态经下方的三态缓冲器进入内部总线。
&&& 1.2 P1口
&&& P1口为单功能的I/O口,字节地址为 90H,位地址为 90H~97H。P1口某一位的位电路结构如图2所示。
图2 P1.X结构图
&&& 1.位电路结构
&&& P1口位电路结构由以下三部分组成:
&&& (1)一个数据输出锁存器,用于输出数据位的锁存。
&&& (2)两个三态的数据输入缓冲器,分别用于读锁存器数据和读引脚数据的输入缓冲。
&&& (3)数据输出驱动电路,由一个场效应管(FET)和一个片内上拉电阻组成。
&&& (4)内部上拉电阻的作用:P1口引脚作输出引脚时,能增加驱动能力;P1口引脚作为输入引脚时,减小对外电路的 影响,同时有利于提高速度。
&&& 2.工作过程分析
&&& P1口只能作为通用的I/O口使用,具有输出、读引脚、读锁存器三种工作方式。
&&& (1)输出方式
&&& 单片机执行写P1口指令时工作于输出方式。此时数据经内部总线送入锁存器存储。如果某位的数据为1,则该位锁存器输出端Q=1& =0&V截止,从而在引脚P1.n上输出高电平;反之,如果数据为0,则Q=0& =1&V导通,在引脚P1.n上输入低电平。
&&& (2)读引脚方式
&&& 单片机执行读P1口指令,如MOV A,P1时,P1口工作于读引脚方式。此时引脚P1.n上数据经三态门1进入内部总线,并送到累加器A。
&&& 在单片机执行读引脚操作时,如果锁存器原来寄存的数据Q=0,那么将使V导通,引脚P1.n会被钳位在低电平上,此时即使P1.n外部电路的电平为1,读引脚的结果也只能是0。为避免这种情形发生,使用读引脚指令前,必须用输出指令置Q=1,使V截止。可见,P1口作为输入口时是有条件的(先写1),而输出时无条件,因此,称P1口为准双向口。
&&& (3)读锁存器方式
&&& 单片机执行&读-修改-写&类指令,P1口工作于读锁存器方式。此时先通过三态门2将锁存器Q端数据读入CPU,在ALU中进行运算,运算结果再送回端口。这里采用读Q端而不是读P1.n引脚,主要是由于引脚电平可能会受前次输出指令的影响而改变。
&&& 1.3 P2口
&&& P2口为双功能口,字节地址为A0H,位地址为A0H~A7H。P2口某一位的位电路结构如图3所示。
图3 P2.X结构图
&&& 1.位电路结构
&&& P2口某一位的电路包括:
&&& (1) 一个数据输出锁存器,用于输出数据位的锁存。
&&& (2) 两个三态数据输入缓冲器BUF1和BUF2,分别用于读锁存器数据和读引脚数据的输入缓冲。
&&& (3) 一个多路转接开关MUX,一个输入是锁存器的Q端,另一个输入是高8位地址。
&&& (4)输出驱动电路,由场效应管(FET)和内部上拉电阻组成。
&&& 2.工作过程分析
&&& (1)P2口用作地址总线
&&& 当8051单片机扩展外部存储器时,P2口输出地址的高8位,P0口输出低8位。在这种情况下,多路开关MUX在CPU的控制下,倒向内部地址线一端。此时,P2口不能作为I/O口使用。
&&& (2)P2口用作通用I/O口
&&& 当P2口用做通用I/O口时,多路开关MUX倒向锁存器输出Q端,构成了一个准双向口。
&&& 1.4 P3口
&&& 由于单片机的引脚数目有限,因此,在P3口增加了第二功能。每1位都可以分别定义为第二输入功能或第二输出功能。P3口字节地址为B0H,位地址B0H~B7H。P3口某一位的位电路结构见图4。
图4 P3.X结构图
&&& 1.位电路结构
&&& P3口某一位的电路包括:
&&& (1)1个数据输出锁存器,锁存输出数据位。
&&& (2)3个三态数据输入缓冲器BUF1、BUF2和BUF3,分别用于读锁存器、读引脚数据和第二功能数据的输入缓冲。
&&& (3)输出驱动,由与非门、场效应管(FET)和内部上拉电阻组成。
&&& 2.工作过程分析
&&& (1)P3口用作第一功能&通用I/O口
&&& 用作第一功能通用输出时,第二输出功能端应保持高电平,与非门开启。CPU输出1时,Q=1,场效应管截止,P3.x引脚输出为1;CPU输出0时,Q=0,场效应管导通,P3.x引脚输出为0。
&&& 用作第一功能通用输入时,该位的锁存器需要置1(Q=1,相当于写&1&),同时第二输出功能均应置1,场效应管截止,P3.x引脚信息通过输入BUF3和BUF2进入内部总线,完成&读引脚&操作。当P3口第一功能通用输入时,也可执行&读锁存器&操作,此时Q端信息经过缓冲器BUF1进入内部总线。
&&& (2)P3口用作第二输入/输出功能
&&& 当选择第二输出功能时,该位的锁存器需要置1(Q=1),使与非门为开启状态;当第二输出为1时,场效应管截止,P3.x引脚输出为1;当第二输出为0时,场效应管导通,P3.x引脚输出为0。
&&& 当选择第二输入功能时,该位的锁存器需要置1(Q=1),同时第二输出功能端均应置1,保证场效应管截止,P3.x引脚的信息由输入缓冲器BUF3的输出获得。P3口第二功能定义如表1所示。
表1 P3口第二功能定义表
2 Proteus电路图设计
&&& 本系统的Proteus仿真电路图如图5所示。其中,8路单刀双掷开关分别与MCS-51的P0.0-P0.3、P2.4-P2.7相连。MCS-51的P3.0-P3.1、P1.4-P1.7与8路LED相连。
图5 Proteus仿真电路图
3 程序设计
&&& 本系统程序主要是为了验证MCS-51 I/O口的输入输出功能,其中P0.0-P0.3、P2.4-P2.7为输入口,P3.0-P3.1、P1.4-P1.7为输出口。汇编程序代码如下:
4 仿真效果及结论
图6 仿真效果图
&&& 图6为本系统的仿真效果图,8路单刀双掷开关控制输入信号的变化,而8路LED灯反映了输入量的变化。对单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,或接受外部的何种控制,都是通过I/O口进行的。IO口是单片机与外界的接口,可以作为数据口,对外部存储器进行读写;可以作为地址口,用来片选外部芯片;可以作为控制口,输出控制指令,如电机控制、控制等;可以作为人机交互,如LED显示,键盘输入等。深入理解单片机I/O的内部结构及工作方式是学习单片机技术、设计单片机控制系统的基础。
收录时间:日 04:53:14 来源:e-works 作者:匿名
上一篇: &(&&)
创建分享人
喜欢此文章的还喜欢
Copyright by ;All rights reserved. 联系:QQ:***R单片机IO口结构分析-技术方案-Atmel技术社区
***R单片机IO口结构分析
发布时间: 21:34:43
来源:微信
***R的IO是真正双向IO结构,由于大部分网友都是从标准51转过来的,受标准51的准双向IO和布尔操作概念影响,没能掌握***R的IO操作,所以有必要撰文说明一下,其实采用真正双向IO结构的新型MCU很多,常用的有 增强型51,PIC,***R等。
先简单的回顾一下标准51的准双向IO结构
这种准双向IO结构的特点是
1 输出结构类似 OC门,输出低电平时,内部NMOS导通,驱动能力较强(800uA);输出高电平靠内部上拉电阻,驱动能力弱(60uA)。
2 永远有内部电阻上拉(P0口除外),高电平输出电流能力很弱,所以即使IO口长时间短路到地也不会损坏IO口
(同理,IO口低电平输出能力较强,作低电平输出时不能长时间短路到VCC)
3 作输入时,因为OC门有&线与&特性,必须把IO口设为高电平(所以按键多为共地接法)
4 作输出时,输出低电平可以推动LED(也是很弱的),输出高电平通常需要外接缓冲电路(所以LED多为共阳接法)
5 软件模拟 OC结构的总线反而比较方便-----例如 IIC总线
* P0口比较特殊,做外部总线时,是推挽输出,做普通IO时没有内部上拉电阻,所以P0口做按键输入需要外接上拉电阻。
* OC门:三极管的叫集电极开路,场效应管的叫漏极开路,简称开漏输出。具备&线与&能力,有0得0。
* 为什么设计成输出时高电平弱,低电平强----是考虑了当年流行的TTL器件输入特性
信我们大多数人都接触过51单片机,51单片机的I/O口是准双向I/O口。其实这种说法是不严谨的,我们知道,51单片机有4个I/O口,分别是P0、P1、P2、P3,这4个I/O口的结构并不完全一致,其中P0口是标准的双向I/O口,而P1、P2、P3则是准双向I/O口。
关于准双向I/O口和双向I/O口的区别请看另一篇文章&准双向I/O口和标准双向I/O口的区别&
***R单片机的I/O口是标准的双向I/O口,它的IO结构就就比51的I/O口复杂多了,单是控制端口的寄存器就有3个 PORTx(数据寄存器)、DDRx(数据方向寄存器)、PINx(端口输入引脚);另外还有一个SFIOR(特殊功能I/O寄存器),这个寄存器中的PUD位控制全部I/O口的上拉电阻是允许还是被禁止。
下图是***R单片机通用I/O口结构示意图:
从图中可以看出,每组I/O口配备三个8位寄存器,它们分别是数据方向寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x表示端口序号)。I/O口的工作方式和表现特征由这3个I/O口寄存器控制。
数据方向寄存器DDRx用于控制I/O口的输入输出方向,即控制I/O口的工作方式为输出方式还是输入方式。
当DDRx=1时,I/O口处于输出工作方式。此时数据寄存器PORTx中的数据通过一个推挽电路输出到外部引脚,如下图。***R的输出采用推挽电路提高了I/O口的输出能力,当PORTx=1时,I/O引脚呈现高电平,同时可提供输出20mA的电流;而当PORTx=0时,I/O引脚呈现低电平,同时可吸纳20mA电流。因此,***R的I/O在输出方式下提供了比较大的驱动能力,可以直接驱动LED等小功率外围器件。
当DDRx=0时,I/O处于输入工作方式。此时引脚寄存器PINx中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCU。此外,当I/O口定义为输入时(DDRx=0),通过PORTx的控制,可使用或不使用内部的上拉电阻,如下图:
***R单片机通用I/O端口的主要特点为:
&双向可独立位控的I/O口
ATmega16的PA、PB、PC、PD四个端口都是8位双向I/O口,每一位引脚都可以单独的进行定义,相互不受影响。如用户可以在定义PA口第0、2、3、4、5、6位用于输入的同时定义第1、7位用于输出,互不影响。
Push-Pull大电流驱动 (最大40mA)
每个I/O口输出方式均采用推挽式缓冲器输出,提供大电流的驱动,可以输出(吸入)20mA的电流,因而能直接驱动LED显示器。
可控制的引脚内部上拉电阻
每一位引脚内部都有独立的,可通过编程设置的,设定为上拉有效或无效的内部上拉电阻。当I/O口被用于输入状态,且内部上拉电阻被激活(有效)时,如果外部引脚被拉低,则构成电流源输出电流(uA量级)。
&DDRx可控的方向寄存器。
***R的I/O端口结构同其它类型单片机的明显区别是,***R采用3个寄存器来控制I/O端口。一般单片机的I/O仅有数据寄存器和控制寄存器,而***R还多了一个方向控制器,用于控制I/O的输入输出方向。由于输入寄存器PINx实际不是一个寄存器,而是一个可选通的三态缓冲器,外部引脚通过该三态缓冲器与MCU的内部总线连接,因此,读PINx时是读取外部引脚上的真实和实际逻辑值,实现了外部信号的同步输入。这种结构的I/O端口,具备了真正的读-修改-写(Read-Modify-Write)特性。
***R单片机通用I/O口设计注意事项:
数据寄存器PORTx和数据方向寄存器DDRx为读/写寄存器,而端口输入引脚PINx为只读寄存器。
但是需要特别注意的是,对PINx 寄存器某一位写入逻辑&1& 将造成数据寄存器相应位的数据发生&0& 与&1& 的交替变化。
当寄存器MCUCR 的上拉电阻禁止位PUD置位时所有端口引脚的上拉电阻都被禁止。
在 高阻态和输出高电平 两种状态之间进行切换时,上拉电阻使能或输出低电平这两种模式必然会有一个发生。编写程序时要注意两者的顺序。
&通常,上拉电阻使能是完全可以接受的,因为高阻状态下强高电平输出还是上拉输出都是可以接受的。
如果使用情况不是这样,可以通过置位SFIOR 寄存器的PUD 来禁止所有端口的上拉电阻。
在上拉输入和输出低电平之间切换也有同样的问题。
用户必须选择高阻态或输出高电平作为中间步骤。
不论如何配置DDxn,都可以通过读取PINxn 寄存器来获得引脚电平
PINxn寄存器的各个位与其前面的锁存器组成了一个同步器。
这样就可以避免在内部时钟状态发生改变的短时间范围内由于引脚电平变化而造成的信号不稳定。
其缺点是引入了延迟。
***R IO具备多种IO模式:
1 高阻态 ,多用于高阻模拟信号输入,例如ADC数模转换器输入,模拟比较器输入
2 弱上拉状态(Rup=20K~50K),输入用。为低电平信号输入作了优化,省去外部上拉电阻,例如按键输入,低电平中断触发信号输入
3 推挽强输出状态,驱动能力特强(&20mA),可直接推动LED,而且高低驱动能力对称.
使用注意事项:
写用PORTx,读取用PINx
实验时,尽量不要把管脚直接接到GND/VCC,当设定不当,IO口将会输出/灌入 80mA(Vcc=5V)的大电流,导致器件损坏。
作输入时:
1、通常要使能内部上拉电阻,悬空(高阻态)将会很容易受干扰。(表面看好像是51的抗干扰能力强,是因为51永远有内部电阻上拉,)
2、尽量不要让输入悬空或模拟输入电平接近VCC/2,将会消耗太多的电流,特别是低功耗应用场合------CMOS电路的特点
3、如果先前I/O口为输出状态,设置为输入状态后,必须等待1个时钟周期后才能正确的读到外部引脚PINx的值。
4、功能模块(中断,定时器)的输入可以是低电平触发,也可以是上升沿触发或下降沿触发。
5、用于高阻模拟信号输入,切记不要使能内部上拉电阻,影响精确度。例如ADC数模转换器输入,模拟比较器输入 & & &&
作输出时:
采用必要的限流措施,例如驱动LED要串入限流电阻
复位时内部上拉电阻将被禁用。如果应用中(例如电机控制)需要严格的电平控制,请使用外接电阻固定电平。
作输出的,依然维持状态不变
作输入的,一般无效,但如果使能了第二功能(中断使能),其输入功能有效。例如 外部中断的唤醒功能。***R
的C语言IO操作:
***R的C语言基于ANSI C,没有像51那样扩展了位操作(布尔操作),虽然汇编指令里面有SBI/CBI/SBIC/SBIS指令, & & & &所以需要采用 位逻辑运算 来实现,这是必须要掌握的。
&IO口和功能寄存器的操作方法一样,但对于部分功能寄存器的读写有特殊要求,请参看手册。
不必考虑代码效率的问题,如果可能,GCC***R会自动优化为SBI/CBI/SBIC/SBIS指令,跟汇编的效率是一样的。
例如 iom16.h 里面定义了 #define PA7 7&
& (这标准头文件定义了MCU的所有官方定义(包括寄存器,位,中断入口等),但管脚的第二功能没有定义)
&想PA7为1 & & & & & PORTA|=(1&&PA7); & & & & &&
想PA7为0 & & & & & PORTA&=~(1&&PA7);
想PA7取反 & & & & &PORTA^=(1&&PA7);
想检测PA7是否为1 & &if(PINA&(1&&PA7)) { };
想检测PA7是否为0 & &if!(PINA&(1&&PA7)) { };
&* & && 为左移运算符,不懂的就要好好复习C语言基础了。
注意IO操作的顺序:
& //上电默认DDRx=0x00,PORTx=0x00 输入,无上拉电阻
&假设PA口驱动LED的负极,低电平灯亮
初始化方法1:
& & & PORTA=0xFF; & &//内部上拉,高电平
& & & DDRA=0xFF; & & //输出高电平---------灯一直是灭的
初始化方法2:
& & & DDRA=0xFF; & & //输出低电平--------灯被错误点亮了
& & & PORTA=0xFF; & &//输出高电平--------马上被熄灭了,时间很短(1个指令不到uS时间),灯闪了一下,眼睛无法察觉
&但要是这个IO口是控制炸药包的点火信号呢?工控场合要考虑可靠性的问题 & &&
模拟OC结构的IIC总线的技巧:
虽然***R大多带有硬件IIC接口,但也有需要使用软件模拟IIC的情况
可以通过使用外部上拉电阻+控制DDRx的方法来实现OC结构的IIC总线。
***R单片机I/O口结构分析
&IIC的速度跟上拉电阻有关,内部的上拉电阻阻值较大(Rup=20K~50K),只能用于低速的场合
& & & & & #defineSDA & & 0 & &//PC0
& & & & & #defineSCL & & 1 & &//PC1
& & & & & (程序初始化设定 SDA和SCL都是 PORT=0,DDR=0)
& & & & & #defineSDA_0() & DDRA|=(1&&SDA) & &//输出低电平
& & & & & #defineSDA_1() & DDRA&=~(1&&SDA) & //输入,外部电阻上拉为高电平
& & & & & #defineSCL_0() & DDRA|=(1&&SCL) & &//输出低电平
& & & & & #defineSCL_1() & DDRA&=~(1&&SCL) & //输入,外部电阻上拉为高电平
& & & &使用上面的SDA_0()/SDA_1()/SCL_0()/SCL_1()宏即可,直观,而且效率跟汇编是一样的
(C)2014 Atmel Corporation
Tel: 3-8063
备案号: 苏ICP备号-2 上传我的文档
下载
收藏
该文档贡献者很忙,什么也没留下。
下载此文档
正在努力加载中...
I2C总线8位远程IO扩展口芯片PCF8574的原理与应用
下载积分:1200
内容提示:I2C总线8位远程IO扩展口芯片PCF8574的原理与应用
文档格式:PDF|
浏览次数:159|
上传日期: 21:48:52|
文档星级:
该用户还上传了这些文档
I2C总线8位远程IO扩展口芯片PCF8574的原理与应用
官方公共微信