您的位置 首页 数字

单片机小白学步系列二十 IO口原理

IO口操作是单片机实践中最基本最重要的一个知识,本篇花了比较长的篇幅介绍IO口的原理。也是查阅了不少资料,确保内容正确无误,花了很长时…

IO口操作是单片机实践中最根本最重要的一个常识,本篇花了比较长的篇幅介绍IO口的原理。也是查阅了不少材料,保证内容正确无误,花了很长时刻写的。IO口原理本来需求触及许多深化的常识,而这儿尽最大或许做了简化便利了解。这样关于今后处理各种IO口相关的问题会有很大的协助。

IO口等效模型是自己首创的办法,经过此模型,能有用的下降对IO口内部结构了解的难度。并且经查阅材料承认,这种模型和实践作业原理根本共同。

==========================================

前面说了许多东西,不少人或许现已刻不容缓的想要实践操作单片机了。IO口作为单片机与外界通讯最首要的手法,是单片机学习最根本也最重要的一个常识。前面咱们编程完成了IO口点亮LED的试验,本篇持续对IO口相关常识进行介绍。

为了更好的学习IO口操作,有必要了解一下IO口的内部结构和相关概念。这些常识关于后续的学习很有协助,重点是了解,彻底不需求故意去记。不记得就回来再看看就行了,用得多了天然就记住了。

官方材料(最威望精确)

咱们说过,要了解一个芯片,最精确有用的办法,是检查官方给出的芯片手册等材料。可是初学单片机,直接看芯片手册材料恐怕很难弄了解,尤其是看到一堆英文、生疏的电路、名词术语,假如是我,必定也会抓狂的。可是这儿我仍是给出一张从Atmel官方的《Atmel 8051 Microcontrollers Hardware Manual》中截取的图片。

给出这张图片并不是为了冲击咱们学习热心,而是期望咱们能了解,咱们所见过的各种单片机材料究竟是怎样来的,究竟是否精确,这一切都可以经过官方材料弄清楚,关于咱们今后深化学习一些东西有必定的协助。

第二功用简介

上图正是官方给出的威望的51单片机IO口结构图。可以看出,单片机的四组IO口内部结构各不相同,原因是有些IO口有第二功用,入门篇里边说到过。

还记得这张管脚图吗?括号中标示的便是IO口的第二功用称号。除了P1以外,每个接口都有第二功用。介绍单片机体系模块时,我说到51单片机有预留扩展存储器的接口,正是图中的P0和P1的第二功用(一起还要用到29、30等管脚)。因为用的不多,触及常识也比较深化,就不做详细研讨了。趁便一提,其实这儿咱们看到的AD0~AD7,便是用于并行口的。而P3口的第二功用,就包含串口等,后边学到了还会详细介绍。

IO口等效电路

因为深化了解IO口的原理触及到许多电路乃至微机原理相关常识,这儿只做简化介绍,能满意绝大多数情况下的需求。作为一般IO口运用时,四个IO口的作业原理根本共同。

下面的图是从前面图中的P1电路中裁剪出来的,也是咱们需求了解的要害。

右边的P1.X表明P1的一个IO口,如P1.0;电阻右边写的英文是内部上拉电阻的意思,之所以叫上拉电阻,是因为电阻的一端接在VCC上。下面的三角形表明接地,相当于GND。除此之外,最要害的一个器材是下面这个。

这个器材的实质是晶体管,起到电子开关的作用(假如想深化了解,可以学习模仿电路相关的常识,或许比及原理篇中介绍)。上面的电路可以大致等效成下图。留意,这样的结构仅仅一个IO口,整个单片机中有32个这种结构。

图中的R为阻值10k的上拉电阻,S是由前面的晶体管等效的电子开关。蓝色框中的部分在单片机内部。

S的开关状况由CPU操控。当用程序设置P1.0管脚为低电平常,电子开关S闭合。实践上电子开关S闭合时,两头还有很小的电阻。依据分压原理,P1.0上会有一个很低的电压,近似0V,现已可以视为低电平了。当设置管脚为高电平常S断开,P1.0经过10k上拉电阻接到VCC上。假如用电压表丈量,因为电压表内阻很大,所以可以得出其电压值为高电平。

IO口的输出:点亮LED

前面介绍了点亮第一个LED的程序和电路。程序如下:

#include

sbit LED = P1^0;

void main()

{

LED = 0;

while(1);

}

电路要害部分如下,VCC经过1k电阻衔接到LED正极,LED负极接到P1.0口:

在单片机履行LED=0的时分,电子开关S就由CPU操控而闭合,P1.0上输出低电平。电流经过1k电阻和LED流入P1.0,再经过S流入GND,LED两头有适宜的电压所以点亮。结合单片机内部IO口等效电路,整个电路如下图

灌电流与拉电流

在上面的比如中,P1.0输出低电平点亮LED。能不能反过来,P1.0输出高电平点亮LED呢?咱们可以考虑电路衔接成下面这样,并在程序中编写LED=1。

当履行LED=1时,S断开。电流经过10k上拉电阻R从P1.0流出,并进入LED。因为上拉电阻的阻值太大,电流太小,导致LED不亮,或许亮度很弱小。所以一般不选用这种办法。

这两种办法,前者电流从外部流入单片机内部,咱们称之为灌电流接法;后者电流方向相反,称为拉电流接法。比照可以看出,关于51单片机,灌电流接法电流较大,拉电流接法因为受到上拉电阻约束,电流较小。

在实践傍边灌电流的最大电流也是有限的,因为电子开关S中能经过的电流有限。依据STC官方的芯片手册,关于STC单片机,主张单个IO口灌电流主张不超越20mA,一切IO口灌电流之和不超越55mA,不然简略烧坏IO口。而拉电流巨细只要230uA左右。

上拉电阻/下拉电阻/高阻态

拉电流是从上拉电阻流出来的,能否进步拉电流巨细呢?答案是可以。咱们只需求在单片机外部再增加一个上拉电阻,就可以增大拉电流,并且能成功点亮LED,如下图所示。

图中的电路,相当于R和R0并联了,整个上拉电阻的阻值减小了。可是这样做有个缺点。在这个电路中,当单片机输出低电平常,S闭合,此刻电流从VCC经过上拉电阻和S流入GND。此刻尽管LED平息了,可是却有较大电流经过上拉电阻而糟蹋掉。所以上拉电阻过大,会导致驱动力缺乏,而上拉电阻过小,又会在输出低电平常糟蹋电能。

上拉电阻的作用是什么呢?对电路了解多一点的人很快能发现,假如没有上拉电阻,IO口就无法输出高电平,也便是下图这样的。开关闭合时能输出低电平,可是开关断开时,P1.0就悬空了,什么也没衔接。这时IO口的电压便是不确认的了,这种状况无法判别它是低电平仍是高电平,叫做高阻态。很巧的是,单片机的P0口的确就没有上拉电阻,而其他三组IO口都有上拉电阻。所以当P0输出高电平,并且没有外接上拉电阻时,便是高阻态,不能正常输出高电平。后边我会经过详细比如来让咱们感受一下高阻态。

注:尽管P1.0似乎是一起衔接到CPU的IO输入端了,即图中写着“输入”的绿色箭头,可是这部分电路只要在读取管脚输入的时分才会导通,并且是单向的。

上拉电阻的存在,将本来的高阻态改变成了高电平,也因而得名。和上拉电阻相对应的,还有下拉电阻,差异在于下拉电阻另一端不是衔接VCC而是接到GND。

IO口的输入

IO口之所以叫IO口(IO=Input/Output),意味着它既可以输出又可以输入。前面讲的都是IO口的输出,下面讲IO口的输入。IO口的输出咱们经过LED来介绍,而IO口的输入咱们则经过开关来阐明。在许多单片机中,IO的输入和输出需求经过电路切换,而关于51单片机来说,输入和输出运用的是同一套电路,也便是上面咱们剖析的电路。

图中的S0是一个单刀双掷开关,往上切换可以将P1.0接到VCC,往下切换可以接到GND。读取时CPU会经过特定电路获取图中橙色导线上的电平。咱们想要完成的作用是,让CPU读取P1.0端口的电平,然后取得开关S0的状况。

当S断开时,CPU经过获取P1.0上的电平可以知道外部开关S0的状况,然后履行相应的操作。

而S闭合时,S0往下切换,P1.0的确是低电平。而S坚持闭合且S0往上切换时,VCC经过S0和S直接接到GND就短路了。此刻电子开关S经过许多电流,或许会烧坏单片机。所以咱们增加了电阻R0。S依然坚持闭合,S0往上切换。此刻P1.0依然是低电平,所以CPU无法判别外部开关S0的状况,如下图。

总结起来便是在读取IO口电平常,应先设置输出高电平(即断开S),再读取数据。这个规矩适用于一切IO口。

相似的,还可以读取单刀单掷开关(或按键开关)的状况,读取前先设置输出高电平,电路图如下。

上面这种电路需求依靠上拉电阻才干作业。P0口因为没有上拉电阻,需求在外部增加一个上拉电阻(因为假如没有上拉电阻,并且S和S0都断开时,IO口变成高阻态,读取的电平成果不确认,所以无法正确判别S0的开关状况)。

双向IO口/准双向IO口

标准双向IO口的特色有两条:

1、在输出形式下,可以输出凹凸电平;

2、在输入形式下,假如没有接外部电路,应出现高阻态。

关于51单片机的P1、P2、P3口,因为有内部上拉电阻,输入形式下不或许出现高阻态,所以称之为准双向IO口。而P0口作为IO口作业时,假如不加上拉电阻就无法输出高电平;而加了上拉电阻,输入时又不会出现高阻态,所以也是准双向IO口。

补白1:51单片机的P0口假如作业在第二功用状况下,则是双向IO口。初学时详细原理不需求研讨的很透彻,下面一段对此进行剖析,仅供有爱好的读者参阅。

对照官方的完好IO口结构图,P0口内部有上下两个晶体管。当P0口作业在IO口形式下,上面那个晶体管断开,可以直接疏忽,前面的等效电路就没有考虑上面那个晶体管。而当P0口作业在第二功用状况下,两个晶体管都可以作业。假如上面的晶体管断开,下面的导通,就输出低电平;反之上面的导通下面的断开,就输出高电平并且不需求上拉电阻;假如两个晶体管都断开,则可以作为输入,并且在没有外界电路时出现高阻态。所以是双向IO口。

补白2:关于双向IO口和准双向IO口的概念存在必定争议,这儿的介绍归纳了网上多方面的观念,被多数人所承受。

线与逻辑

假如把两个单片机IO口衔接在一起会产生什么现象呢?下面便是咱们的电路图。

当设置两个IO口都输出低电平,即S和S1都闭合时,整体是低电平;而当设置其间一个IO口输出低电平另一个输出高电平常,即S或S1闭合,此刻两个IO口上都会出现低电平。只要当P1.0、P1.1都输出高电平,即S和S1都断开时,才会出现高电平。

可以简略表述成:两个IO口衔接在一起,仅当P1.0与P1.1都设置输出高电平常,两者接线上才会出现高电平。这便是所谓的线与逻辑。不仅是两个,假如是许多的这样的IO口连在一起,只要一切IO都设置输出高电平,接线上才会出现高电平。线与逻辑会在后边的矩阵键盘中运用到。

总结

最终总结起来,首要便是下面几点。内容有点多,可是实践上常用的只要其间的几点。再次着重,不需求故意去记,了解了原理,用多了天然就记住了。

1、灌电流比拉电流能经过更大的电流;点亮LED一般用灌电流办法

2、上拉电阻越小,拉电流输出才能越大,但输出低电平常越费电

3、读取IO口前,要先设置输出高电平

4、P0作为输出,需外接上拉电阻

5、按键开关作为输入时,接在IO口和GND之间,别的需求上拉电阻

6、51单片机的四个IO口在一般IO状况下都是准双向口

7、51单片机IO口遵照线与逻辑

=======================================================

《单片机小白学步》系列教程(原名《单片机入门攻略》)介绍

本系列教程从最根本的入门常识开端,逐渐深化介绍单片机体系规划,内容包含:
1、入门篇:单片机等根本概念、各种电子规划根本常识
2、思维篇:单片机/计算机体系规划的工程思维
3、学习篇:单片机学习进程、办法和技巧,以51单片机为例介绍,并推行到其他单片机
4、使用篇:遵从标准的工程办法,规划单片机体系实例(方案规划的体系有:计算器、电子表、密码锁、简易手机,详细看有没有时刻再确认)
5、原理篇:从模仿电路、数字电路开端,逐渐深化介绍单片机/计算机体系原理,并自行规划简易的CPU(因为个人水平有限,这部分没有把握写好,详细内容视情况而定)

教程特色

包含了各种根本常识,尤其是对单片机根本概念的介绍、为什么要用单片机等,在许多同类书本教程中都被疏忽了。一起也包含了一些深化的常识,包含原理篇考虑对单片机的根本原理进行介绍,有助于深化了解单片机。

本系列教程以51单片机为例进行介绍。经过51介绍完单片机的根本常识,我会再把430进行扼要介绍,尤其是比照两者之间的优缺点,让咱们很快感受到430的巨大优势,而学习51正好为快速了解430打下了坚实的根底。

本系列教程中,介绍单片机各种模块编程常识的首要是学习篇,而学习篇仅仅整个教程的一部分。在学习篇中我会贯穿各种办法技巧,怎样了解一些模块功用,怎样看时序图,严格遵守工程思维进行编程,程序产生了过错怎样调试等等。而在思维篇中会整体介绍许多重要的思维,为后边的学习做好准备作业。

单片机学习进程中,触及许多的常识,并且许多常识之间相互依靠,相关很强。

本系列教程对常识的先后次序进行比较清晰的规划,尽最大或许契合人的认知进程。可是实践规划时发现,不管怎样调整常识的次序,总有一些常识之间相互依靠,联系杂乱。例如开端讲IO口的时分肯定会说到寄存器,而寄存器这个词的了解,需求深沉的布景常识。可是这些布景常识在没有进行实践的时分也很难了解。

初学者常常就会在这样的当地感觉疑问不解,手足无措。而每次遇到相似这样的常识,我会向初学者指出,应该怎样对待。这个常识是应该自己去学习弥补,仍是比及学完原理篇再做了解,而现在又应该怎样去看待这个名词。

别的,在整个教程的学习前,需求把握必定的C言语等根底常识,详细可参阅教程第〇篇《序》中的相关阐明
http://www.hainter.com/mcu-primer-0

本系列教程力求言语通俗易懂,而不会用一堆新手不明白的词语去解说另一个不明白的词语。可是受限于个人言语表达才能,或许有些当地表述的比较繁琐,或许不清楚,期望咱们可以帮助指出。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/276494.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部