请教一个单片机8位串口发送的问题
我从电脑向单片机发数据,单片机是8位的,发0-255之间没问题,可是发大于255的,即两个字节的,这怎么发送啊?因为单片机每次只接收一个字节。...
我从电脑向单片机发数据,单片机是8位的,发0-255之间没问题,可是发大于255的,即两个字节的,这怎么发送啊?因为单片机每次只接收一个字节。
展开
4个回答
展开全部
由于你把8位的所有位数都用作表示数字,所以导致255以内的数和255以上的数无法分开。
这个问题的关键是怎么让电脑知道你什么时候发的数字是8位的,什么时候发的数字是16位拆成两个8位的对吧!
我这里说一个方法吧!你可以把8位全一作为一个判断符,如果电脑受到一个全一的字符,那么接受到的下两个字节就进行拼接。
例如需要发送254,那么直接发送一个字节即可。
如果发送255,可以这样:
先发送 11111111
然后发送 00000000 11111111
这样拼接得到255
如果是发送 1024,可以这样:
先发送 11111111
然后发送 00000100 00000000
当然,这样可能传输效率有所降低,但也不会太差!
这个问题的关键是怎么让电脑知道你什么时候发的数字是8位的,什么时候发的数字是16位拆成两个8位的对吧!
我这里说一个方法吧!你可以把8位全一作为一个判断符,如果电脑受到一个全一的字符,那么接受到的下两个字节就进行拼接。
例如需要发送254,那么直接发送一个字节即可。
如果发送255,可以这样:
先发送 11111111
然后发送 00000000 11111111
这样拼接得到255
如果是发送 1024,可以这样:
先发送 11111111
然后发送 00000100 00000000
当然,这样可能传输效率有所降低,但也不会太差!
展开全部
一个字节一个字节的发呗,比方说你先发高字节的单片机接收并存放在30H中,延迟一会再发低字节的存放在31H中,到时候在单片机中用的时候你只要记住30H中放的是高字节,31H中放的是低字节就行了。
当然啦你需要在单片机接收完第一个字节的数据后将RI清零,再发送下一个字节。
当然啦你需要在单片机接收完第一个字节的数据后将RI清零,再发送下一个字节。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int_h = 原变量/100
int_l = 原变量%100
这样就把原来的16位数变成了两个8位数
就可以正常发送了
到了单片机以后再定义一个long型的
long = int_h*100+int_l
搞定收工
int_l = 原变量%100
这样就把原来的16位数变成了两个8位数
就可以正常发送了
到了单片机以后再定义一个long型的
long = int_h*100+int_l
搞定收工
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
正确的说法是:UART(通用异步串行通信接口)传送的一帧数据,是8位二进制数。
利用这种接口,可以传送8的任意整数倍位数的数据。
利用这种接口,可以传送8的任意整数倍位数的数据。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询