单片机的问题,关于KEIL和单片机的内存

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-17
用单片机计算 内存不够

解决方案:
一、在原有的单片机上改动。
1、优化程序,有效果,但效果其实不大。
2 、自己扩展片外的RAM,一来是费硬件的钱,二来是电路要不停的飞线。
二、换一大内存的单片机。比如STC32F103C8T6,三个串口,16K的RAM。
三、减少串口对数据的接收量,比如只检查$GPRMC信息,提取到坐标后就把其他信息丢弃了。

FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED
MODULE: D:\KEIL\C51\LIB\C51L.LIB (-----)
LIMIT: 0800H BYTES
----
没有破解,有 800H 字节的限制。

这个问题的理解主要有两点:
1、单片机的特殊功能寄存器。
2、KEIL软件的sfr变量声明的用法。
sfr P0=0x80;
解释:
1、特殊功能寄存器中,0x80存储的是P0口的状态。
2、这个语句将P0定义为一个变量,其内容为特殊功能寄存器的0x80寄存器。
3、P0可以更改名字例如:sfr PORT0=0x80;这样在程序中使用的时候,PORT0的数据就是单片机P0口的数据。

其详情请参考《Keil Software – Cx51 编译器用户手册》的“特殊功能寄存器(SFR)”章节。
下面做简单介绍,若要文档请邮箱联系。
1、8051 系列微处理器提供一个特别的存储区作为特殊功能寄存器 SFR。 用在程序
中的 SFR 可控制计时器 、计数器、 串口、 并口 和外围设备。 SFR 的地址从 0x80 到
0xFF, 可以以位、 字节 和字访问。
2、sfr
SFR和别的C变量一样声明。 唯一的不同点是数据类型是sfr而不是char或int。
例如:
sfr P0 = 0x80; /* port-0,address 80h */
sfr P1 = 0x90; /* port-1,address 90h */
sfr P2 = 0xA0; /* port-2,address 0A0h */
sfr P3 = 0xB0; /* port-3,address 0B0h */
P0、 P1 、P2 和 P3 是声明的 SFR 名。 sfr 变量的名称和别的 C 变量一样定义
在 sfr声明中可用任何符号名。
在等号 = 后指定的地址必须是一个常数值, 不允许带操作数的表达
式。 传统的 8051 系列支持 SFR 地址从 0x80 到 0xFF。 PHILIPS 80C51MX 提供
一个附加扩展的 SFR 空间 地址范围是 0x180 到 0x1FF。

51单片机 0-0x7F是内存,0x80-0xFF不是真正意义上的内存,是特殊寄存器(SFR)区,这里有21个SFR,P0是其中之一,它是与单片机的引脚相连的,即P0口。
关于上电后的值,每个SFR都有复位默认值,不会变。
这21个SFR大多数与编程关系密切,不把它们搞清楚,你就没法编程序,每一本书上都讲得很详细。找一本书好好读一读,祝你成功!

0x80位于51单片机的高128字节直接寻址空间,也就是SFR(特殊功能寄存器)。
每次上电复位后该地址的数值会自动置为0xFF。

就是80H这个存储单元。每次开机时默认是FFH。

  • 怎样让Keil软件同时兼容51单片机和ARM单片机的问题
    答:我的电脑先安装keil2,再安装keil4,结果,keil4也能编译51单片机程序,注册和破解时要多破解一次,目标先选择C51,后选择ARM 上图器件选择ATMEL下有很多51单片机ARM下面有CORTEXM3等ARM芯片
  • 51单片机keil的编程问题
    答:unsigned char 和 unsigned int 的区别就是位数不同吗,前者是8位二进制数,最大值是255,占用一个字节内存。而后者是16位数,最大数是65535,占用两个字节内存。当数据大于255,就必须用int型。而数据小于256时,就尽量用char型,不要用int型,以节省单片机内存。因单片机内存很有限,要节省内存...
  • 怎样让Keil软件同时兼容51单片机和ARM单片机的问题
    答:有两种方法:方法一:把C51和MDK安装在同一个目录下,下安装C51在安装MDK,注意先不要破解,安装完成破解顺序是下破解MDK在破解C51,这样就完美解决。方法二:我就不给你写出来了,看下面链接。https://wenku.baidu.com/view/e084d181e009581b6ad9eb2a.html ...
  • 关于KEILC51单片机延时问题
    答:执行空语句执行124次,大概就能延时到1秒.不是很准的.经验值。如要算的话:比如51,mdelay函数想延时1ms,而执行for(i=0;i<124;i++),假设4个机器周期,每个机器周期时长为[12*(1/晶振频率)秒],若晶振为6MHz时,每个机器周期为2us,这样124*4*2是992us,加上for(;Delay>0;Delay--)...
  • keil编程软件介绍 C语言与单片机的联系 越详细越好```
    答:1、单片机的c是继承了标准c的绝大部分的特性,基本语法相同,但其本身又在特定的硬件 结构上又有所扩展如keywords:sbit,data,idata,pdata,xdata,code等等。。。2、应用单片机的c更要注重对系统资源的理解,因为单片机的系统资源相对pc来说很贫乏,对于每一个ram,rom中的byte都要充分利用,可以多看看编译...
  • 如何在Keil uVision4 中加入STC系列单片机型号
    答:选项。3、然后在电脑中选择keil的安装目录(如:C:\keil),选中keil文件夹,点击确定按钮。4、然后在弹出的对话框中,直接点击确定按钮。5、打开keil4软件,新建一个工程文件,就可以通过下拉箭头选择STC MCU Database。6、然后在出来的界面中,选择好需要的stc单片机型号即可。
  • 51单片机,keil 软件 C语言问题(我错在哪了)
    答:……p0=0x00;//关闭数码管---P0,应该大写 ……//主机串口接收中断函数 void serial_INT()interrupt 4 { uint k;---在这里定义 uint j;---在这里定义 if(RI)//接收到一字节 { RI=0;//清除串行接收中断标志 while(SW){ SPK=~SPK;LED=~LED;// uint j;--不要在这里定义...
  • 关于c51单片机使用keil编译器的一些问题?
    答:1.如果没有被调用,就不会被编译,自然不占用空间。2.只要结构体有元素被使用,就要占据整个结构体的空间。3.多出来的0.2是位变量,表示你用了两个bit的变量。
  • 关于单片机的问题
    答:1、硬件设备:电脑一台、开发板一个(可网上购买价格十几块钱到一百多不等)对于初学者,建议网上购买有配套视频教程的板子。如力天的,郭天祥的51开发板已经过时了,不建议买。不过郭天祥《十天学会单片机》教程到时可以学习学习。2、软件:Keil C51 3版本的编译环境。对于初学者,如果你没有足够的...
  • 51单片机的初学者 keil编程出现问题帮忙看看吧
    答:程序及仿真电路存在其他健壮性问题,这里不予表述及建议。主要问题:while(1)循环有问题。原因分析:你的main函数进来a=P1,只是给a附一个初值,然后一直循环while(1)里面。while(1)里面a的值一直是初值(0xff),switch函数根本侦测不到按键值。短期建议:while(1)内添加获取键值代码为 a=P1。