搜档网
当前位置:搜档网 › 经典51单片机IO端口的四种输入输出模式详细介绍11

经典51单片机IO端口的四种输入输出模式详细介绍11

经典51单片机IO端口的四种输入输出模式详细介绍11
经典51单片机IO端口的四种输入输出模式详细介绍11

51单片机IO端口的四种输入输出模式(by wuleisly)

单片机I O口的使用对所有单片机玩家来说都是“家常便饭”,但是你真的了解I O 口吗?你真的能按你的需要配置I O口吗?

一、准双向口输出

准双向口输出类型可用作输出和输入功能而不需重新配置

口线输出状态。这是因为当口线

输出为1时驱动能力很弱,允许外部装置将其拉低。当引脚输出为低时,它的驱动能力很强,

可吸收相当大的电流。(准双向口有3个上拉晶体管适应不同的需要)

准双向口读外部状态前,要先锁存为…1?,才可读到外部正确的状态.

二、强推挽输出

推挽输出配置的下拉结构与开漏输出以及准双向口的下拉

结构相同,但当锁存器为1时提供持续的强上拉。推挽模式一般用于需要更大驱动电流的情况。

三、仅为输入(高阻)

输入口带有一个施密特触发输入以及一个干扰抑制电路。

四、开漏输出配置(若外加上拉电阻,也可读)

当口线锁存器为0时,开漏输出关闭所有上拉晶体管。当作为一个逻辑输出时,这种配置方式必须有外部上拉,一般通过电阻外接到V c c。如果外部有上拉电阻,开漏的I/O口还可读外部状态,即此时被配置为开漏模式的I/O口还可作为输入I/O口。这种方式的下拉与准双向口相同。

开漏端口带有一个施密特触发输入以及一个干扰抑制电路。

关于I/O口应用注意事项:

1.有些是I/O口由低变高读外部状态时,读不对,实际没有损坏,软件处理一下即可。

因为1T的8051单片机速度太快了,软件执行由低变高指令后立即读外部状态,此时由于实际输出还没有变高,就有可能读不

对,正确的方法是在软件设置由低变高后加1到2个空操作指令延时,再读就对了.

有些实际没有损坏,加上拉电阻就O K了

有些是外围接的是NP N三极管,没有加上拉电阻,其实基极串多

大电阻,I/O口就应该上拉多大的电阻,或者将该I/O口设置为强

推挽输出.

2.驱动L E D发光二极管没有加限流电阻,建议加1K以上的限流电阻,至少也要加470欧姆以上

做行列矩阵按键扫描电路时,实际工作时没有加限流电阻,实际工作时可能出现2个I/O口均输出为低,并且在按键按下时,短接在一起,我们知道一个C MO S电路的2个输出脚不应该直接短接在一起,按键扫描电路中,此时一个口为了读另外一个口的状态,必须先置高才能读另外一个口的状态,而8051单?片机的弱上

拉口在由0变为1时,会有2时

钟的强推挽高输出电流输出到另外一个输出为低的I/O口,就有

可能造成I/O口损坏.建议在其中的一侧加1K限流电阻,或者在

软件处理上,不要出现按键两端的I/O口同时为低.

一种典型三极管控制电路:

如果用弱上拉控制,建议加上拉电阻R1(3.3K~10K),如果不加上拉电阻R1(3. 3K~10K),

建议R2的值在15K以上,或用强推挽输出。

典型发光二极管控制电路:

推挽/强上拉口,用拉电流驱动发光二极管

弱上拉/准双向口,用灌电流驱动发光二极管限流电阻尽量大于1K,最小不要小于470Ω

混合电压供电系统3V/5V器件I/O口互连

5V单片机连接 3.3V器件时,为防止 3.3V器件承受不了5V,可将相应的5V单片机I/O口先串一个330Ω的限流电阻到 3.3V器件I/O口,程序初始化时将5V器件的I/O口设置成开漏配置,断开内部上拉电阻,相应的 3.3V器件I/O口外部加10K上拉电阻到 3.3V器件的V c c,这样高电平是 3.3V,低电平是

0V,输入输出一切正常。

3V单片机连接5V器件时,为防3V器件承受不了5V,如果相应的I/ O口是输入,可在该I/O口上串接一个隔离二极管,隔离高压部分。外部信号电压高于单片机工作电压时截止,I/O口因内部上拉到高电平,所以读I/O口

状态是高电平;外部信号电压为低时导通,I/O口被钳位在0.7V,小于0.8V时单片机读I/O口状态是低电平。

3V单片机连接5V器件时,为防止3V器件承受不了5V,如果相应的I/O

口是输出,可用一个N P N三极管隔离

如何让I/O口上电复位时为低电平

普通8051单片机上电复位时普通I/O口为弱上拉高电平输出,而很多实际应用要求上电时某

些I/O口为低电平输出,否则所控制的系统(如马达)就会误动作,现S T C12系列单片机由于既有弱

上拉输出又有强推挽输出,就可以很轻松的解决此问题。

现可在S T C12系列单片机I/O口上加一个下拉电阻(1K/2K/3 K),这样上电复位时,虽然单片

机内部I/O口是弱上拉/高电平输出,但由于内部上拉能力有限,而外部下拉电阻又较小,无法

将其拉高,所以该I/O口上电复位时外部为低电平。如果要将此I/O口驱动为高电平,可将此I/O

口设置为强推挽输出,而强推挽输出时,I/O口驱动电流可达20

m A,故肯定可以将该口驱动为高

电平输出。

PW M输出时I/O口的状态(针对STC系列)

51单片机IO口使用经验绝对经典

绝对经典 按常规,在51端口(P1、P2、P3)某位用作输入时,必须先向对应的锁存器写入1,使FET截止。一般情况是这样,也有例外。所谓IO口内部与电源相连的上拉电阻而非一常规线性电阻,实质上,该电阻是由两个场效应管并联在一起:一个FET为负载管,其阻值固定;另一个FET 可工作在导通或截止两种状态(姑且叫可变FET)。使其总电阻值变化近似为0或阻值较大(20千欧--40千欧)两种情况。当和端口锁存器相连的FET由导通至截止时,该阻值近似为0,可将引脚快速上拉至高电平;当和锁存器相连的FET由截止至导通时,该电阻呈现较大阻值,限制了和端口锁存器相连的FET的导通电流。 51I/O口作为输入端和外部信号相连有时必须考虑上述特性,本人在设计LTP1245热敏打印头驱动板时,资料上推介热敏头“抬头”和“纸尽”信号由头中内嵌检测电路提供,MCU IO口采集该信号时需加缓冲(如74HC04)。当时本人认为51IO口上拉电阻为一较大阻值的固定电阻,对输入信号无影响,故未加缓冲电路(为降低成本能省则省)。可到调试PCBA时发现,“抬头”、“纸尽”状态变化时,采集信号只在3.90V--5.10V之间变化,应为低电平时无低电平输出。究其原因,打印头的“抬头”、“缺纸”信号输出为一光敏三极管的集电极输出,集电极和电源间原有一个负载电阻,饱和导通设计工作电流仅为450--1100微安,当该集电极直接和MCU IO口某位相连时,IO口上拉电阻和光敏三极管负载电阻并联,当IO口上拉时,上拉电阻极小致使光敏三极管直流负载线斜率陡然增大,工作状态进入放大区而非希望的饱和区。当时在不改硬件的条件下,我几乎无计可施,甚至想到了准备烧断IO口上拉电阻(前两天我曾发帖求救怎么烧断IO 口上拉电阻的方法)后来听网友建议该方法风险较大,所以总想用软件方法解决。 后来我的解决方法是:采样信号前不是先向对应锁存器写1,而是先写入0,再写入1,延时约10毫秒以上,然后再采样(当然此法只适应于采样频率很低的情况)。这样作的目的是:先写入0迫使IO口上拉电阻先为一较大值,此时如果外部光敏三极管本来处于截止状态,当完成上述一系列锁存器的写入过程后光敏管仍为截止态,IO口正确采样到高电平;此时如果外部

51单片机各引脚及端口详解

51单片机各引脚及端口详解 51单片机引脚功能: MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图: l P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。 l P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。 l P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。 l P3.0~P3.7 P2口8位双向口线(在引脚的10~17号端子)。 这4个I/O口具有不完全相同的功能,大家可得学好了,其它书本里虽然有,但写的太深,对于初学者来说很难理解的,我这里都是按我自已的表达方式来写的,相信你也能够理解的。 P0口有三个功能: 1、外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口) 2、外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口)

3、不扩展时,可做一般的I/O使用,但部无上拉电阻,作为输入或输出时应在外部接上拉电阻。 P1口只做I/O口使用:其部有上拉电阻。 P2口有两个功能: 1、扩展外部存储器时,当作地址总线使用 2、做一般I/O口使用,其部有上拉电阻; P3口有两个功能: 除了作为I/O使用外(其部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。 有部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的, 即:编程脉冲:30脚(ALE/PROG) 编程电压(25V):31脚(EA/Vpp) 接触过工业设备的兄弟可能会看到有些印刷线路板上会有一个电池,这个电池是干什么用的呢?这就是单片机的备用电源,当外接电源下降到下限值时,备用电源就会经第二功能的方 式由第9脚(即RST/VPD)引入,以保护部RAM中的信息不会丢失。 在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输 入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。 ALE 地址锁存控制信号:在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。参见图2(8051扩展2KB EEPROM电路,在图中ALE与4LS373锁存器的G相连接,当CPU对外部进行存取时,用以锁住地址的低位地址, 即P0口输出。 由于ALE是以晶振六分之一的固定频率输出的正脉冲,当系统中未使用外部存储器时,ALE 脚也会有六分之一的固定频率输出,因此可作为外部时钟或外部定时脉冲使用。

单片机io口理解

【转】单片机IO口设置推挽和开漏的区别(转自网易博客冷水泡茶的日志)2010-09-28 13:43 单片机IO口设置推挽和开漏的区别 一般情况下我们在电路设计编程过程中设置单片机,大多是按照固有的模式去做的,做了几年这一行了,也没碰到过什么问题。昨天就遇到了这样一个问题,电路结构如图一,在这种情况下STC单片机与410单片机通讯是没问题的 但是与PC就无法通讯了,STC收不到PC的命令,以前410的位置是用的STC的片子一直没问题,我想也许是驱动能力不够,在410TX端加了上拉,不过没起作用。 用示波器监视串口得到面的波形 这说明sp3232下拉得不够,于是加了下拉,还是没起作用。又把410端口内部的上拉去掉,结果还是一样。 最后请教老师,在410程序里将TX的工作方式由推挽式改为开漏式,一切ok~!

从网上查了推挽和开漏的区别,放在这里免得以后再到处找了,给自己保存了 我们先来说说集电极开路输出的结构。集电极开路输出的结构如图1所示,右边的那个三极管集电极什么都不接,所以叫做集电极开路(左边的三极管为反相之用,使输入为“0”时,输出也为“0”)。对于图1,当左端的输入为“0”时,前面的三极管截止(即集电极C跟发射极E之间相当于断开),所以5V电源通过1K电阻加到右边的三极管上,右边的三极管导通(即相当于一个开关闭合);当左端的输入为“1”时,前面的三极管导通,而后面的三极管截止(相当于开关断开)。 我们将图1简化成图2的样子。图2中的开关受软件控制,“1”时断开,“0”时闭合。很明显可以看出,当开关闭合时,输出直接接地,所以输出电平为0。而当开关断开时,则输出端悬空了,即高阻态。这时电平状态未知,如果后面一个电阻负载(即使很轻的负载)到地,那么输出端的电平就被这个负载拉到低电平了,所以这个电路是不能输出高电平的。 再看图三。图三中那个1K的电阻即是上拉电阻。如果开关闭合,则有电流从1K电阻及开关上流过,但由于开关闭其它三个口带内部上拉),当我们要使用输入功能时,只要将输出口设置为1即可,这样就相当于那个开关断开,而对于P0口来说,就是高阻态了。 对于漏极开路(OD)输出,跟集电极开路输出是十分类似的。将上面的三极管换成场效应管即可。这样集电极就变成了漏极,OC就变成了OD,原理分析是一样的。 另一种输出结构是推挽输出。推挽输出的结构就是把上面的上拉电阻也换成一个开关,当要输出高电平时,上面的开关通,下面的开关断;而要输出低电平时,则刚好相反。比起OC或者OD来说,这样的推挽结构高、低电平驱动能力都很强。如果两个输出不同电平的输出口接在一起的话,就会产生很大的电流,有可能将输出口烧坏。而上面说的OC或OD输出则不会有这样的情况,因为上拉电

51单片机基础知识及期末复习

51单片机简答题部分(经典) 1、什么叫堆栈? 答:堆栈是在片内RAM中专门开辟出来的一个区域,数据的存取是以"后进先出"的结构方式处理的。实质上,堆栈就是一个按照"后进先出"原则组织的一段内存区域。 2、进位和溢出? 答:两数运算的结果若没有超出字长的表示范围,则由此产生的进位是自然进位;若两数的运算结果超出了字长的表示范围(即结果不合理),则称为溢出。 3、在单片机中,片内ROM的配置有几种形式?各有什么特点? 答:单片机片内程序存储器的配置形式主要有以下几种形式:(1)掩膜(Msak)ROM型单片机:内部具有工厂掩膜编程的ROM,ROM中的程序只能由单片机制造厂家用掩膜工艺固 化,用户不能修改ROM中的程序。掩膜ROM单片机适合于 大批量生产的产品。用户可委托芯片生产厂家采用掩膜方法 将程序制作在芯片的ROM。 (2)EPROM型单片机:内部具有紫外线可擦除电可编程的只读存储器,用户可以自行将程序写入到芯片内部的EPROM 中,也可以将EPROM中的信息全部擦除。擦去信息的芯片 还可以再次写入新的程序,允许反复改写。 (3)无ROM型单片机:内部没有程序存储器,它必须连接程序存储器才能组成完整的应用系统。 无ROM型单片机价格低廉,用户可根据程序的大小来选择外接 程序存储器的容量。这种单片机扩展灵活,但系统结构较复 杂。 (4)E2ROM型单片机:内部具有电可擦除叫可编程的程序存储器,使用更为方便。该类型目前比较常用 (5)OTP(One Time Programmable)ROM单片机:内部具有一次可编程的程序存储器,用户可以在编程器上将程序写入片内程 序存储器中,程序写入后不能再改写。这种芯片的价格也较 低。 4、什么是单片机的机器周期、状态周期、振荡周期和指令周期?它们之间是什么关系? 答:某条指令的执行周期由若干个机器周期(简称M周期)构成,一个机器周期包含6个状态周期(又称时钟周期,简称S周期),而一个状态周期又包含两个振荡周期(P1和P2,简称P周期)。也就是说,指令执行周期有长有短,但一个机器周期恒等于6个状态周期或12个振荡周

51系列单片机P0端口具体讲解

有关单片机P0口具体讲解 图1 (一)在我们讲解P0端口之前我们首先梳理一下各个端口有什 么不同之处: P0口有三个功能: 1、外部扩展存储器时,当做数据(Data)总线(如图1中的D0~D7为数据总线接口) 2、外部扩展存储器时,当作地址(Address)总线(如图1中的A0~A7为地址总线接口) 3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻(后面将详细介绍)。 P1口只做I/O口使用:其内部有上拉电阻。 P2口有两个功能: 1、扩展外部存储器时,当作地址总线使用(如图1中的A8~A15为地址总线接口) 2、做一般I/O口使用,其内部有上拉电阻; P3口有两个功能: 除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。

图2(注:该图只是P0口的一位,也就是说P0口有8个相同的这样的结构) 图3

(二)由图2可以看出每个P0口都有这些元件: 一个锁存器,两个三态输入缓冲器和一个输出驱动电路组成 在访问外部存储器时,P0是一个真正的双向口,当P0输出地址/数据信息时,CPU内部法控制电平“1”来打开上面的与门,又使模拟开关MUX把地址/数据信息经过反相器和T1接通(我们称上面的场效应晶体管FET为T1,下面的场效应管FET为T2); 输出的地址/数据信息既通过与门去驱动T1,又通过反相器去驱动T2,是两个FET构成推拉输出电路; 1.当P0口作为外部扩展存储器的数据地址总线时: ●若地址数据信息为“0”,那么这个信号就使得T1截止,使T2导通(经过反反相器作 用使得T2接收到的信号为“1”,根据场效应晶体管的特性,T2导通),若T2导通,那么T2的上下两个N极就导通,而发射极(下面的N极)接地信号则为“0”,这样P0口就相当于接收到了“0”信号; ●若地址数据信息输入“1”,则该信号使T2截止,使T1导通,在T1导通情况下,T1 的上下N极导通,使得VCC与P0相同,从而输出高电平,即“1”信号; ●若从P0口输入信号,信号从引脚通过输入缓冲器进入内部总线; 2.当P0口作为一般I/O口使用时: ●CPU内部发布控制信号“0”,封锁与门,使得T1截止,同时使模拟开关MUX把锁存 器的非Q端与T2端的栅极接通; ●在P0口作为输出时,由于非Q端和T2的倒相作用,那么内部总线上的信息与到达P0 口上的信息是同相的,只要写脉冲加到锁存器的CL端,内部总线上的信息就会P0的引脚上; ●但是由于此时T2为漏极开路输出,所以要外接上拉电阻。 当P0作为输入时,由于该信号既加到T2又加到下面的三态缓冲器。现在我们假设我们刚刚输出的信号为“0”,也就是输入锁存器的数据为“0”,经过非Q达到T2使T2导通,这样P0引脚上的信号就被T2钳在“0”电平上,这样就使输入的“1”无法读入。那么我们就必须在输入信号前,应该先向锁存器Q端写“1”,非Q就为“0”,使T2截止,这就是所谓的“准双向口”的解释。但是在访问片外存储器时,CPU会自动向锁存器Q写入“1”,所以对用户而言P0口作为数据/地址总线时,是一个真正的双向口。

51单片机IO口使用DE 经验

DANPAINJI 51单片机I/O口使用经验 字体大小: 小中大作者:来源:日期:2006-08-18 点击:364 按常规,在51端口(P1、P2、P3)某位用作输入时,必须先向对应的锁存器写入1,使FET 截止。一般情况是这样,也有例外。所谓IO口内部与电源相连的上拉电阻而非一常规线性电阻,实质上,该电阻是由两个场效应管并联在一起:一个FET为负载管,其阻值固定;另一个FET可工作在导通或截止两种状态(姑且叫可变FET)。使其总电阻值变化近似为0或阻值较大(20千欧--40千欧)两种情况。当和端口锁存器相连的FET由导通至截止时,该阻值近似为0,可将引脚快速上拉至高电平;当和锁存器相连的FET由截止至导通时,该电阻呈现较大阻值,限制了和端口锁存器相连的FET的导通电流。 51I/O口作为输入端和外部信号相连有时必须考虑上述特性,本人在设计LTP1245热敏打印头驱动板时,资料上推介热敏头“抬头”和“纸尽”信号由头中内嵌检测电路提供,MCU IO口采集该信号时需加缓冲(如74HC04)。当时本人认为51IO口上拉电阻为一较大阻值的固定电阻,对输入信号无影响,故未加缓冲电路(为降低成本能省则省)。可到调试PCBA时发现,“抬头”、“纸尽”状态变化时,采集信号只在3.90V--5.10V之间变化,应为低电平时无低电平输出。究其原因,打印头的“抬头”、“缺纸”信号输出为一光敏三极管的集电极输出,集电极和电源间原有一个负载电阻,饱和导通设计工作电流仅为450--1100微安,当该集电极直接和MCU IO口某位相连时,IO口上拉电阻和光敏三极管负载电阻并联,当IO口上拉时,上拉电阻极小致使光敏三极管直流负载线斜率陡然增大,工作状态进入放大区而非希望的饱和区。当时在不改硬件的条件下,我几乎无计可施,甚至想到了准备烧断IO口上拉电阻(前两天我曾发帖求救怎么烧断IO口上拉电阻的方法)后来听网友建议该方法风险较大,所以总想用软件方法解决。 后来我的解决方法是:采样信号前不是先向对应锁存器写1,而是先写入0,再写入1,延时约10毫秒以上,然后再采样(当然此法只适应于采样频率很低的情况)。这样作的目的是:先写入0迫使IO口上拉电阻先为一较大值,此时如果外部光敏三极管本来处于截止状态,当完成上述一系列锁存器的写入过程后光敏管仍为截止态,IO口正确采样到高电平;此时如果外部光敏三极管基极电流足够大有容许三极管饱和导通的条件(即基极吸收到充分光强),虽然采样一开始集电极被人为钳位在低电平,但当下一时隙和IO口相连的锁存器被写入1时,在IO口上拉电阻中的可变FET导通之前,光敏三极管已先进入饱和态而又把引脚钳位在实际输出的低电平,此时MCU IO口的上拉电阻仍为较大阻值,同时和原光敏三极管集电极负载电阻并联(考虑并联后阻值变化,原光敏三极管集电极负载电阻需增大到适当阻值)充当饱和导通后光敏三极管的负载电阻,事实上,IO口上拉电阻中的可变FET未来得及导通又被截止了,由此又保证了信号低电平的正确采样。经过波形测试问题得

51单片机的基本端口操作

第一章51单片机的基本端口操作 主要对单片机最简系统在实际应用中的使用方法,从简单到复杂地实现单片机最简系统的基本功能。 “点亮最简单的单片机系统”从单片机原理上介绍单片机的基本组成和最简单系统的典型电路,以及有关单片机C51编程方法和例程。 “更加明亮的小灯”从功能上介绍如何使LED发光稳定,从原理上介绍单片机I/O口的电气特性和使用方法。 “定时亮灭的小灯”介绍如何使LED灯定时亮、灭,从单片机原理上介绍定时器的使用和编程方法。 “小灯亮灭的人工控制”从功能上介绍如何通过按键控制LED灯的亮灭,从单片机原理上介绍单片机中断的使用和编程方法。 先复习下Keil 51的操作。 1.1点亮最简单的单片机系统 常用MCS-51系列单片机引脚功能说明 引脚定义引脚功能功能说明 Vcc +5V电源电源电压 Vss 地电路接地端 P0.0-P0.7 通道0 8位漏极开路的双向I/O通道 P1.0-P1.7 通道1 8位拟双向I/O通道

P2.0-P2.7 通道2 8位拟双向I/O通道 P3.0 RXD 串行输入口 P3.1 TXD 串行输出口 P3.2 INT0 外部中断0输入口 P3.3 INT1 外部中断1输入口 P3.4 T0 定时器/计数器0外部时间脉冲 输入端 P3.5 T1 定时器/计数器1外部时间脉冲 输入端 P3.6 WR 外部数据存储器写脉冲 P3.7 RD 外部数据存储器读脉冲 RST/VPD 复位输入信号该引脚上有2个机器周期的高电 平可以实现复位操作,在掉电情 况下将只给片内RAM供电 ALE/PROG 地址锁存有效 信号主要作用是提供一个适当的定时信号 PSEN 程序选通有效 信号低电平时,指令寄存器的内容读到数据总线上 EA/Vpp 片选使能当保持TTL高电平时,8051执行 内部ROM的指令;当使TTL为低 电平时,从外部程序存储器取出 所有指令

最新51单片机的基本端口操作

51单片机的基本端口 操作

第一章51单片机的基本端口操作 主要对单片机最简系统在实际应用中的使用方法,从简单到复杂地实现单片机最简系统的基本功能。 “点亮最简单的单片机系统”从单片机原理上介绍单片机的基本组成和最简单系统的典型电路,以及有关单片机 C51编程方法和例程。 “更加明亮的小灯”从功能上介绍如何使LED发光稳定,从原理上介绍单片机I/O口的电气特性和使用方法。 “定时亮灭的小灯”介绍如何使LED灯定时亮、灭,从单片机原理上介绍定时器的使用和编程方法。 “小灯亮灭的人工控制”从功能上介绍如何通过按键控制LED灯的亮灭,从单片机原理上介绍单片机中断的使用和编程方法。 先复习下Keil 51的操作。 1.1点亮最简单的单片机系统 常用MCS-51系列单片机引脚功能说明

提问:什么是单片机系统、 提问:单片机中晶振有什么作用? 回答:单片机访问一次存储器的时间,称之为一个及其周期, 是一个时间基准。一个机器周期包括12 个时钟周期。如果一个单片机选择了12MHz 晶振,它的时钟周期是 1/12us ,它的一个机器周期是 12X (1/12us ),也就是 1us 。 若是12MHz 的晶振,当单片机中定时 /计数器的数值加 1时,实际经过的时间就是 1us 。 提示:晶振电路,复位电路

基本电路图: 发光二极管导通压降通常为1.7V-1.9V; 为什么要接电阻? 电路原理及器件选择? 89C51:单片机,控制发光二极管亮灭 OSC:晶振,在本例中选择12MHz的立式晶振C3,C2:晶振电路的起振电容,容值为22pF

L1:发光二极管 R1:限流电阻,阻值为1k欧 地址分配和连接? P1.0:与发光二极管电路相连,控制LED发光二极管阴极的电平高低 RESET:复位引脚 X1,X2:单片机的晶振引脚 程序设计: 延时程序:我们先不使用单片机的定时器,而是直接采用软件的延时程序定时控制发光二极管的亮灭。在12M晶振时,一个指令周期为1us,那么1M次就是1s。 程序代码: #include sbit gate=P1^0; //位定义 void main(void) { unsigned int i,j; while(1) { for(i=1000;i>0;i--) //双重循环,延时约1s

单片机IO口结构与工作原理

一、P0端口的结构及工作原理 P0端口8位中的一位结构图见下图: 由上图可见,P0端口由锁存器、输入缓冲器、切换开关、一个与非门、一个与门及场效应管驱动电路构成。 下面,先分析组成P0口的各个部分: 先看输入缓冲器:在P0口中,有两个三态的缓冲器,在其的输出端可以是高电平、低电平,同时还有一种就是高阻状态(或称为禁止状态),上面一个是读锁存器的缓冲器,下面一个是读引脚的缓冲器,读取P0.X引脚上的数据,要使这个三态缓冲器有效,引脚上的数据才会传输到部数据总线上。 D锁存器:在51单片机的32根I/O口线中都是用一个D触发器来构成锁存器的。D端是数据输入端,CP是控制端(也就是时序控制信号输入端),Q是输出端,Q非是反向输出端。 多路开关:在51单片机中,不需要外扩展存储器时,P0口可以作为通用的输入输出端口(即I/O)使用,对于8031(部没有ROM)的单片机或者编写的程序超过了单片机部的存储器容量,需要外扩存储器时,P0口就作为‘地址/数据’总线使用。这个多路选择开关就是用于选择是做为普通I/O口使用还是作为‘数据/地址’总线使用的选择开关了。当多路开关与下面接通时,P0口是作为普通的I/O口使用的,当多路开关是与上面接通时,P0口是作为‘地址/数据’总线使用的。 输出驱动部份:P0口的输出是由两个MOS管组成的推拉式结构,也就是说,这两个MOS管一次只能导通一个,当V1导通时,V2就截止,当V2导通时,V1截止。

P0口作为I/O端口使用时,多路开关的控制信号为0(低电平),V1管截止,多路开关是与锁存器的Q非端相接的(即P0口作为I/O口线使用)。作为地址/数据线使用时,多路开关的控制信号为1,V1管由地址/数据线决定,多路开关与地址/数据线连接。 输出过程: 1、I/O输出工作过程:当写锁存器信号CP有效,数据总线的信号→锁存器的输入端D→锁存器的反向输出Q非端→多路开关→V2管的栅极→V2的漏极到输出端P0.X。这时多路开关的控制信号为低电平0,V1管是截止的,所以作为输出口时,P0是漏极开路输出,类似于OC门,当驱动上接电流负载时,需要外接上拉电阻。 下图就是由部数据总线向P0口输出数据的流程图(红色箭头)。 2、地址输出过程 控制信号为1,地址信号为“0”时,与门输出低电平,V1管截止;反相器输出高电平,V2管导通,输出引脚的地址信号为低电平。

51单片机IO端口的四种输入输出模式

51单片机IO端口的四种输入输出模式(by wuleisly) 单片机I O口的使用对所有单片机玩家来说都是“家常便饭”,但是你真的了解I O 口吗?你真的能按你的需要配置I O口吗? 一、准双向口输出 准双向口输出类型可用作输出和输入功能而不需重新配置 口线输出状态。这是因为当口线 输出为1时驱动能力很弱,允许外部装置将其拉低。当引脚输出为低时,它的驱动能力很强, 可吸收相当大的电流。(准双向口有3个上拉晶体管适应不同的需要) 准双向口读外部状态前,要先锁存为…1?,才可读到外部正确的状态. 二、强推挽输出 推挽输出配置的下拉结构与开漏输出以及准双向口的下拉 结构相同,但当锁存器为1时提供持续的强上拉。推挽模式一般用于需要更大驱动电流的情况。 三、仅为输入(高阻) 输入口带有一个施密特触发输入以及一个干扰抑制电路。 四、开漏输出配置(若外加上拉电阻,也可读) 当口线锁存器为0时,开漏输出关闭所有上拉晶体管。当作为一个逻辑输出时,这种配置方式必须有外部上拉,一般通过电阻外接到V c c。如果外部有上拉电阻,开漏的I/O口还可读外部状态,即此时被配置为开漏模式的I/O口还可作为输入I/O口。这种方式的下拉与准双向口相同。 开漏端口带有一个施密特触发输入以及一个干扰抑制电路。 关于I/O口应用注意事项: 1.有些是I/O口由低变高读外部状态时,读不对,实际没有损坏,软件处理一下即可。 因为1T的8051单片机速度太快了,软件执行由低变高指令后立即读外部状态,此时由于实际输出还没有变高,就有可能读不

对,正确的方法是在软件设置由低变高后加1到2个空操作指令延时,再读就对了. 有些实际没有损坏,加上拉电阻就OK了 有些是外围接的是NP N三极管,没有加上拉电阻,其实基极串多 大电阻,I/O口就应该上拉多大的电阻,或者将该I/O口设置为强 推挽输出. 2.驱动L E D发光二极管没有加限流电阻,建议加1K以上的限流电阻,至少也要加470欧姆以上 做行列矩阵按键扫描电路时,实际工作时没有加限流电阻,实际工作时可能出现2个I/O口均输出为低,并且在按键按下时,短接在一起,我们知道一个C MOS电路的2个输出脚不应该直接短接在一起,按键扫描电路中,此时一个口为了读另外一个口的状态,必须先置高才能读另外一个口的状态,而8051单?片机的弱上 拉口在由0变为1时,会有2时 钟的强推挽高输出电流输出到另外一个输出为低的I/O口,就有 可能造成I/O口损坏.建议在其中的一侧加1K限流电阻,或者在 软件处理上,不要出现按键两端的I/O口同时为低. 一种典型三极管控制电路: 如果用弱上拉控制,建议加上拉电阻R1(3.3K~10K),如果不加上拉电阻R1(3. 3K~10K), 建议R2的值在15K以上,或用强推挽输出。 典型发光二极管控制电路:

实验二单片机IO口的使用

姓名:学号:日期: 实验二单片机I/O口的使用 一、实验名称:单片机I/O口的使用 二、实验目的 1.掌握在Keil环境下建立项目、添加、保存源文件文件、编译源程序的方法; 2.掌握运行、步进、步越、运行到光标处等几种调试程序的方法; 3.掌握在Proteus环境下建立文件原理图的方法; 4.实现Proteus与Keil联调软件仿真。 三、使用仪器设备编号、部件及备件 1.实验室电脑; 2.单片机实验箱。 四、实验过程及数据、现象记录 1.在Proteus环境下建立如下仿真原理图,并保存为文件; 原理图中常用库元件的名称: 无极性电容:CAP 极性电容:CAP-ELEC 单片机:AT89C51 晶体振荡器:CRYSTAL 电阻:RES 按键:BUTTON 发光二极管:红色LED-RED 绿色LED-GREEN 蓝色LED-BLUE 黄色LED-YELLOW 2.在Keil环境下建立源程序并保存为.ASM文件,生成.HEX文件; 参考程序如下: ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV A,# H LOOP: MOV P2,A CALL DELAY SJMP LOOP DELAY: MOV R1,# H DL1: MOV R2,# H DL2: MOV R3,# H DJNZ R3,$

DJNZ R2,DL2 DJNZ R1,DL1 RET END 将以上程序补充完整,流水时间间隔为50ms。 3.将.HEX文件导入仿真图,运行并观察结果; 4.利用Keil软件将程序下载至实验箱,进行硬件仿真,观察实验结果。 五、实验数据分析、误差分析、现象分析 现象:进行软硬件仿真时,观察到8支LED发光二极管流水发光。 六、回答思考题 1.如何让改变流水方向? 2.若将R3至R10上拉电阻省略,8支LED还能正常发光吗? 3.如果将LED接到P0口与接到P2口硬件设计时应注意什么问题? Keil软件建立项目的方法: 1.新建项目 2.新建文件 3.添加文件 4.设置选项 5.重建所有目标文件 6.调试仿真

51单片机管脚说明

51单片机管脚说明(2007-06-26 15:46) 分类:单片机资料几学习心得 51单片机管脚说明 发表日期:2007-06-16 00:12:46 点击数:10 当我们拿到一块单片机芯片时,看到这么多的“大腿”,他们都有干什么用的?了解了51家族的渊源,现在我们就去了解一下它们的“腿”吧.大家可得学好了,这可是至关重要的哟.如果连手跟腿都分不清,要学好单片机那就有如凭空造屋了. 这一章节相当管用,希望大家能用心学好,如果这一章节学不好,以后学习会有很大的阻力.(我们的教材都是以51系列的单片机来进行讲解的). 引脚功能: MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图: l P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子). l P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子). l P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子). l P3.0~P3.7 P2口8位双向口线(在引脚的10~17号端子). 这4个I/O口具有不完全相同的功能,大家可得学好了,其它书本里虽然有,但写的太深,对于初学者来说很难理解的,我这里都是按我自已的表达方式来写的,相信你也能够理解的. P0口有三个功能: 1、外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口) 2、外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口) 3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻. P1口只做I/O口使用:其内部有上拉电阻. P2口有两个功能:

51单片机考试常见简答题

简答题部分 1、51 单片机内部集成的功能部件? MCS-51单片机在片内集成了中央处理器( CPU)、程序存储器(ROM )、数据存储器(RAM )、定时器/计数器、并行I/O 接口、串行I/O 接口和中断系统等几大单元。CPU 是整个单片机的核心部件,由运算器和控制器组成。运算器可以完成算术运算和逻辑运算,其操作顺序在控制器控制下进行。 控制器是由程序计数器PC (Program Counter)、指令寄存器IR (Instruction Register)、指令译码器ID (Instruction Decoder )、定时控制逻辑和振荡器OSC等电路组成。CPU根据PC中的地址将欲执行指令的指令码从存储器中取出,存放在IR中,ID对IR中的指令码进行译码,定时控制逻辑在OSC配合下对ID译码后的信号进行分时,以产生执行本条指令所需的全部信号。程序存储器(ROM ) 用于存储程序、常数、表格等。数据存储器( RAM )用于存储数据。8051 内部有两个16位可编程序的定时器/计数器TO和T1,均为二进制加1计数器。可用于定时和对外部输入脉冲的计数。8051的中断系统主要由中断允许控制器IE和中断优先级控制器IP等电路组成。可实现对5个中断源的 管理。8051的中断系统主要由中断允许控制器IE和中断优先级控制器IP等电路组成。其中,IE用 于控制 5 个中断源中哪些中断请求被允许向CPU 提出,哪些中断源的中断请求被禁止;IP 用于控制 5 个中断源的中断请求的优先权级别。I/O 接口是MCS-51 单片机对外部实现控制和信息交换的必经之路,用于信息传送过程中的速度匹配和增加它的负载能力。可分为串行和并行I/O 接口。 2、51 的程序存储器、外部存储器、内部存储器各自的容量与地址范围? 小抄补充) 1、片内外统一编址的64K的程序存储器地址空间(MOVC ) 2、256B 的片内数据存储器的地址空间( MOV) 3、以及64K 片外数据存储器的地址空间( MOVX ) 在访问三个不同的逻辑空间时,应采用不同形式的指令以产生不同的存储器空间的选通信号程序ROM 寻址范围:0000H ~ FFFFH 容量64KB EA = 1 ,寻址内部ROM;EA = 0, 寻址外部ROM 地址长度:16 位 作用:存放程序及程序运行时所需的常数 数据存储器片内数据存储器为8位地址,所以最大可寻址的范围为256个单元地址,对片外数据存储器采用间接寻址方式,R0、R1 和DPTR 都可以做为间接寻址寄存器,R0、R1 是8位的寄存器,即R0、R1 的寻址范围最大为256 个单元,而DPTR 是16位地址指针,寻址范围就可达到64KB。 也就是说在寻址片外数据存储器时,寻址范围超过了256B,就不能用RO、R1做为间接寻址寄存器, 而必须用DPTR 寄存器做为间接寻址寄存器。

51单片机IO口应用详解

51单片机IO口应用详解 MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照单片机引脚图: 这4个I/O口具有不完全相同的功能,大家可得学好了,其它书本里虽然有,但写的太深,对于初学者来说很难理解的,我这里都是按我自已的表达方式来写的,相信你也能够理解的。 P0口有三个功能: 1、外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口) 2、外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口) 3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。 P1口只做I/O口使用:其内部有上拉电阻。 P2口有两个功能: 1、扩展外部存储器时,当作地址总线使用 2、做一般I/O口使用,其内部有上拉电阻; P3口有两个功能: 除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。 有内部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的, 即:编程脉冲:30脚(ALE/PROG) 编程电压(25V):31脚(EA/Vpp) 在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。 ALE 地址锁存控制信号:在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起

51单片机端口驱动能力详解

单片机输出低电平时,将允许外部器件,向单片机引脚内灌入电流,这个电流,称为“灌电流”,外部电路称为“灌电流负载”;单片机输出高电平时,则允许外部器件,从单片机的引脚,拉出电流,这个电流,称为“拉电流”,外部电路称为“拉电流负载”。 这些电流一般是多少?最大限度是多少?这就是常见的单片机输出驱动能力的问题。 早期的 51 系列单片机的带负载能力,是很小的,仅仅用“能带动多少个 TTL 输入端”来说明的。P1、P2 和 P3口,每个引脚可以都带动 3 个 TTL 输入端,只有 P0 口的能力强, 它可以带动 8 个! 分析一下 TTL 的输入特性,就可以发现,51 单片机基本上就没有什么驱动能力。它的引脚,甚至不能带动当时的 LED 进行正常发光。记得是在 AT89C51 单片机流行起来之后,做而论道才发现:单片机引脚的能力大为增强,可以直接带动 LED 发光了。 看 看下图,图中的 D1、D2 就可以不经其它驱动器件,直接由单片机的引脚控制发光显示。 虽然引脚已经可以直接驱动 LED 发光,但是且慢,先别太高兴,还是看看 AT89C51 单片机引脚的输出能力吧。 从 AT89C51 单片机的 PDF 手册文件中可以看到,稳态输出时,“灌电流”的上限为:Maximum IOL per port pin: 10 mA; Maximum IOL per 8-bit port ort 0: 26 mA,Ports 1, 2, 3: 15 mA; Maximum total I for all output pins: 71 mA. 这里是说:

每个单个的引脚,输出低电平的时候,允许外部电路,向引脚灌入的最大电流为 10 mA;每个 8 位的接口(P1、P2 以及 P3),允许向引脚灌入的总电流最大为 15 mA,而 P0 的能力强一些,允许向引脚灌入的最大总电流为 26 mA; 全部的四个接口所允许的灌电流之和,最大为 71 mA。 而当这些引脚“输出高电平”的时候,单片机的“拉电流”能力呢?可以说是太差了,竟然不到 1 mA。 结论就是:单片机输出低电平的时候,驱动能力尚可,而输出高电平的时候,就没有输出电流的能力。 这个结论是依照手册中给出的数据做出来的。 51 单片机的这些特性,是源于引脚的内部结构,引脚内部结构图这里就不画了,很多书中都有。 在芯片的内部,引脚和地之间,有个三极管,所以引脚具有下拉的能力,输出低电平的时候,允许灌入 10mA 的电流;而引脚和正电源之间,有个几百K的“内部上拉电阻”,所以,引脚在高电平的时候,能够输出的拉电流很小。特别是 P0 口,其内部根本就没有上拉电阻,所以 P0 口根本就没有高电平输出电流的能力。 再看看上面的电路图: 图中的 D1,是接在正电源和引脚之间的,这就属于灌电流负载,D1 在单片机输出低电平的时候发光。这个发光的电流,可以用电阻控制在 10 mA 之内。 图中的 D2,是接在引脚和地之间的,这属于拉电流负载,D2 应该在单片机输出高电平的时候发光。但是单片机此时几乎没有输出能力,必须采用外接“上拉电阻”的方法来提供 D2 所需的电流。 哦,明白了,外接电路如果是“拉电流负载”,要求单片机输出高电平时发挥作用,那就必须用“上拉电阻”来协助,产生负载所需的电流。 下面做而论道就专门说说上拉电阻存在的问题。 从上面的图中可以看到,D2 发光,是由上拉电阻 R2 提供的电流,D2 导通发光的电压约为2V,那么发光的电流就是:(5 - 2) / 1K,约为 3mA。 而当单片机输出低电平(0V),D2 不发光的时候,R2 这个上拉电阻闲着了吗?没有!它两端的电压,比 LED 发光的时候还高,现在是 5V 了,其中的电流,是 5mA ! 注意到了吗?LED 不发光的时候,上拉电阻给出了更大的电流!并且,这个大于正常发光的电流,全部灌入单片机的引脚了! 如果在一个 8 位的接口,安装了 8 个 1K 的上拉电阻,当单片机都输出低电平的时候,就有 40mA 的电流灌入这个 8 位的接口! 如果四个 8 位接口,都加上 1K 的上拉电阻,最大有可能出现32 × 5 = 160mA 的电流,都流入到单片机中! 这个数值已经超过了单片机手册上给出的上限。如果此时单片机工作不稳定,就是理所当然的了。 而且这些电流,都是在负载处于无效的状态下出现的,它们都是完全没有用处的电流,只是产生发热、耗电大、电池消耗快...等后果。 呵呵,特别是现在,都在提倡节能减排,低碳...。 那么,把上拉电阻加大些,可以吗? 回答是:不行的,因为需要它为拉电流负载提供电流。对于 LED,如果加大电阻,将使电流过小,发光暗淡,就失去发光二极管的作用了。 对于 D1,是灌电流负载,单片机输出低电平的时候,R1、D1 通路上会有灌电流;输出高电平的时候,那就什么电流都没有,此时就不产生额外的耗电。

很全的51单片机IO端口详解(带图)

80C51的I/O端口结构及应用特性 一,I/O端口的结构 1,锁存器加引脚的典型结构 80C51的I/O端口都有内部总线实现操作控制。P0-P3四个I/O 口都可以做普通I/O口,因此,要求具有输出锁存功能。内部总线有事分时操作,因此每个I/O端口都有相应的锁存器。然而I/O端口又是外部的输入/输出通道,必须有相应的引脚,故形成了I/O端口的锁存器加引脚的典型结构。 2,I/O口的复用功能 (1)I/O口的总线复用。80C51在使用并行总线扩展时,P0口可作为数据总线口和低8位地址总线口,这是,P0为三态双向口。P0口输出总线的地址数据信号,P2口输出高8位地址信号。 (2)I/O口的功能复用。I/O口的P3为功能复用的I/O端口。端口有复用输出的控制端;引脚也有复用输入的控制端。 3,准双向结构 P0,P1,P2,P3口做普通I/O口使用时,都是准双向口结构。准双向口的典型结构见P1口位结构图。准双向口的输入操作和输出操作本质不同,输入操作时读引脚状态;输出操作时对口锁存器的写入操作。有口锁存器和引脚电路可知:当有内部总线对只1或只0时,锁存器的0、1状态立即反应到引脚上。但是输入操作(读引脚)时,如果口锁存器的状态为0,引脚被嵌位在0状态,导致无法读出引脚的高电平输入。 二,I/O端口的应用特性 1,引脚的自动识别。无论P0,P2口的总线复用,还是P3口的功能复用,内部资源会自动选择,不需要通过指令的状态选择。 2,口锁存器的读、该、写操作。许多涉及到I/O端口的操作,只是涉及口锁存器的读出、修改、写入的操作。这些指令都是一些逻辑运算指令、置位/清除指令、条件转移指令以及将I/O口作为目的地址的操作指令。 3,读引脚的操作指令。如果某个I/O口被指定为源操作数,则为

51单片机端口地址

/*-------------------------------------------------------------------------- REG52.H Header file for generic 80C52 and 80C32 microcontroller. Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved. --------------------------------------------------------------------------*/ #ifndef __REG52_H__ #define __REG52_H__ /* BYTE Registers */ sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0; sfr PSW = 0xD0; sfr ACC = 0xE0; sfr B = 0xF0; sfr SP = 0x81; sfr DPL = 0x82; sfr DPH = 0x83; sfr PCON = 0x87; sfr TCON = 0x88; sfr TMOD = 0x89; sfr TL0 = 0x8A; sfr TL1 = 0x8B; sfr TH0 = 0x8C; sfr TH1 = 0x8D; sfr IE = 0xA8; sfr IP = 0xB8; sfr SCON = 0x98; sfr SBUF = 0x99; /* 8052 Extensions */ sfr T2CON = 0xC8; sfr RCAP2L = 0xCA; sfr RCAP2H = 0xCB; sfr TL2 = 0xCC; sfr TH2 = 0xCD; /* BIT Registers */ /* PSW */ sbit CY = PSW^7; sbit AC = PSW^6; sbit F0 = PSW^5; sbit RS1 = PSW^4; sbit RS0 = PSW^3; sbit OV = PSW^2; sbit P = PSW^0; //8052 only /* TCON */ sbit TF1 = TCON^7; sbit TR1 = TCON^6; sbit TF0 = TCON^5; sbit TR0 = TCON^4; sbit IE1 = TCON^3; sbit IT1 = TCON^2; sbit IE0 = TCON^1; sbit IT0 = TCON^0; /* IE */ sbit EA = IE^7;

相关主题