PC机将一个千位数(如5142)发送到单片机中,怎么在单片机里将他还原成原来的千位数。或者别的整体办法?
PC机里将一个千位数(如5142)字符串式直接发送到STC单片机中了。在单片机中,采用数组的方式接收成功。如temp[10]。但是我怎么在单片机里将他还原成原来的千位数。...
PC机里将一个千位数(如5142)字符串式直接发送到STC单片机中了。在单片机中,采用数组的方式接收成功。如temp[10]。但是我怎么在单片机里将他还原成原来的千位数。
以下是中断接收的程序。
unsigned int tmp,TurnH; unsigned char temp[];
...之前一个判断了同步成功,sny=1,
if(sny)// 同步成功,存放数据
{
temp[i]=b;
//Send_char(temp[i]);
i++;
if(i==6)
{
if(temp[0]=='M')//分离数据 {
TurnH=temp[4]-0x30;
tmp=temp[3]-0x30;tmp*=10;
TurnH+=tmp;
tmp=temp[2]-0x30;tmp*=100;
TurnH+=tmp;
tmp=(temp[1]-0x30);tmp*=1000;
// Send_char(tmp);
TurnH+=tmp;
//Send_char(temp[1]);Send_char(temp[4]);
//Send_char('9');
send_string(temp,5); //返回确认
Send_char('.'); //结束符号
sny=0;
}
前三个数正常,但是到tmp=(temp[1]-0x30);tmp*=1000;就出错了,tmp返回零。
我发送的时候是直接5、1、4、2一个数字一帧的发送啊,然后单片机收就:temp[0]=5、temp[1]=1、temp[2]=4、temp[3]=2。
我上边的办法可以显示百位,能显示142,但是把高位放大1000倍,再与142相加就出错了。
zyw19987:最高位是千位啊,乘以1000就是等不到结果咯。
coolxgz:你理解错我的意思了
ATF144X:还别说,我就学了点皮毛,而且学的是汇编的,后面KEIL C 完全是自学的。而且我最烦就是各进制转换,你说的5142就是0x1524,我还是理解不了。( ⊙ _ ⊙ )!
自我补充下:
“做而论道”和“ ATF144X”两位高人的说法都可以达到目的。
一步步*10可以,一步到位乘以1000却不可以,也可能是keil C的编译方法问题。
而其中“ ATF144X”的16进制说法我试过,却做不了,但是那表达式却是可以正常转换的,之前我也用过这表达式,不过当时是忘记减0x30。
tony_sgt说的强制转换,我之前就试过了。没用。不过很感谢tony_sgt热心帮助。 展开
以下是中断接收的程序。
unsigned int tmp,TurnH; unsigned char temp[];
...之前一个判断了同步成功,sny=1,
if(sny)// 同步成功,存放数据
{
temp[i]=b;
//Send_char(temp[i]);
i++;
if(i==6)
{
if(temp[0]=='M')//分离数据 {
TurnH=temp[4]-0x30;
tmp=temp[3]-0x30;tmp*=10;
TurnH+=tmp;
tmp=temp[2]-0x30;tmp*=100;
TurnH+=tmp;
tmp=(temp[1]-0x30);tmp*=1000;
// Send_char(tmp);
TurnH+=tmp;
//Send_char(temp[1]);Send_char(temp[4]);
//Send_char('9');
send_string(temp,5); //返回确认
Send_char('.'); //结束符号
sny=0;
}
前三个数正常,但是到tmp=(temp[1]-0x30);tmp*=1000;就出错了,tmp返回零。
我发送的时候是直接5、1、4、2一个数字一帧的发送啊,然后单片机收就:temp[0]=5、temp[1]=1、temp[2]=4、temp[3]=2。
我上边的办法可以显示百位,能显示142,但是把高位放大1000倍,再与142相加就出错了。
zyw19987:最高位是千位啊,乘以1000就是等不到结果咯。
coolxgz:你理解错我的意思了
ATF144X:还别说,我就学了点皮毛,而且学的是汇编的,后面KEIL C 完全是自学的。而且我最烦就是各进制转换,你说的5142就是0x1524,我还是理解不了。( ⊙ _ ⊙ )!
自我补充下:
“做而论道”和“ ATF144X”两位高人的说法都可以达到目的。
一步步*10可以,一步到位乘以1000却不可以,也可能是keil C的编译方法问题。
而其中“ ATF144X”的16进制说法我试过,却做不了,但是那表达式却是可以正常转换的,之前我也用过这表达式,不过当时是忘记减0x30。
tony_sgt说的强制转换,我之前就试过了。没用。不过很感谢tony_sgt热心帮助。 展开
6个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询