引脚

本文将介绍两个利用通用输入/输出(GPIO)引脚复用来减少项目引脚使用的示 例。第一个示例使用了“查理复用算法”技术,第二个示例使用了定时外设和中 断来快速切换引脚输入状态和输出状态,以在驱动 LED 的同时读取按键。

PIC®和 AVR®单片机上的引脚复用 

通用输入/输出(GPIO)引脚是单片机设计时的重要考量之一。您需要足够的引 脚将单片机连接到设计中的所有其他组件;但是,超过所需的引脚可能会导致设计 成本增加,并且占用电路板上更多空间。此外,减少设计中的所需引脚数量可能就 可以选择另一种不同的封装。如果有一种方法可以从较小的封装中挤出更多的 I/O 引脚就好了!幸运的是,我们确实有方法可以在这种情况下释放引脚。 

下面是 Microchip 应用团队使用 AVR DD 系列单片机创建的两个示例。首先, 我们将探讨通过一种称为“查理复用算法”的技术复用 GPIO 引脚来控制 LED。接 下来,我们将看一下如何使用单个引脚同时运行独立的按键和 LED。 

查理复用算法的核心思想是利用单片机引脚可以处于的三种状态:数字高电平、 数字低电平和高阻抗数字输入状态(也称为高阻态或三态)。通过使用这三种状态 而不仅仅是典型的高电平和低电平,用户可以使用 n 个引脚驱动最多(n2 -n)个独立的 LED。在此示例中,三个指定的引脚可以驱动六个独立的 LED。 

那么查理复用算法的工作原理到底是什么呢?为了理解这一点,我们需要看一 个示例。 

1.png

这里我们用三个 I/O 引脚驱动六个 LED。 

如果我们只想导通 LED1,则需要将 PA2 设为高电平,PA3 设为低电平,PA4 设为高阻态。电流将流过 LED1 并使其导通,同时使所有其他 LED 保持关断状态。 

2.png

这里的三态十分重要,因为如果 PA4 为“低电平”,它也会意外导通 LED5。 如下面所示:

3.png

高阻抗逻辑状态确保电流只流过 LED1。利用 I/O 引脚状态的相应组合(要获得 预期行为,用户必须将一个引脚设为高电平、一个引脚设为低电平,其余引脚设为 高阻抗),可以为电路中的任何 LED 重复此过程。 

虽然在任意给定时刻这种方法只会点亮一个 LED,但是快速改变 I/O 状态可创 造出点亮多个 LED 的错觉。(LED 调光的工作原理是通过在单个 LED 上使用脉冲 宽度调制,原理与此非常相似)。可以在下面看到:(点击图片查看动态效果) 

第二个示例涉及到在单个引脚上改动一个 LED 和一个按键。 

从有利的角度看,可利用中断和定时器来实现此目的。单片机引脚大部分时间 都在驱动 LED。然而,一个定时外设会定期在单片机内部触发中断,将引脚从输出 快速切换为输入,然后检查按键的状态。虽然这会暂时停止驱动 LED,但如果这个 过程可以做得足够快,那么在检查按钮状态的时候,对 LED 造成的影响几乎不可见。 我们在下面的示例中使用了这种方法。单片机不停地驱动一个闪烁的 LED,同 时定期检查按键,如果按键被按下,就会点亮一个单独的 LED。

尽管本文章只涵盖了这两种技术的基础知识,但我们的 Microchip 应用团队发布 的相应 GitHub 页面包含了图表、示例代码和更详细的说明。请访问该页面或我们 的 AVR DD 产品系列页面来了解更多信息。

来源: Microchip微芯

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。    

围观 52

来源:玩转单片机

单片机的40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。

⒈ 电源:
⑴ VCC - 芯片电源,接+5V;
⑵ VSS - 接地端;
⒉ 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。
⒊ 控制线:控制线共有4根,
⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲
① ALE功能:用来锁存P0口送出的低8位地址
② PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
⑵ PSEN:外ROM读选通信号。
⑶ RST/VPD:复位/备用电源。
① RST(Reset)功能:复位信号输入端。
② VPD功能:在Vcc掉电情况下,接备用电源。
⑷ EA/Vpp:内外ROM选择/片内EPROM编程电源。
① EA功能:内外ROM选择端。
② Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
⒋ I/O线
80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。

拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们用的一块称之为89C51的芯片,下面我们就看一下如何给它连线。
1、 电源:这当然是必不可少的了。单片机使用的是5V电源,其中正极接40管脚,负极(地)接20管脚。
2、 振蒎电路:单片机是一种时序电路,必须供给脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。只要买来晶体震荡器,电容,连上就能了,按图1接上即可。
3、 复位管脚:按图1中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。
4、 EA管脚:EA管脚接到正电源端。 至此,一个单片机就接好,通上电,单片机就开始工作了。

我们的第一个任务是要用单片机点亮一只发光二极管LED,显然,这个LED必须要和单片机的某个管脚相连,不然单片机就没法控制它了,那么和哪个管脚相连呢?单片机上除了刚才用掉的5个管脚,还有35个,我们将这个LED和1脚相连。(见图1,其中R1是限流电阻)

按照这个图的接法,当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。因此要1脚我们要能够控制,也就是说,我们要能够让1管脚按要求变为高或低电平。即然我们要控制1脚,就得给它起个名字,总不能就叫它一脚吧?叫它什么名字呢?设计51芯片的INTEL公司已经起好了,就叫它P1.0,这是规定,不能由我们来更改。

2

名字有了,我们又怎样让它变'高'或变'低'呢?叫人做事,说一声就能,这叫发布命令,要计算机做事,也得要向计算机发命令,计算机能听得懂的命令称之为计算机的指令。让一个管脚输出高电平的指令是SETB,让一个管脚输出低电平的指令是CLR。因此,我们要P1.0输出高电平,只要写SETB P1.0,要P1.0输出低电平,只要写 CLR P1.0就能了。

现在我们已经有办法让计算机去将P10输出高或低电平了,但是我们怎样才能计算机执行这条指令呢?总不能也对计算机也说一声了事吧。要解决这个问题,还得有几步要走。第一,计算机看不懂SETB CLR之类的指令,我们得把指令翻译成计算机能懂的方式,再让计算机去读。计算机能懂什么呢?它只懂一样东西——数字。因此我们得把SETB P1.0变为(D2H,90H ),把CLR P1.0变为 (C2H,90H ),至于为什么是这两个数字,这也是由51芯片的设计者--INTEL规定的,我们不去研究。第二步,在得到这两个数字后,怎样让这两个数字进入单片机的内部呢?这要借助于一个硬件工具"编程器"。如果你还不知道是什么是编程器,我来介绍一下,就是把你在电脑上写出来来的代码用汇编器等编译器生成的一个目标烧写到单片机的eprom里面去的工具,80c51这种类型的单片机编程是一件很麻烦的事情,必要要先装到编程器上编程后才能在设备上使用,而目前最新的AT89s51或者STC89C51单片机能支持在线编程(isp)功能,不用拔出来利用简单的电路就可以实现把代码写入单片机内部,本站有详细的编程器制作教程下载。

下面我们来实战一下:下图(图2)所示的软件名字叫keil —>点此下载,是用来编写程序代码并生成一个可以写入到单片机芯片的Hex文件(我们人要控制单片机只能用汇编语言或者C语言而单片机不认识怎么办呢?所以keil这个软件就把程序语言转换成了一种特定格式的Hex文件,只要把这个文件下载到单片机芯片单片机就会按我们程序的思路来运行)

3

4

好了…… ,我们把 SETB P1.0 这条汇编语句用keil软件编译生成Hex文件,然后用图3所示的软件和图1所示的硬件(用串口连接电脑)下载到我们已经做好的电路板上的单片机芯片里去(图省事的话建议直接买个开发板),然后接通电源……什么?灯不亮?这就对了,因为我们写进去的指令就是让P10输出高电平,灯当然不亮,要是亮就错了。所以要将keil编缉区的内容改为CLR P1.0,重新编译生成Hex文件,重新下载,接电,好,灯亮了。因为我们写入的Hex就是让P10输出低电平的指令。这样我们看到,硬件电路的连线没有做任何改变,只要改变写入单片机中的内容,就能改变电路的输出效果。

围观 300
订阅 RSS - 引脚