关于keil中C8051F020片内RAM的问题

关于keil中C8051F020片内RAM的问题,第1张

data区是指内部RAM,在CPU中就是256个字节,4K的RAM在物理上是片内的,但在逻辑上是属于外部RAM的,也就是说你需要把变量用XDATA来修饰,这样才会用到这4K。

另外,data区的地址还包括了特殊寄存器的地址,也包括了堆栈的空间,所以实际可用的空间也就是100多字节。

化,你查看一下是否需要变化,你自己写错了。

void stop() //终止信号

{

sda=0;

delay();

scl=1;

delay();

sda=0;

delay();

}

其次,你这里对sda信号的判断写的是赋值语句,sda = 1,如果是判断的话,应该写为while(sda && (i++ < 250));

while((sda=1)&&(i<250))i++;

最后,你对C语言中的“<<”运算符好像理解有误,c中的“<<”运算符是不带进位的一位运算,被一走的位用0代替,好比说

a = 0xff;

a = a << 1;

此时的a是0xfe,而cy并没有改变,如果需要用到a的第7位可以采用判断第七位,再赋值的 *** 作,或者用intrinsh中的宏定义 *** 作吧。

不知是否有帮助,楼主自己修改一下看看吧,用C写程序记得最后看KEIL生成的汇编代码,有助于你理解KEIL的编译机制。

Proteus694、95与keilC51联调设置方法

1、将KeilC51(u2、u3均可)、Proteus6(94、95均可)都安装好;

2、下载两个软件,一个是Proteu的Vdmagdiexe,另一个是授权后的Prospicedll(两个文件链接地址看下面)

3、先运行Vdmagdiexe安装Keil接口,然后将Prospicedll覆盖在Proteus的安装文件夹下的Bin中如:D:\Program Files\Labcenter Electronics\Proteus 6 Professional\BIN;

4、打开Proteus,在下拉菜单中选(在该项前打勾);

5、打开KeilC51,点击,在标签下选择右边的单选,并在下拉框中选仿真设备;

6、在Proteus侧做好硬件连线,Keil侧写好软件,点击Keil,您可以欣赏联调了。

proteus69 sp4与keil联调几点发现:

在这里联调的一些基本 *** 作就不再赘述了

1,一定要把keil的工程和Proteus的文件放到同一个目录下(这里所说的Keil的工程指工程的目录, 即Proteus的工程Design文件(后缀名DSN)要和包含Keil工程所有文件的那个文件夹在同一层目录下) ; 经过 *** 作发现: Keil的工程目录文件夹一定要命名为keil(可能与路径设置有关,目前还不清 楚),否则proteus报错:Unable to open HEX file 'Keil\DS1302hex' keil报错: target dll has been cancelled debugger aborted!),另外 针对其他版本的联调,以上两点原则也要遵守

2,69以上版本需要添加与Keil联调补丁Vdmagdiexe,其作用就是添加在程序目录keil/c51/bin目录 下添加Vdm51dll,(注意:与其他版本不同,69以上版本Proteus 6 Professional\MODELS\目录下没 有 VDM51dll)并且修改keil目录下tools配置文件,添加两行文本:TDRV8=BIN\VDM51DLL ("Proteus VSM Simulator") BOOK2=HLP\VDMAGDIHLP ("Proteus VSM AGDI Driver"),经过实际 *** 作证明,不一定要安装补丁Vdmagdiexe,手动 *** 作也可成功实现联调功能,其中第二行非必需

3,至于Proteus 6 Professional\BIN目录下Prospicedll的作用,有网友说与授权有关,有网友说与授权有关,确有可能。默认安装的版本是早于2006626的版本,好像是2006617,替换时没记清,联调失败。当用 2006626版本代替后,联调才成功,但是用更新的2006818版本替换时,联调又会失败。

eeprom大小keil好像看不出来,只能从程序的角度推算占用量吧。

flash大小可以通过编译通过后的下方信息栏得到,比如:

data = , xdata = , code =

data是内部固有RAM,xdata是外部接口RAM,或者片内自带的SRAM,code就是falsh的大小了。

芯片复位后进入的是复位中断入口地址,一般是0,并且位于FLASH中。然后在入口处放置一条跳转指令,跳转到指定的地址执行。所以如果想复位后从RAM中执行,那么必须修改bootloader,也就是最初的那段汇编代码,把跳转的地址改成RAM的地址。

以上就是关于关于keil中C8051F020片内RAM的问题全部的内容,包括:关于keil中C8051F020片内RAM的问题、如何在KEIL中使用STC89C516的1024B RAM、keil与proteus联调,看不到ram变化等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10105583.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存