为什么这个单片机c语言通不过编译?高手来解答

来源:百度知道 编辑:UC知道 时间:2024/06/09 20:37:24
有若干个ASCII码存放在片内RAM从31H开始的内存单元中,将它们分别转换成十六进制数,存放在片内RAM40H开始的单元中,ASCII的个数储存在30H单元,要求用C51编程实现:
程序如下:
#include<absacc.h>
void main(void)
{
unsigned char data i,n;
n=DBYTE[0x30];
i=0;
while(i<n)
{
if(DBYTE[0x30+i]<=0x39)
DBYTE[0x40+i]=DBYTE[0x31+i]-0x30;
else
DBYTE[0x40+i]=DBYTE[0X31+i]-0x37;
i++;
}
}
编译出错信息如下为什么
linking...
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
SYMBOL: MAIN
MODULE: 144558.obj (144558)
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?MAIN?144558
Program Size: data=11.0 xdata=0 code=84
Target not created
还有这段语句为什么DBYTE[0x40+i]=DBYTE[0X31+i]-0x37要减去0X37才能得到ASCII码 A

不知道你的编译器的语法规则,不过
好像都是支持C 的,不支持 C++.

也许,
unsigned char data i,n;
应该写成
unsigned char data i;
unsigned char data n;

A的问题,16进制里A 应该是 10, B是11...
‘A’的ASCII码值是 0x41, 65
65-10 = 55 = 0x37

比如字符是 'B' 0x42, 66
那么 -0x37 就是 11.