怎么将单片机接收到的十六进制数转为十进制?,

怎么将单片机接收到的十六进制数转为十进制,接收到的数范围比较大如从0.00-12000000.00,这该怎么写程序?要C语言的!
呵呵,其实我问错了,问题是将0.00-12000000.00HZ之间的频率值由VB上位机发送到单片机上使用,调用到ad9833_data(frequence,0,2,0)中控制AD9833产生特定的频率,还请高手指点。此出使用了单片机的中断处理,我在将数据由上位机发送到单片机SBUF中之后就不知道怎么处理数据了!

不是转换……
不论十进制还是十六进制都是看你怎么解释,或者说怎么定义,但是不论怎么定义数据,存储的都是十六进制形式,你发送的数据是存储的形式,所以上位机vb读取的数据也是十六进制的,你如果想要十进制,需要自己在上位机接收后解析数据,解析的时候注意大小端等问题……
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-27
你说的数字带小数点的,叫。
小数点的数据用十六进制表示用4个字节。
如果小数部分都是0,则可以用整数表示。
例如:用长整型表示。
long dat; //用于保存接收到的
dat=12345;
万位数:ww = dat/10000;
千位数:qw = dat%10000/1000;
百位数:bw = dat%10000%1000/100;
十位数:sw = dat%10000%1000%100/10;
个位数:gw = dat%10000%1000%100%10;
依次类推。追问

呵呵,其实我问错了,问题是将0.00-12000000.00HZ之间的频率值由VB上位机发送到单片机上使用,从上位机发送所需的frequence值到下位机,要将frequence放到void ad9833_data(double frequence,unsigned int frequence_SFR,unsigned int WAVE_MODE,unsigned int Phase )中使用;怎样从中断接收的SBUF中取出frequence的值赋给ad9833_data(frequence,0,2,0
);上位机发过来的数据应该是二进制的或者字符型的数。

追答

你用VB,发送给单片机的数据是什么格式的?
例如:上位机发送到如果是long 型的,单片机收到后保存到一个long型的变量中就可以使用了。

long 有4个字节,单片机分四次保存到long型变量中

例如:sbf=SBUF;
ltmp=sbf;
ltmp<<8; //收到第一次
sbf=SBUF;
ltmp|=sbf; //收到第二次

ltmp<<8;

sbf =SBUF;
ltmp|=sbf; //收到第三次
ltmp<<8;
sbf =SBUF;
ltmp|=sbf; //收到第四次
此时 ltmp 就是收到的long型数据

本回答被提问者采纳
第2个回答  推荐于2017-10-04
  转换方法:
  16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。字母不区分大小写。
  十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……,所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。
  例如:
  用竖式计算:
  2AF5换算成10进制:
  第0位: 5 * 16的0次方 = 5
  第1位: F * 16的1次方 = 240
  第2位: A * 16的2次方 = 2560
  第3位: 2 * 16的3次方 = 8192
  直接计算就是:
  5 * 16的0次方 + F * 16的1次方 + A * 16的2次方 + 2 * 16的3次方 = 10997

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网