Keil code Banking总结

本文介绍了一种使用8051单片机进行代码分页(CodeBanking)的方法,使单片机能访问超过64KB的程序空间。通过自定义特殊功能寄存器实现不同代码段之间的切换,并详细介绍了如何配置开发环境和编译生成适用于外部存储器的程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个标准的8051器件能寻址64KB的代码地址空间。对于超过64KB的代码,单片机系统通常采用代码分页(CODE BANKING)的方式来扩展程序空间。在《DP-51+开发工具上程序运行及BANK原理和实现方式》一文中发现有三种方式来实现code bank,此文以自定义方式实现,具体是采用特殊功能寄存器(SFR)的方式。

新建工程是需要将STARTUP.A51L51_BANK.A51加进去,其中STARTUP.A51是新建功能是自动添加,L51_BANK.A51是手动添加的,源文件在keil的安装目录lib下。

工程新建完成后在工程选项中的Target下可设置bank的数目与大小,本例中设定为4.

Keil  co<wbr>de   Banking总结 - Tina - 集 创

修改L51_BANK.A51文件

?B_NBANKS EQU 4,即上面选择的bank数,只能是2,4,6,8,16,32,24

     ?B_MODE EQU 4,4为自定义方式

IF  ?B_MODE = 4;下面定义具体的bank切换方式。

 

Keil  co<wbr>de   Banking总结 - Tina - 集 创

本例中采用SFR的方式,自定义了一个BT的特殊功能寄存器,地址是F6,注意地址的第一个字符为字母时要在前面加0,同时在相应的reg51.h中添加此SFR,当然也可以用reg51.h现成的寄存器。SWITCH0 SWITCH1 SWITCH2、 SWITCH3定义了具体的bank切换的条件。

注意当?B_MODE = 4的时候需要打开STARTUP.A51最后一行系统复位时从bank0开始的代码,默认是关闭的。

Keil  co<wbr>de   Banking总结 - Tina - 集 创

 

 

Keil  co<wbr>de   Banking总结 - Tina - 集 创

 

最后根据实际应用把程序分成commonbank0bank1bank2bank3中,直接右击.c文件选择

编译工程后发现生成了4hex文档,H00H01H02H03,hexbin的工具生成四个bin文件,采用填充00的方式把每个bin大小固定为64k,最后合并成一个256kbin烧录到外部的存储器中。通过boot程序把code从外部的flash送到内部SDRAM中。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值