单片机原理(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

相关文章

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2