前面定义的全局变量数组wenzi[]末尾应该有分号,而不是逗号。
延迟子程序中使用库函数_nop_( );头文件intrinsic.h 必须包含在#include 中。因为没有添加头文件,所以无法识别_nop_(),从而导致变量p错误。
两个延迟子程序前面必须有 void ,否则编译时会发出警告。
主程序还有几个错误,请修改如下
[img]是的。
1 创建一个新文件,例如:zmdata.c
2 然后定义数据
无符号字符代码 zm1[] = ......
无符号字符代码 zm2[][16]= ....
移至zmdata.c。
3。再次链接选项。在“BL51 Locate”的Code项中添加?CO?ZMDATA(1400H)
** 1400H 根据实际情况指定地址
** ZMDATA:是zmdata的文件名。
void display(uchar a,uchar b,uchar c,uchar d)---------这句话是错误的。
意思是虽然你使用了a传入参数,但是在这个函数中你并没有使用它。
如果显示器不使用a参数,则将其删除即可。
这是一个警告,在这里没有影响。
链接中给出的代码已编译,没有任何错误。
复制并粘贴如下:
#include reg52.h
#include intrins.h
无符号字符tmp;
无符号整数 c=0;
sbit led1=P2^0; //指示灯0
sbit led2=P2^1; //指示灯1
sbit led3=P2^3; //指示灯3
void init(); //串口初始化
void send(unsigned char a); //单字节发送函数
void ctrl(); //接收处理函数
void main()
{
init();
同时(1)
{
if(RI==1) //是否有数据到来
{
RI = 0;
tmp = SBUF; //暂时存储接收到的数据
ctrl();
}
}
}
void init() //串口初始化
{
ES=0; //关闭中断
SCON = 0x50; // REN=1允许串口接受状态,串口工作模式1,
//10位UART(1个起始位,8个数据位,1个停止位,无奇偶校验),可变波特率
TMOD = 0x20; //定时器1工作在模式2,8位自动重载模式,用于生成波特率
TH1=TL1=0xFD; //波特率为9600(本次测试使用的晶振为11.0592)
PCON = 0x7f; //波特率不加倍
TR1 = 1; //定时器1开始工作并产生波特率
//发送标志位0
TI=0; //接收标志位0
RI=0;
//EA=0;
ES=1;
led1=0; //初始化3个指示灯全部亮
led2=0;
led3=0;
}
void send(unsigned char a) //单字节数据发送
{ //注意:如果单片机TXD(P3.1)没有上拉能力,必须在P3.1上接上拉电阻。此测试需要上拉电阻
TI=0;
SBUF=a;
同时(TI==0);
TI=0;
if(c%2) //发送指示灯标记。每次收到时,此灯会交替亮起和熄灭
led3=1;
其他
led3=0;
c++;
}
void ctrl() //接收处理函数
{
开关(tmp)
{
案例'1':
led1=1; //接收到字符1时,指示灯0灭
发送(tmp);
打破;
case '2': //接收到字符2,指示灯1灭
led2=1;
发送(tmp);
打破;
case '3': //接收到字符3,指示灯0和1亮
led1=0;
led2=0;
发送(tmp);
打破;
case '4': //接收到字符4,指示灯0和1熄灭
led1=1;
led2=1;
发送(tmp);
打破;
case '5': //接收到字符5,指示灯3亮
led3=0;
发送(tmp);
打破;
default: //其他,所有灯都关闭
led1=1;
led2=1;
led3=1;
发送(tmp);
}
}
上面的代码,没有任何修改,正是问题链接中给出的。
idata 段空间溢出。检查您自己的变量分配。
C51和C52存储数据容量有什么区别?可以给我更详细的信息吗
Flash/ROM 前者为4kB,后者为8kB。至于其他差异,则取决于制造商和系列设计。如果是同一厂家、同一系列,则没有其他区别。
上面的数据是指片内RAM还是片外RAM?它们应该是什么?另外,有多少代码空间?
提示是idata段溢出。这是片上 RAM,它是 256 字节的内部寻址空间。如上所述,代码空间为8kB。
有人说C52的存储空间比C51多。这是真的?如果是这样,那为什么我使用C52芯片并调用C52库,它仍然是这样?
如上所述。 “C52库”是你的创新表达,一个闻所未闻的概念。
有人说在内存模型中选择compact:pdata中的变量就可以了,但在COMPACT模式下,所有变量都定义在片外XRAM中,采用分页寻址。我没有焊接另一个芯片来扩展外部RAM。这个设置方法可以吗? (片外RAM一定是指外部芯片扩展RAM吗)
这是最不负责任的建议。仅当您的硬件平台具有扩展 RAM(无论是片内还是片外)并且标准 51 的 256 字节不再足够时,才考虑使用扩展 RAM。而且从实际应用来看,临时变量很少分配到pdata段(效率低),反而相反。
如果不采取上述方法,还有其他方法吗?
你现在的首要任务是弄清楚你的程序的资源需求,需要多少RAM,以及硬件平台可以提供多少RAM。必须占用的RAM中,哪些访问最频繁,哪些很少与操作/任务相关...分析清楚您的需求,然后才能进行下一步,即分配RAM资源或更改RAM资源硬件设计。
可能某个文件中不小心输入了“非法内容”
解决方案:
1。建议使用高版本的编译器,因为高版本的编译器会提供更准确的提示信息
2。仔细一一检查头文件中是否存在“非法内容”。如果没有解决办法,进行下一步
3。重建新工程,将原来的文件一一添加(不知道你的H文件是怎么组织的,不过我的更方便)
以后请务必备份
以上就是Keil编译引入错误的原因,不知道怎么改。感谢您花时间阅读本网站的内容。这里有更多关于Keil编程中的常见错误和Keil编译中的错误但我不知道如何更改的信息。不要忘记在这个网站上搜索它。