CodeMonkey 发表于 2013-1-24 16:12:52

求助:如何使用串口发送十六进制字符串.

首先,我在这里获得了ADC数值.
ADC_CONTR = 0xE8;//CH1
while (!(ADC_CONTR&0x10));
return ADC_RES<<8|ADC_RESL;//10位ADC

得到一个数值,比如0xA502,我要用串口发送一个数值到电脑,但是他要显示的就是转换成10进制,显示成字符串,串口我已经调好,



如何做呢,现在串口是通的,ADC也是正确的.

Stargazer-1986 发表于 2013-1-24 16:38:21

51单片机应该可以使用printf输出吧...论坛上应该有介绍...
给你贴一个~
http://www.amobbs.com/thread-5049301-1-1.html

CodeMonkey 发表于 2013-1-24 16:58:39

Stargazer-1986 发表于 2013-1-24 16:38 static/image/common/back.gif
51单片机应该可以使用printf输出吧...论坛上应该有介绍...
给你贴一个~
http://www.amobbs.com/thread-5049 ...

有这么爽的一回事么,我去了解一下

CodeMonkey 发表于 2013-1-24 17:01:06

本帖最后由 CodeMonkey 于 2013-1-24 17:07 编辑

Stargazer-1986 发表于 2013-1-24 16:38 static/image/common/back.gif
51单片机应该可以使用printf输出吧...论坛上应该有介绍...
给你贴一个~
http://www.amobbs.com/thread-5049 ...

法克,用波特率发生器完成不鸟. 另外我需要比较高的输出速度,能换个方案吗

Stargazer-1986 发表于 2013-1-24 17:16:09

CodeMonkey 发表于 2013-1-24 17:01 static/image/common/back.gif
法克,用波特率发生器完成不鸟. 另外我需要比较高的输出速度,能换个方案吗 ...

"我需要比较高的输出速度",刚才那帖子的四楼回复说用115200都可以啊,你需要用多少波特率呢?
我觉得printf输出,跟波特率没大关系的啊.
换个方案的话,自己写一个printf函数~哈哈~

CodeMonkey 发表于 2013-1-24 17:28:59

Stargazer-1986 发表于 2013-1-24 17:16 static/image/common/back.gif
"我需要比较高的输出速度",刚才那帖子的四楼回复说用115200都可以啊,你需要用多少波特率呢?
我觉得printf ...

115200 无输出...

CodeMonkey 发表于 2013-1-24 17:34:30

a = 0xaa
printf("%d",a);

输出-22016 额... 170呢...

Stargazer-1986 发表于 2013-1-24 17:56:22

CodeMonkey 发表于 2013-1-24 17:34 static/image/common/back.gif
a = 0xaa
printf("%d",a);



这个变量a是signed还是unsigned的啊?
-22016,十六进制表示是"FFFFFFFFFFFFAA00"...难道还涉及到大端小端的问题???
就算a是signed型的,也才是-86而已啊...
我也不知道啥回事了...{:sleepy:}

CodeMonkey 发表于 2013-1-24 17:59:33

Stargazer-1986 发表于 2013-1-24 17:56 static/image/common/back.gif
这个变量a是signed还是unsigned的啊?
-22016,十六进制表示是"FFFFFFFFFFFFAA00"...难道还涉及到大端小端 ...

unsigned char a

0x1111就可以正确转换

wtfthprgw 发表于 2013-1-24 18:13:24

你要先计算出AD值的10进制是多少。比如说是45542。4.5542V是吧?在程序中是没有小数点的。
要把45542拆开成45542分别发送。
给你个程序自已看下。
//************************AD转换计算
ADC=ADC/1024.000*5.000;
e=ADC*100;

////////////////////4.984
a=e/1000|0x30;////4
e=e%1000;/////984
b=e/100|0x30;////9
e=e%100;//84
c=e/10|0x30;//8
d=e%10|0x30;///4
///////////////////////////////////把数据拆分开。比如4984拆为4.984
分别发送a,b,c,d就行了
SendData(a);
SendData('.');加入小数点
SendData(b);
SendData(c);
SendData(d);

CodeMonkey 发表于 2013-1-24 18:45:50

wtfthprgw 发表于 2013-1-24 18:13 static/image/common/back.gif
你要先计算出AD值的10进制是多少。比如说是45542。4.5542V是吧?在程序中是没有小数点的。
要把45542拆开成 ...

我去试试
页: [1]
查看完整版本: 求助:如何使用串口发送十六进制字符串.