历史上的今天
返回首页

历史上的今天

今天是:2025年01月28日(星期二)

2021年01月28日 | 由MOVX指令深入分析51单片机总线时序及扩展

2021-01-28 来源:eefocus

简介:分析了MCS单片机" title="51单片机" target="_blank">51单片机访问外部存储器指令MOVX的执行过程,介绍了51系列单片机使用的四要素;分析了51单片机在外部扩展、总线时序、地址译码方法重点以及对超过64 KB地址空间访问的方法。并以实验室研制的MCS51单片机实验仪为例,分析了外部空间开展的重要性、方法和原理,给出了单片机系统扩展框图和地址译码表。


AT89C51单片机是ATMEL公司设计生产的与MCS51内核兼容的51系列单片机之一,该系列单片机以其优越的性能和成熟的技术在控制和自动化应用领域占有着较大的市场;除此以外,51单片机有着计算机系统中经典的总线结构,即:数据总线、地址总线和控制总线。


在实际应用中,单片机的4个端口中,P0口通常是作为地址/数据总线复用;P2口作为高8位地址总线,高8位地址线在有多余I/O的情况下,配合外部的组合逻辑电路一起构成外部总线译码使用;P3口通常作为第二功能使用,则提供给用户使用的I/O仅仅是P1口。在多数应用场合下是不能满足要求的,因此51单片机系统就或多或少地需要进行系统扩展。另外,由于其内部的RAM只有128 B,在使用C语言进行程序设计时显得比较不足,必要时需进行外部RAM扩展,方法与扩展外部I/O相同。实际应用中,使用总线方法可以较容易地实现51单片机外部的I/O、RAM、LCD、ADC、DAC等等外设的操作,以弥补51单片机片内外设的不足。


1 MCS51单片机系统的四要素


1.1 51单片机系统的启动


MCS51单片机上电正常工作,需具备以下四点:


(1)电源。AT89S51系列单片机的第40引脚为VCC,外加电压5 V工作电压,另外,单片机的第20引脚是GND,须连接到系统的地。


(2)复位电路。任何处理器都需要在上电时进行自身的复位,51单片机也不例外,上电复位电路是较为简单可靠的电路之一,不可缺少。复位电路如图1所示,该图为带上电复位及手动复位两种结合,二极管D1在系统瞬间掉电能帮助系统快速放电,使系统重新复位,以提高系统的可靠性。



(3)振荡电路。如图2所示,51单片机的第18脚和第19脚为两个外接振荡的引脚,是内部振荡方式的典型电路, 外接的33 pF电容可以提高振荡的稳定性。



(4)EA。AT89S51单片机内部有4 KB的程序存储器,不需要外部的ROM空间,如果不够可以选择AT89S52或其他内部存储器更大的单片机,所以接高电平,即:不使用外部ROM,只使用内部的存储器。


1.2 MCS51单片机系统的存储器结构


MCS51单片机的存储器分为片内和片外两个部分,即:内部的ROM/RAM和外部的ROM/RAM,编写程序时必须清楚每一个存储单元的用途和功能,这样才能更好地进行系统存储器资源的分配。51单片机的另一个特点是外部的RAM空间和I/O空间共用外部的64 KB空间,因为外部总线的地址线为16 bit,所以能够访问的最大地址空间为64 KB。51单片机系统在进行外部扩展时,所有外设的地址都分布在这64 KB的地址范围内,对于RAM来说,地址是连续的;而对于LCD、ADC等等部件,地址是不连续的。


1.3 51单片机的中断系统


AT89S51单片机为用户提供了可屏蔽中断源有5个,分别是:外部中断0(入口地址为:0003H)、外部中断1(入口地址为:000BH)、定时器0(入口地址为:0013H)、定时器1(入口地址为:001BH)和串行中断(入口地址为:0023H);不可屏蔽中断为复位(入口地址为:0000H)。51系列单片机的其他型号所提供的中断个数不尽相同,所有的单片机都包括上述这6个最基本的中断源,不同公司生产的51内核单片机中断源上有略微的区别。


1.4 51单片机的总线结构


由于51单片机真正可以作为双向I/O口应用的只有P1口,假设系统需要扩展外部的键盘,I/O就所剩无几了。因此,MCS51单片机应用系统设计都不可避免地需要进行系统的扩展,而I/O的扩展则是与系统总线紧密结合的。由于MCS51单片机的外部RAM和I/O口是统一编址的,因此,可以把单片机外部64 KB RAM空间的一部分作为扩展外围I/O口的地址空间。这样,单片机系统就可以把额外的RAM空间用来进行I/O空间的扩展,使用总线方式对外设进行访问[1]。


本文重点之一是介绍采用具有三态缓冲的74HC244芯片和输出带锁存的74HC573芯片来扩展一个4×4的小键盘,缓冲器和锁存器分别占用外部I/O空间中的两个地址。而无论是访问外部的RAM空间还是I/O空间,在进行汇编语言编程时都是通过MOVX指令来实现读写的。在使用C语音进行单片机程序设计时,虽然语言改变了,但是C语言程序反汇编后,访问外部仍然使用的是MOVX指令。因此,分析过程及使用中,都是以汇编语言为例进行扩展设计的。


2 MOVX指令的执行过程


MOVX指令是51单片机访问片外外设的唯一指令,与外部RAM或I/O空间进行数据的读写或者ADC和DAC等都需要使用这条指令。MCS51单片机外部RAM的地址空间为64 KB,地址总线为16 bit,访问外设可执行4条汇编指令:(1)MOVX A,@DPTR;(2)MOVX @DPTR, A;(3)MOVX A, @RI; (4)MOVX @RI, A。其中DPTR为16 bit地址寄存器,地址高8 bit存于DPH,地址低8 bit存于DPL,Ri(i=0,1)是8 bit寄存器,作为地址指针时仅存低8 bit地址。


MCS51执行上述指令时分为两个阶段:首先,是从程序存储器中取出指令代码,并进行译码;然后,执行对外设数据的读写操作。在这两个阶段中,P0口在指令执行过程中是分时复用口,指令前半个周期,低8 bit地址由地址锁存允许信号ALE控制一个8 bit的锁存器输出,接着输出8 bit数据至外部数据总线,P2口在此过程中一直输出高8 bit地址。


由上所述,假设使用R0和R1对外设的进行间接寻址方式的访问,那么可看作是一种页面寻址,将外部的64 KB空间分成了256页,每一页有256 B地址。寄存器P2的当前值决定了当前的页地址。MCS51单片机在复位时,P2端口寄存器数值为FFH,若程序运行中没有改变P2中的值,则R0和R1只能对FF00H~FFFFH范围的外部的间接寻址,即对第255个页面进行访问。往外部空间写1 B时序图如图3所示。



因此,使用DPTR作为数据指针或者是RI,都可以实现对外部64 KB空间的访问。而指令都是使用MOVX,可见MCS51单片机系统中,MOVX指令有着非常重要的作用。


3 时序分析及系统扩展


MCS51单片机的外部总线时序扩展主要包括外部的译码电路、锁存电路等组合逻辑电路,形成整个系统的外部总线,即:数据总线、地址总线、控制总线。


译码电路采用常用的74系列3/8线译码器74LS138,该芯片的A、B、C分别接地址的最高3位,即A13、A14、A15,译码电路如图4所示;138的使能端E3接高电平,E1和E2接的是EN_138,该信号是由单片机系统的读写信号经过组合得来的,当系统对外部的总线进行读写时,读/写信号其中一个为低电平,使得EN_138控制信号输出为一个低电平脉冲信号,此时,3/8线译码器的输出Y0~Y7其中一个也会输出一个低电平脉冲,用此脉冲就可以有效地对外部设备进行片选。逻辑电路如图5所示。



通过这样的组合后就可以在总线上数据有效的时间内,通过74LS138的Y0~Y7控制外设的片选,实现有效的数据读写。尤其是在扩展外部I/O口使用的74系列的逻辑电路芯片时,这个方法尤为重要,因为这类芯片没有外部的读/写信号,只能通过单片机外部的组合逻辑电路输出一个读/写信号宽度的脉冲用以控制此类I/O芯片。若外设信号控制信号为低电平脉冲,则刚好与3/8线译码器的输出匹配,此时直接相连即可;若外设控制信号需要的是高脉冲信号,则必须在3/8线译码器的输出外面再加一级反相器电路,常用的反相器为74LS04。


以写数据往外设为例,得到的时序流程如图6所示。读数据的时序与写数据一致,只是将写信号换成读信号。

4 I/O扩展实例


4.1 行列键盘扩展


如前所述,51单片机供用户使用的I/O只有P1端口的8个引脚,远不能满足系统的需求,这样就必须通过总线的方法进行外部I/O扩展。在这里需要注意的是,51单片机系统外部I/O空间是和外部的RAM空间共用外部64 KB空间的。使用74LS573和74LS244分别进行行列的扩展,其中573锁存行信号,244读回数据,扩展了端口,实现了4×4的矩阵式行列扫描键盘,如图7所示。在此程序略,主要介绍扩展的方法。



图8所示为4×4矩阵键盘连接图。



4.2 大于64 KB空间的扩展


MCS51单片机是8位的微控制器,外部地址总线共16 bit地址,能访问的空间共为64 KB,但是如果系统中所有的外设加起来需要的地址空间超过64 KB时(如128 KB、256 KB的RAM或者需要更多的I/O空间等情况出现)就需要使用P1口或者是P3口不使用的I/O口进行线选法译码或者译码法进行额外的扩展来实现。


这种情况在单片机系统中经常会遇到,本文中介绍一种基于分页原理的扩展方法。51单片机系统虽然只有16条地址总线,在系统需要较大的RAM或I/O空间时,可以将系统中空余的I/O口作为额外的外部地址使用,例如:使用P1.0时进行线选法译码时,就可以扩展外部的128 KB空间。当P1.0为低电平时,选择第1个64 KB空间;当P1.0为高电平时, 选择第2个64 KB空间。


以此类推,假设有更多的空间需求时,还可使用专用译码器进行译码,来进行更多的选择。如此看来,就像其他处理器系统中类似地有着多余16条地址线一样。因此,在MCS51单片机系统中,实现大于64 KB空间的使用是很容易实现的,51单片机系统是使用非常成熟的系统了,而且,这样的使用可以给设计时提供了更多的选择,最大程度地降低设计成本和系统开发的难度,以及开发周期等。


4.3 单片机实验仪实例开发


在单片机实验仪上,使用了总线方式进行扩展的模块单元还有LCD显示模块、AD/DA模块、流水灯模块等部分。


表1给出了实验仪上所有的通过总线方式进行外部扩展的单元及其地址和片选信号线,其中,各个模块的访问地址实际上是一个地址的范围,这里只给出一个。没有使用到的地址线默认为0。



在使用C语言进行程序设计时,访问外部的总线也是非常方便的,只需要在程序中包含头文件absacc.h。该文件定义了访问外部空间的方法,如进行LCD的设计时,定义下面条语句:


#define com_lcd XBYTE[0xe001] //命令地址


#define data_lcd XBYTE[0xe000] //数据地址


#define read_lcd XBYTE[0xe003] //读状态地址


之后,通过对定义的3个地址变量的访问,即可实现对外设的访问,非常方便。因此,在单片机适应的场合,对外设较多的情况之下, 只要在速度等要求不高的情况下,采用51单片机也是可以实现高效的控制系统。


通过上述分析及实际应用设计,可以看出MOVX指令在MCS51单片机系统中的重要地位,尤其是进行系统扩展时,其地位显得尤为重要。虽然,现在控制系统多采用了C语音进行设计,但是万变不离其宗,了解和掌握单片机系统底层的指令系统及其应用方法是非常重要的。只要使用外部总线扩展,本文提到的逻辑扩展方法都是非常可行的,而这些都是建立在对MOVX指令的使用和研究上。因此可以说,掌握了MOVX指令的使用,就掌握了MCS51单片机系统总线及时序扩展的方法。


推荐阅读

史海拾趣

Aerovox Corporation公司的发展小趣事

Aerovox Corporation成立于1922年,是一家专业生产电容器和电子元件的公司。以下是关于Aerovox Corporation发展的五个相关故事:

  1. 成立与初期发展: Aerovox Corporation于1922年在美国马萨诸塞州波士顿成立,最初名为"Northeast Electric Company",后来改名为"Aerovox Corporation"。公司的创始人是W·H·J·Gilbert先生,他致力于开发高性能的电容器。起初,Aerovox主要生产电感线圈和电容器,为无线电和电视等新兴行业提供支持。

  2. 二战期间的发展: 在二战期间,Aerovox Corporation转向军事市场,为美国军方生产电容器和其他电子元件,支持军事通信和雷达系统的发展。这一时期,公司迅速扩张并积累了丰富的技术经验。

  3. 技术创新与扩张: 随着电子技术的不断发展,Aerovox Corporation不断进行技术创新,推出了一系列具有创新性的产品,包括高压电容器、电感器和电源解决方案。公司不仅在军事领域取得了成功,还在民用市场上获得了广泛的应用。

  4. 全球化和市场拓展: Aerovox Corporation通过建立全球销售网络和合作伙伴关系,拓展了国际市场。公司在美国以外的地区设立了生产基地和销售办事处,提供定制化的解决方案,满足客户不断增长的需求。

  5. 持续创新与领先地位: 如今,Aerovox Corporation仍然致力于持续创新,不断开发新的产品和解决方案,以满足不断变化的市场需求。公司在电力电子、医疗设备、工业自动化、交通运输等领域拥有广泛的应用,保持着行业领先地位。

这些故事展示了Aerovox Corporation作为一家具有悠久历史和丰富经验的电子公司,在不同时期和领域的持续发展和创新。

Gold Peak Group公司的发展小趣事
确保所有元件的接线正确无误,避免出现接错线或短路的情况。
华宇创公司的发展小趣事

在21世纪初,电子科技正处于蓬勃发展的时期。李华,一位在电子行业摸爬滚打多年的工程师,决定创立自己的公司——华宇创,专注于智能电子设备的研发和生产。创业初期,华宇创面临着资金短缺、技术瓶颈等诸多挑战。然而,李华凭借对技术的热情和坚定的信念,带领团队日夜兼程地研发新产品,最终成功推出了首款具有竞争力的智能手环,获得了市场的初步认可。

Ferroperm公司的发展小趣事

Ferroperm公司非常重视产品的品质管理。他们建立了严格的质量管理体系,从原材料采购到产品生产、检测等各个环节都实行严格的质量控制。同时,Ferroperm还注重持续改进,不断引进先进的生产设备和检测技术,提高产品的质量和性能。这种对品质的执着追求使得Ferroperm的产品在市场上获得了良好的口碑和信誉。

CANOPUS公司的发展小趣事

随着电子技术的飞速发展,CANOPUS开始探索将传统鼓制作技艺与现代电子技术相结合。公司不断投入研发,推出了一系列具有创新性的电子鼓产品。这些产品不仅保留了传统鼓的音质和手感,还加入了现代电子元素,使得演奏更加多样化和便捷。

迈翔科技(COILMX)公司的发展小趣事

进入21世纪后,迈翔科技面临了来自国内外同行的激烈竞争。为了保持竞争力,公司投入大量资源进行技术研发和创新。通过不懈努力,公司成功开发出了一系列高性能的贴片功率电感和大电流电感,这些产品凭借卓越的性能和稳定的品质,迅速获得了市场的认可。

问答坊 | AI 解惑

[求助] 逆变器仿真有什么软件比较好?

逆变器仿真有什么软件比较好?…

查看全部问答>

关于下载内核大小的问题

在wince下我用一个叫USBD.EXE的东西下载内核(这个东西不知道怎么来的,我到现在这个公司就已经有这个东西了,其他人也不知) 每次下载内核的时候都是在PB下打开命令行工具:Build OS->Open Release Directory,然后输入USBD这个命令,就直接下载了 ...…

查看全部问答>

求教:vxWorks应用程序如何能让系统重启?

vxWorks应用程序如何能让系统重启?…

查看全部问答>

哥们有一个wince的开发项目有有兴趣的朋友可以联系我,我把需求发过去。哥们不白用兄弟们的。有偿服务project911@163.com

哥们有一个wince的开发项目有有兴趣的朋友可以联系我,我把需求发过去。哥们不白用兄弟们的。有偿服务project911@163.com…

查看全部问答>

2407和2812选哪个?

项目可以用2407完成,是不是就没有必要用2812呢?两者之间的差别大吗?比如成本方面?…

查看全部问答>

L297+298资料并驱动步进电机

本帖最后由 paulhyde 于 2014-9-15 03:31 编辑 方便大家驱动步进电机!!!  …

查看全部问答>

购入一块ARM7开发板,求指导

完全新手,一点点琢磨,问模拟量输入是什么?怎么理解?…

查看全部问答>

超高频RFID一体机-周计划

嗯,上传周计划吧,时间很紧呐! Beaglebone外围电路设计周计划模板超高频RFID一体机试用者ID:lyzhangxiang     周计划周论坛提交内容9.27-10.3      (第一周)1、ti-sdk-am335x-evm文档熟悉便于开发,并 ...…

查看全部问答>

做了个小东西,来晒室内的温度

貌似我的强迫症啊越来越严重了,我想知道当室温度达到多少时我才需要开空调,当室温多少时我感觉不冷不热 于是做了这个,把这些数据都量化了 用STC12C5628AD+DS18B20+1602+键盘 键盘是用来设置报警温度的,但没蜂鸣器(有的话也响的烦,还是没 ...…

查看全部问答>