当前位置:首页 > 单片机 > 单片机
[导读]MCS51系列单片机是目前应用非常广泛的8位MCU。MCS5l系列单片机的地址总线为16位,不作扩展的情况下其最大的程序和数据地址空间为64 KB。但是随着控制领域的不断智能化、复杂化,程序代码或数据空间的大小可能远远大于64 KB。结合相应的硬件地址扩展,使用KeilC5l的Blank Switch技术可生成代码长度和数据空间大于64 KB的目标程序。

    MCS51系列单片机是目前应用非常广泛的8位MCU。MCS5l系列单片机的地址总线为16位,不作扩展的情况下其最大的程序和数据地址空间为64 KB。但是随着控制领域的不断智能化、复杂化,程序代码或数据空间的大小可能远远大于64 KB。结合相应的硬件地址扩展,使用KeilC5l的Blank Switch技术可生成代码长度和数据空间大于64 KB的目标程序。
    Keil C5l的Blank Switch技术突破了51系列单片机在地址空间方面的不足,在很多领域中拓展了它的使用。笔者就曾使用Blank Switch开发了程序空间为512 KB,数据空间为256 KB的一个较复杂的程控交换机控制程序。
    本文以该程控交换机主控制部分的实现过程为例,介绍KeilC5l的Blank Switch技术的具体应用。


1 Blank Switch技术介绍
    具体实现Blank Switch技术的是KeilC5l中的分组连接定位器BL5l。Keil C5l语言源程序经过C5l编译器编译后,生成浮动地址的目标代码文件。这种浮动地址的目标代码必须经过连接定位器BL5l的连接和定位,生成具有绝对地址的目标代码,才能写入程序存储器正常运行。
    BL51支持分组连接定位,允许生成代码大于64 KB的目标程序,可以在具有适当硬件扩展逻辑的系统中进行代码组之间的切换,以达到正常运行的目的。
    V5.03版本的BL5l可以管理最多64个代码组,每个代码组最大为64 KB。BL51连接定位器生成的0MF5l格式的绝对目标文件,可装入dSCOpe51或Intel兼容的仿真器进行调试,也可通过符号转换器OH51转换成IntelHex文件以便于EPROM编程。
    在Keil C5l开发工具的快速更新过程中,LX51成为功能更为完善的连接定位器,使用它替代BL51能够增加更多的连接定位功能。笔者使用LX5l可以更加方便程序的开发。


2 系统硬件的设计
    在采用BL5l对目标程序进行分组连接定位时,要求系统具有相应的硬件分组扩展逻辑。BL5l默认的分组方式是采用MCU的P1端口作硬件扩展地址线.采用l条Pl引脚时,分组数为2,采用6条P1引脚时,最多可分为64个代码组,剩余的Pl口线也可做其他用途。
    硬件分组还可采用外部数据存储器XDATA空间地址单元来进行,与采用805l的Pl端口作为分组地址线不同的是,对于一个指定用于分组地址的XDATA端口字节中的剩余位,不能再用于其他目的。
    在系统中,以Pl端口作硬件扩展地址线,使用了4条Pl引脚(P1.4~P1.7)。主控部分硬件基本原理图如图1所示。在这里,去除了外围控制接口(如串口)与其他CPU的互联等电路,主要突出如何实现使用Pl端口作硬件扩展来增加程序空间和数据空间.笔者使用Flash29C040作为程序存储器,通过Pl扩展引脚与该芯片的高4位地址线相连,使用32 KB空间的62256作为外部数据存储器。由于程控交换机中有很多参数和设置数据需要断电保存,所以使用了另一Flash29CO4O作为扩展的外部数据存储器。

    在这里需要注意的是,CPU地址线的最高位(P2.7)并不是直接与对应的程序Flash 29C040和数据Flash29C040地址线相连。在和程序存储器的连接中,P2.7和Pl端口通过与的关系连接到Flash 29C040的地址线高4位。公共代码区域程序始终都是从Flash 29C040的低32 KB中读取,而不需要在每个分组前存放32 KB的公共代码区域程序,从而节约了存储空间。
    在和数据存储器的连接中,增加了P1.O和P2.7组合对数据Flash 29C040的片选,主要是考虑可以增加主控芯片对外围器件的控制。例如,当设置P1.0为0,地址为高32KB时,可以扩展增加访问串口或其他器件。在本文就不再对该部分内容详细描述了。同时,需要注意安排好变量的存储地址,这一点将在下文中详细描述。
    在程序设计过程中,P1扩展地址线对程序员而言是不可见的。由BL5l产生的代码来控制硬件的扩展引脚和代码组的切换,这使程序员只需要将精力花费在代码编写和代码组的安排上,大大提高了程序设计效率和稳定性。


3 KeilC51的环境设置
    除需要正确设计硬件电路,同时还要对Keil C5l提供的文件和环境进行正确设置才能真正实现地址的扩展。下面是需要进行相关配置的几项。
    在菜单Project选择中选择Option for Target“Tar-get”选择项,按图2所示进行项目配置。
    ◆由于使用4个Pl引脚进行硬件的扩展,所以在Banks选择中使用16个物理页。
    ◆使用32KB作为一个分页的空间大小,所以在Bank Area中写入地址范围为0x8000~0xffff。
    ◆由于使用了扩展的数据存储空间,所以选择支持使用“far”变量类型,这样就能方便地使用FARRAY、FVAR等宏和指针来访问扩展的空间地址。
    在菜单Project选择中选择Option for Target“Output”选择项,按图3所示进行项目配置。

    在输出的文件格式上使用HEX-386的文件格式。这是使用LX51连接定位器时产生的一种扩展型的HEX文件类型。
    在工程窗体中,对工程中的每个源程序合理安排分组的位置,有以下几点需要特别注意:
    ◆复位和中断向量、代码常数、C51中断函数、组切跳转表、库函数这些代码必须安排在公共代码区域。
    ◆代码组切换需要大约50个机器周期和2字节的堆栈空间。因此应当仔细安排程序结构以尽量减少代码之间的切换。被整个程序经常调用的函数应当安排在公共代码区域。同时,同一功能模块的函数大多相互调用,所以应当安排在同一代码组,以减少代码组的切换,提高系统运行效率。
    ◆L5l_BANK.A51必须安排在公共代码区域。令Common代码组和BankO代码组在物理上实际是同一个代码组,所以不要使用Bank0代码组来给源程序分配空间。在L51_BANK.A5l文件中需根据硬件的具体情况配置修改以下代码。
    ◆?B_NBAbIKS EQU 16 //定义最大分组(o~64),可为2、4、8、16、32、64。
    ◆?B_MoDE EQU 0 //O:通过8051单片机的I/0口进行分组切换,l:通过XDATA存储器单元进行分组切换。
    ◆?B_RTX EQU O //0;不使用Keil的实时操作系统
    ◆?B_VAR_BANKINGEQU l //l;支持变量分页(数据空间扩展)
    ◆?B_FIRSTBIT EQU 4 //对应最低位的Pl位
    在这里需要注意的是,要根据自己系统的实际情况来安排硬件设计和软件配置。例如,如果系统中使用了RTX-5l实时操作系统,那么在L51_BANK.A5l文件中B_RTX应当改写为l。

4 程序设计的相关问题
    源程序通过对上文中环境和L5l_BAl7K.A5l文件的设置后,连接定位器,自行安排目标代码的程序空间和控制代码组程序切换。一般情况下,不需要程序员作更细微的安排,但是变量空间的安排需要根据实际系统作出合理分配。
    从硬件设计中可知,当CPU的地址线最高位P2.7为0时,不论P1扩展地址是多少,访问的数据空间是62256。在P2.7为l时,并且P1.0为1时,访问的数据空间是数据Flash 29C040。在系统中,数据存储器访问地址对应的Flash 29C020实际地址如表l所列。

    在实践过程中,使用FARRAY、FVAR等宏设置绝对地址来访问扩展的数据存储器Flash 29C040取得很理想的效果。FARRAV宏实现对扩展空间以数组方式的访问,FVAR宏实现对扩展空间以单个变量方式的访问。
    例如,在头文件中设置了如下两个宏:
    #define FAExt FARRAY(unsigned int,0x18800)//0x18800-0xlSfff 2Byte*1024
    #define FVHcad FARRAY(1ong,Oxl9000)//Oxl9000 4 Byte
    通过宏FAExtHot可以unsigned int类型数组访问29C040。通过宏FVHcad可以long类型的变量访问29C040(占用其0x9000开始的4个字节)。
    下面是读取数据的例子。
    unsisned int SingleExt;
    long Head Comp;
    SingeExt=FAExt[1];//读取数组中的第二个数据
    HeadComp=0x559;
    FVHead=HeadComp;//写入数据到29C040
    需要注意的是:
    ◆应当合理安排数组大小,不要造成存储空间的重复使用。例如这个数组的大小是1024,那么在安排后面的宏FVHead时,其地址应当在0x18fff之后。
    ◆由于使用的扩展数据存储器是Flash,所以应当注意Flash的写入是以页的方式进行的,写入数据时不要将奉页的其他数据擦除掉。
    ◆由于系统的实际需要,使用Flash做扩展数据存储器,如果应用中对RAM的空间需求很大,也可以使用2 Mb空间RAM和2Mb空间Flash的组合来进行扩展。
    ◆也可以使用far类型的变量来访问扩展的数据空间,在此不详细描述。


结 语
    采用Keil C5l的BankSwitch技术扩展5l系列单片机程序和数据空间,在硬件修改很少的情况下,便可以实现运行大于64KB的程序,访问大于64 KB的数据,充分扩展了5l系列单片机的应用空间。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭