单片机如何扩展io口?
首先我们先讲讲为什么要扩展io口。在我们使用51单片机的时候,有时候会出现io口不够用的情况。比如键盘!这个时候io口的资源就十分有限了。
按键是我们常用的器件,做某些东西的时候又不能缺少按键。如果一个按键对应一个io口,那么可想而知,按键所占的io口的数量是很大的。单片机io口的资源是有限的,因此我们要采取一些方法来扩展单片机的io口,控制按键所占的单片机io口。
下面有几种方法可以扩展单片机的io口:
1. 通过数据缓存器、锁存器来扩展单片机io口。
这里采用74hc164来扩展单片机io口。
2. 采用可编程i/o接口扩展芯片。
8255a是intel公司生产的8位可编程并行接口芯片。内部有3个可编程的并行i/o口:pa口、pb口、pc口。
3. 采用矩阵键盘也可以减少io口的使用。
矩阵键盘是常用的一种方式。可以根据扫描的方法来得到按键按下的位置
4. 采用a/d获取按键的位置。
因为每个按键按下时,获得的电压不同。因此启动ad采样,根据得到的电压值的不同,判断按键的位置。
单片机io口扩展技术
在单片机家族的众多成员中,mcs-51系列单片机以其优越的性能、成熟的技术、高可靠性和高性价比,占领了工业测控和自动化工程应用的主要市场,并成为国内单片机应用领域中的主流机型。
mcs-51单片机的并行口有p0、p1、p2和p3,由于p0口是地址/数据总线口,p2口是高8位地址线,p3口具有第二功能,这样,真正可以作为双向i/o口应用的就只有p1口了。这在大多数应用中是不够的,因此,大部分mcs-51单片机应用系统设计都不可避免的需要对p0口进行扩展。
由于mcs-51单片机的外部ram和i/o口是统一编址的,因此,可以把单片机外部64k字节ram空间的一部分作为扩展外围i/o口的地址空间。这样,单片机就可以像访问外部ram存储器单元那样访问外部的p0口接口芯片,以对p0口进行读/写操作。用于p0口扩展的专用芯片很多。如8255可编程并行p0口扩展芯片、8155可编程并行p0口扩展芯片等。本文重点介绍采用具有三态缓冲的74hc244芯片和输出带锁存的74hc377芯片对p0口进行的并行扩展的具体方法。
1 输入接口的扩展
mcs-51单片机的数据总线是一种公用总线,不能被独占使用,这就要求接在上面的芯片必须具备“三态”功能,因此扩展输入接口实际上就是要找一个能够用于控制且具备三态输出的芯片。以便在输入设备被选通时,它能使输入设备的数据线和单片机的数据总线直接接通;而当输入设备没有被选通时,它又能隔离数据源和数据总线(即三态缓冲器为高阻抗状态)。
1.1 74hc2244芯片的功能
如果输入的数据可以保持比较长的时间(比如键盘),简单输入接口扩展通常使用的典型芯片为74hc244,由该芯片可构成三态数据缓冲器。74hc244芯片的引脚排列如图1所示。
74hc244芯片内部共有两个四位三态缓冲器,使用时可分别以1c和2g作为它们的选通工作信号。当1c和2g都为低电平时,输出端y和输入端a状态相同;当1g和2g都为高电平时,输出呈高阻态。
1.2 应用74hc244芯片扩展输入接口
图2是采用74hc2244芯片进行输入接口扩展的原理电路,图3是读p0口的时序。由图3可以看出,当p2.7和rd同为低电平时,74hc2244才能将输入端的数据送到单片机的p0口。其中,p2.7决定了74hc244的地址,0000h-7fffh(共32k)地址都可以访问这个单元,这就是用线选法所带来的副作用。通常可选择其中的最高地址作为这个芯片的地址来写程序,如这个芯片的地址是7fffh。但这仅仅是一种习惯,并不是规定,当然也完全可以用0000h作为这个芯片的地址。当确定了地址之后,其接口的输入操作程序如下:
’
其中movx类指令是mcs-5l单片机专用于对外部ram进行操作的指令。由于外部i/o与外部ram是同一接口,所以一般使用这条指令对外部i/o进行操作。一旦执行到movx类指令,单片机就会在rd或wr(根据输入还是输出指令)引脚产生一个下降沿,这个下降沿的波形与p2.7相或,则会在或门的输出口也产生一个下降沿,这个下降沿将使74hc244的输出与输入接通,这样,输入设备的数据就可以被mcs-51单片机从总线上读取。
需要说明的是,74hc244是不带锁存的,因此,如果输人设备提供的数据时间比较短,那么就要用带锁存的芯片进行扩展,如74hc373,74hc573等。
2 输出接口的扩展
由于单片机的数据总线是为各个芯片服务的,一般不可能为一个输出而一直保持一种状态,因此,输出接口的主要功能是进行数据保持(即数据锁存),也就是说,输出接口的扩展实际上就是扩展锁存器。
2.1 74hc377芯片的功能
输出接口扩展通常用74hc377芯片来实现。该芯片是一个带允许端的8d锁存器,其芯片的引脚如图4所示,各相关引脚的功能如下:
d0~d7为8位数据输入端;
q0~q7为8位数据输出端;
g为使能控制端;
clk为时钟信号,上升沿锁存数据。
表1所列是该芯片的真值表。
2.2 应用74hc377芯片扩展输出接口
图5是利用74hc377进行输出接口扩展的电路连接图。图中,74hc377的g端与p2.6口相连,其地址是x0xxxxxxb,如果把“x”全置为1,则为1011 1111 1111 1111b,这样,0bfffh就是该芯片的地址了。
由于mcs-51的wr是与74hc377的clk端相连的,当wr信号由低变高时,数据总线上的数据为输出数据,而此时p2.6输出低电平,g有效,因此,数据就被锁存。其相关程序如下:
mov dptr,#0bfffh
mov a,#data
movx @dptr,a
此外,利用74hc373芯片、74hc573芯片也可以进行p0口的扩展。
3 接口扩展实例
在实际的应用系统中,可能需要同时扩展多个i/o口,以满足应用系统的需要。而各个输入、输出扩展i/o芯片应通过74ls138进行“全地址”译码选通,从而分时复用数据总线db (databus)。为了防止过渡干扰对译码选通逻辑造成的影响,单片机系统所用的外围芯片一般均设为双步选通方式,即除了配置译码选通端外,还应配置使能选通端。而74hc244芯片本身没有明显的片选和读/写控制端,设计时通常采用译码和读控制信号来同时控制74hc244的cs,从而有效地抑制输入/输出数据信息的过渡干扰。
此电路输入口扩展采用2个74hc244。其输入端接键盘或其它数字信号;而输出口扩展则选用2个74hc377,以用于控制数码管、发光二极管、继电器等。其详细电路原理图如图6所示。
其部分代码如下:
51单片机的数据/地址/控制总线端口都有一定的负载能力,p0口可驱动8个ttl门电路,p1口、p2口和p3口可驱动4个ttl门电路。负载超过上述规定一般应加驱动器。总线驱动器可以使用ttl型三态缓冲门电路74hc244、74hc245。另外,在扩展口线的同时,还应兼顾配置总线驱动器,注意总线负载平衡的配置。在总线上适当安装上拉电阻可以提高总线信号传输的可靠性。
此外,一个系统可能由于存在各种干扰及不稳定因素而出现故障,为解决这一问题,设计时也可以从软件设计方面采取一些措施。
利用DSP芯片和液晶模块实现液晶显示车载信息系统的设计
博通集成2023年第三季度营业收入1.84亿元,同比增长19.65%
赋能元宇宙,背发光集成微透镜VCSEL芯片有看头
用于DC-DC转换的降压型BUCK电路
【仿真百科】磁场电磁学简介(上)
单片机io口扩展技术详解
小马智行融资4.66亿美元 加速自动驾驶研发和商业化应用
有关于检测电线电缆重要指标的简单分析
首款太阳能电子价签亮相NRF,汉朔启航绿色科技创新征途
4G低价及超低价优惠套餐大幅减少与5G无关
三星欲借新机Galaxy S8翻身?1月中先公布Note7爆炸原因
中国99%人口实现4G网络覆盖,超95%行政村通光纤宽带网络
利用工业物联网如何改造化学流程控制
选用MOS管还是三极管?
比亚迪加入拉美锂矿开采,锁定动力电池供应链
FPGA取代AI加速器中的GPU
Delta-Sigma模数转换器的优点
基于FPGA技术的RFID板的标签有什么不一样的
读书笔记常用的5款思维导图软件,你正在用哪款?
光伏+沙漠将会是一个巨大的新兴市场