打印

串口调试助手 不能发大于255的数?

[复制链接]
7048|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 dolin_wu 于 2010-2-4 21:57 编辑

用串口调试助手发送数据给单片机,发现不能发送大于255的数据,是因为它的数据发送位只有8位
导致只能发小于255的数,如果我要用电脑和单片机通信,怎么才能发送大于255的数据啊 ?要能够发送<255和大宇255的数都能发!


我的P0口接的是数码管,P2^7和P2^6接的是数码管的位选和段选,程序如下:

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint i=0;
uchar j;
sbit wela=P2^7;
sbit dula=P2^6;
uchar code tablenum[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code tablewei[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f
};
void inti();
uchar swan,wan,qian,bai,shi,ge;
void delay(uint z)
{
  uint x,y;
  for(x=z;x>0;x--)
   for(y=50;y>0;y--);
}
void display(uchar swan,wan,qian,bai,shi,ge);
void main()
{
inti();


while(1)
{
  display(swan,wan,qian,bai,shi,ge);
  
}
}
void inti()
{
TMOD=0x20;
TH1=0xf4;
TL1=0xf4;
TR1=1;
REN=1;
SM0=1;
SM1=1;
EA=1;
ES=1;
}
void sri() interrupt 4
{
RI=0;
i=SBUF;


swan=i/100000;
wan=i%100000/10000;
qian=i%100000%10000/1000;
bai=i%100000%10000%1000/100;
shi=i%100000%10000%1000%100/10;
ge=i%100000%10000%1000%10;
}
void display(uchar swan,wan,qian,bai,shi,ge)
{

uchar a=0;
dula=1;
P0=tablenum[swan];
dula=0;
P0=0xff;
wela=1;
P0=tablewei[a];
a++;
wela=0;
delay(5);

dula=1;
P0=tablenum[wan];
dula=0;
P0=0xff;
wela=1;
P0=tablewei[a];
a++;
wela=0;
delay(5);
dula=1;
P0=tablenum[qian];
dula=0;
P0=0xff;
wela=1;
P0=tablewei[a];
a++;
wela=0;
delay(5);
dula=1;
P0=tablenum[bai];
dula=0;
P0=0xff;
wela=1;
P0=tablewei[a];
a++;
wela=0;
delay(5);
dula=1;
P0=tablenum[shi];
dula=0;
P0=0xff;
wela=1;
P0=tablewei[a];
a++;
wela=0;
delay(5);
dula=1;
P0=tablenum[ge];
dula=0;
P0=0xff;
wela=1;
P0=tablewei[a];
a++;
wela=0;
delay(5);

if(a==5)
  a=0;
}

QQ截图未命名.png (27.27 KB )

QQ截图未命名.png

相关帖子

沙发
zhaoyu2005| | 2010-2-2 08:07 | 只看该作者
一个字节只有8bit,当然最大255了,不能发大于255的数,这是基础,想表示大数,都是多个字节合并处理的,看看C或者其他微机方面的书

使用特权

评论回复
板凳
清风致影| | 2010-2-2 11:11 | 只看该作者
分几次发

使用特权

评论回复
地板
ma9453| | 2010-2-2 15:01 | 只看该作者
分开发送是正解~~~8bit只能发到255,
定义int a;
a=(串口接收的值);
a=a<<8;
a=(串口接收的值);
把两个8bit拼成一个16bit,
需要long int就仿照这个吧。。。

使用特权

评论回复
5
01dxwlm| | 2010-2-2 16:57 | 只看该作者
你根本就不适合做这行的,也来凑热闹,服了你。。。

使用特权

评论回复
6
dolin_wu|  楼主 | 2010-2-2 18:20 | 只看该作者
本帖最后由 dolin_wu 于 2010-2-2 18:22 编辑

5#滴牛人 01dxwlm
与其在这说这说那,还不如敲下正解。别人牛X的都没说啥!哎!经鉴定,你的人品有问题!

使用特权

评论回复
7
chunyang| | 2010-2-2 23:11 | 只看该作者
不能用ffff格式,需用ff ff,中间加入空格。

使用特权

评论回复
8
NE5532| | 2010-2-3 22:13 | 只看该作者
ffff会被自动分解为ff ff不信你做自环线看看。

使用特权

评论回复
9
dolin_wu|  楼主 | 2010-2-4 18:51 | 只看该作者
7# chunyang


请教下,我用11 14的格式和1114发送过去,在数码管上显示的是一样的,我想问一下:如果用1114或者1114的格式(16进制)发送数据,那么他实际用十进制表示的是多少啊?这个转换关系式怎么样的啊?

使用特权

评论回复
10
chunyang| | 2010-2-4 20:22 | 只看该作者
将16进制改写成2进制,然后按2的若干次幂做加法,如:0x11=00010001(16进制到2进制的换算按每4位进行)=2^4+2^0(注意,个位的幂次是0)=17。

使用特权

评论回复
11
dolin_wu|  楼主 | 2010-2-4 20:46 | 只看该作者
本帖最后由 dolin_wu 于 2010-2-4 21:58 编辑

10# chunyang


谢谢你的回答,0x11转换成10进制=17这个我知道,我是想问,如果你在串口助手里面发了1114  或者11空格14,因为串口调试助手数据位是8位,那么串口调试助手这个软件会发送给单片机的数据以十进制表示时是多少?我发送1114或者11 14后在实验板上得到的数据是241。

使用特权

评论回复
12
tembo09| | 2010-2-5 09:57 | 只看该作者
全部转成字符串的格式发出来,再整合成你想要的十进制数就OK了啊 65535=》‘6’‘5’‘5’‘3’‘5’
编一个发送字符串的串口发送程序

使用特权

评论回复
13
chunyang| | 2010-2-5 12:23 | 只看该作者
前面有人已经讲过,数据都是按8位发送的,16进制00-ff或十进制00-255,数制格式在软件界面中可选,0x11就是17,二者等效。如果选择正确,接收侧不对,说明接收侧的程序有误,比如数制格式表达错误等。

使用特权

评论回复
14
NE5532| | 2010-2-5 22:12 | 只看该作者
十六进制的1114等于十进制的4372,楼主确实需要补一下二进制的课了。参考谭浩强的C语言前半部分。

使用特权

评论回复
15
dolin_wu|  楼主 | 2010-2-5 22:32 | 只看该作者
14# NE5532


很谢谢你的回答,但是我还是得说,你好像没弄清楚我提的问题哦!!

使用特权

评论回复
16
NE5532| | 2010-2-5 22:44 | 只看该作者
串口的硬件结构决定了他的容量只能是以字节为单位,如果硬要用9位地址作为传输的话,勉强可以实现9bit,在程序里,不管再大的数,都是以字节为基本量来表征的,举个例子,1.45E20这个数,同样是靠数据结构定义出来,用字节作为单位进行描述的。换句话说,你要用串口助手发送浮点数据,是发送浮点数据编码后的HEX数据,而不是写1.45E20

使用特权

评论回复
17
歪 歪| | 2010-2-9 15:58 | 只看该作者
hehe
LZ不用问别人了,用串口监视分析仪抓下你发的数据分析一下不就知道怎么回事了嘛!
直接显示字符形式和十六进制形式,你看看你都发了些啥,再比较一下LCD显示,然后改改程序,看又显示什么,凑也能凑出你想要的结结果,搞计算机就是多做实验,不用问人,计算机会告诉你一切.

http://www.armecos.com/freedown/ ... good/comspy-v20.rar

使用特权

评论回复
18
ejack| | 2010-2-9 16:26 | 只看该作者
10# chunyang


谢谢你的回答,0x11转换成10进制=17这个我知道,我是想问,如果你在串口助手里面发了1114  或者11空格14,因为串口调试助手数据位是8位,那么串口调试助手这个软件会发送给单片机的数据以十进制表示 ...
dolin_wu 发表于 2010-2-4 20:46


你所说的“得到”是指接收到的数据是241,还是说显示出来的数据是241?

建议你将计算机串口公头的2、3脚用个短路块短接上,这样就是自收发模式了。接下来再慢慢试验琢磨“串口调试助手”的特性。

使用特权

评论回复
19
wkshengren| | 2010-2-19 20:40 | 只看该作者
比如你要发送小于65536的数,你可以在程序里面等待两次接受,然后定义一个unsigned int型数据,并使高8位为第一次接收的数,低八位为第二次接受的数,这两个数最好用unsigned char型,这样组合出来的数就是你要的结果(结果=高八位乘以256+低八位),当然你要是需要4个字节的,可以用long型,但是要注意最好都用unsigned的,要不可能会出问题,毕竟不是位操作

使用特权

评论回复
20
a7702842| | 2020-6-12 13:40 | 只看该作者
WIN10系统的可以试试这个.相当不错
https://www.microsoft.com/store/apps/9NBLGGH43HDM



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

36

帖子

1

粉丝