单片机原理(4):系统扩展、外围接口

2023-12-26 09:08

本文主要是介绍单片机原理(4):系统扩展、外围接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当单片机内部功能不能满足应用系统的要求,经需要在片外连接相应的外围芯片以满足应用系统的要求的过程,叫做系统扩展。

通过外围接口技术,可以通过单片机来控制LED数码管、键盘、LCD显示屏等外部设备以及进行A/D、D/A转换,使单片机应用在更为广泛的领域。

系统扩展

51单片机中集成了CPU、I/O口、定时器、中断系统、存储器等计算机的基本部件,外加电源、复位电路和时钟单路等简单的辅助电路即构成一个能够正常工作的最小系统,电路如下图所示:

最小系统

51单片机有很强外部拓展能力,大部分常规芯片都可作为单片机的外围扩展电路,可进行的拓展有存储器扩展、I/O口扩展、串行总线接口存储器扩展等。

系统拓展

总线(Bus)是计算机内部CPU、内存、输入、输出等设备传递信息的公用通道,它是由导线组成的传输线束, 主机的各个部件通过它相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。按照计算机所传输的信息种类,计算机的总线可以划分为地址总线(Address Bus)、数据总线(Data Bus)及控制总线(Control Bus),分别用来传输数据、数据地址和控制信号。

单片机的系统扩展法有并行扩展法及串行扩展法,并行扩展法是用单片机的地址总线、数据总线及控制总线进行系统扩展,而串行扩展法是用SPI(Serial Peripheral Interface)总线或者I2C(Inter-Integrated Circuit)总线进行系统扩展。

系统总线扩展
总线信号
对应引脚扩展总线信号名信号含义
P0口锁存输出A0~A7地址总线低8位
P2口A8~A15地址总线高8位
P0口D0~D78位数据总线
ALEALE控制信号,地址锁存使能
PSENPSEN控制信号,程序存储器ROM使能,低电平有效
EAEA/VPP控制信号,外部访问使能,低电平有效
RDRD(P3.7)控制信号,读信号,低电平有效
WRWR(P3.8)控制信号,写信号,低电平有效

51单片机包含的系统总线信号如上表所示,为了减少引脚数量,51系列单片机的扩展总线中,数据线和地址线采用了分时复用技术。

P0口除了作一般I/O口外,还可以分时复用传送地址总线信号的低8位(A0~A7)和数据总线信号(D0~D7),它在某一时刻传送的是低8位地址信号还是数据信号由ALE引脚的电平状态指明。 P2口除了作一般I/O口外,还可传输地址总线信号的高8位(A8~A15)。其他系统总线信号都为控制信号,在执行不同指令时,随硬件产生。

实际使用时,通过外接一个8位锁存器,可以实现地址信号和数据信号分离,如下图中使用74LS373实现信号分离电路原理图:

信号分离

进行总线扩展时,由于地址总线的宽度为16位,故外部ROM或RAM的最大直接寻址范围都为64KB,同时它们的地址可以重叠使用。

地址译码法

进行总线扩展时,首先要进行的是分配地址空间,就是把64KB的寻址空间通过地址译码的方法分成若干个大小相同的页面,其中低位地址线用来选择页内单元,高位地址线则用于页面的选择,不同的外部设备占用不同的页面。分配完成后,就要想办法进行地址译码,以方便单片机进行寻址。常用的地址译码方法有全地址译码法及“部分地址译码法”。

全地址译码是指所有的地址线都参与译码,所得到的地址空间是连续的,每一个数据单元与地址是一一对应的,其电路的结构一般比较复杂。例如一个存储页面大小为8KB,要把64KB的存储空间分成8个页面,则所有高位地址A13~A15都必须参与译码,产生8个独立的页面选择信号,形成一个连续的地址段,一般采用3-8译码器来实现,如下图:

全译码

部分译码是指只有一部分地址参与译码,所得到的地址空间是非连续的地址段,没有覆盖整个可寻址空间,一个数据单元可能与几个地址对应。如下图:

部分译码

还有一种线选法是部分译码法的特殊形式,即对地址线不进行译码,直接用地址线来选通数据单元,其得到的地址空间也是非连续的。比如,不用外加译码电路,仅用高位地址线就把64KB的寻址空间区分成若干区,如图下图所示:

线选法

存储器扩展
ROM扩展

51单片机访问外部ROM时,其控制总线仅由ALE、PSEN和EA组成。当EA = 1,单片机要访问的地址的超出片内ROM的范围时,将自动转向进行片外ROM寻址。可以通过“MOVC A, @A+DPTR”这条指令访问外部ROM。指令执行过程中控制信号的逻辑关系和时序如下图:

访问外部ROM时序

采用2764扩展32KB ROM时,接线图如下:

扩展ROM接线图

RAM扩展

51单片机访问外部RAM时,控制总线由ALE、PSEN、RD及WR组成。当执行“MOVX A, @DRTP”、”MOVX @DPTR, A“”指令时,进行读、写外部RAM的操作,指令执行过程中控制信号的逻辑关系和时序如下图:

访问外部RAM时序

采用SRAM芯片61128扩展32KB RAM时,接线图如下:

扩展RAM接线图

并行扩展I/O口的方法,与扩展RAM的方法基本一致。

外围接口技术

LED显示器

LED(Light Emitting Diode)显示器是若干个发光二极管组成的显示字段的显示器件。常用的LED显示器有七段数码显示器。

七段LED数码显示器由8个发光二极管组成,根据内部LED的连接形式不同,可分为共阴极和共阳极两种。共阴极发光二极管的阴极连接在一起,共阳极则阳极连接在一起,其电路连接如下图:

LED数码管

选用共阴极的数码管时,所有LED的阴极连接在一起接地,当某个LED的阳极接高电平则对应的LED便点亮。共阳极数码管则相反,当某个LED的阴极接低电平则对应的LED便点亮。每次把某些特定的LED点亮,就能使数码管用来显示一些数字或符号,LED数码管共8位,正好是一个字节,习惯上以“a”段对应段码字节为最低位,这样,只需要输入不同的段码,就能获得不同的显示。

LED数码管的显示方式一般都采用动态显示,这种方法节省I/O口,然而在这种方法在任意时刻只有一位显示器能被点亮,显示位数较多时,需要采用动态扫码,动态扫描的频率有一定要求,要使人眼无法察觉。频率过低的话,LED将会出现闪烁现象,而频率太高,每个LED点亮的时间太短,LED的亮度太低,肉眼无法看清。程序上常采用的是调用延时子程序的方法,选通某一位LED使其点亮并保持几个ms左右的时间。

键盘

在单片机应用系统中,往往需要向单片机输入一些指令或参数,而单片机的运行结果有时也需要通过外部显示器或打印机输出出来,以供操作者及时了解和掌握单片机的运行状况。这样就构成了一种人机的交互接口。由于单片机本身的特点决定了其无法具备键盘、显示器、打印机等人机交互部件,所以只能通过其I/O口来扩展这些功能。

键盘可分为编码键盘和非编码键盘。编码键盘上闭合键的识别由专门的硬件实现,非编码键盘则通过软件来即时实别。单片机一般都采用的是非编码键盘。

单片机系统中所使用的键盘都是机械式的弹性按键,因为存在机械触点的弹性作用,在按键闭合和弹起的瞬间都会出现抖动,按键抖动一般会持续5~10ms,为使一次按键仅被处理一次,必须消除按键抖动。消除按键抖动可以采用软件消抖或硬件消抖。

硬件消抖通常采用RS触发器来实现,需要在电路上改进,较为复杂。软件消抖更为简单,在检测到有按键闭合时,延时一小段时间之后再次检测,如果仍然检测到按键闭合,则认为按键真正闭合。

键盘的连接单片机接口的方式有独立式和矩阵式。独立式键盘的每个键都单独与一个I/O口相连,各键的输入状态互不影响。单片机通过检测对应I/O口的电平高低就可以判断出是哪个键被按下,然而当按键数目较多时,占用的I/O口也较多。

需要的按键数量较多时,通常都采用矩阵式的连接方式。矩阵式键盘由行线和列线组成,所以有时也称行列式键盘。按键位于行、列线的交叉点上,行、列线又分别与I/O端口相连。其连接方式如下图:

矩阵式

矩阵式键盘的识别方法通常采用扫描法。先令某根列线,例如0号列线输出为“0”,其余三根列线输出为“1”。再依次扫描行线的状态,如有某根行线为“0”则表示该行线与0号列线交叉处的键被按下。如果行线都为“1”,则没有键被按下。同样,可以依次将下一根列线置“0”,同时其余列线“1”,并扫描行线,这样就可以判断出被按键的位置。


更新历史:
* 2017.11.28 完成初稿
原文链接

这篇关于单片机原理(4):系统扩展、外围接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/538829

相关文章

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用