Ⅰ 51单片机串口输出程序,单片机运行后在串口调试助手上看到重复的一组16进制数
首先看你的发送的是什么:unsigned char dat,字符型的变量,也就是说你发送过去的变量是char型的,
再看你要显示什么:“串口助手上看到一组16进制数”好吧,这就是问题,
你要看的是16进制的数,但是发过去的是char型,那么怎么办呢?
1:转换,char型变量你会转换成16进制的吗??不会的话去翻ASC||表,(0x1B是27(十进制),char是“27
33
1B
ESC
escape ” 一个叫escape的东东, )这些东西明显是不能弄到字符串里面去的,对吧,那就看第二步,
2:还是转换,不过这次不是把16转换成对应的char,‘0’的asc||知道是多少吗?对应是10进制是48,然后‘0’-21=?,,慢慢研究吧,
最后:你把zifuchuan这个变量弄成int型的不就好啦,,,可以直接用啊,只需要在串口终端显示的时候勾选以hex显示,就好了啊
Ⅱ 单片机给电脑发送一个字节的十六进制数,这个数该存放在什么类型的变量里呢
1。串口发送:单片机这里很简单:设好波特率后,只要一条MOV SBUF,A即可将累加器的内容(一个字节)送到串口。
2。数据格式:在单片机这里,全是以字节方式运行的,更大的数要多字节拼装
3。在VB中,串口接收要选用“字节”方式,不要用“字符串”方式,这样可以很好的和单片机配合。
4。在VB中,可以将字节数据转换为无符号整数。
5。如果数据仅限于字节(256之内),用刚才接收的字节就可以直接参加运算。0D5H即是213,超过一个字节的数值,由单片机传过来之后要拼装,比如(1A2BH)先传1AH,再传2BH,到VB中,将1AH(=26)乘以16(=416),再加上2BH(=43),其和等于459(=0X1CB)。
6。十六进制在单片机中用0ABH方式,在VB中用0xAB方式表示。
Ⅲ 51单片机串口接收到一串16进制的数据,怎样能取出中间的一个字节然后做处理呢
这里和几进制的数据没关系,不管是16进制,还是10进制,还是二进制,它所存储的数值,都是不变的。要处理接到数据,必须做协议,否则,你不知道这一串数据,哪个是第一个字节,哪个又是中间字节。
Ⅳ 通过单片机串口发送一串16进制码
发送16进制数和空格的要求不合理,要发16进制数就是连续的。
要发空格,那是字符,即ASCII码,而一个字节的16进制数要发两个字符。
以16进制发送时,空格的16进制数20H,而不是这种空的空格。
Ⅳ 51单片机怎么接收电脑发送的16位数据
51单片机是8位的,一次只能接一个字节,你这16位的,要分两次的。
电脑串口也是按两次来发送,也就是把这个16位的拆成两个字节,所以每个字节发送都是遵循串口协议的,你在单片机里面开串口接收中断即可。
你可能会疑问,要是第一个字节中断了,进入中断函数接第一个字节后,那第二个字节会不会错过,来不及接收?
这个不会的,上面说了,第二个字节也是按串口标准发的,也就是起始位,数据位,(校验位),结束位。
电脑在发一个字节后,又会接着发第二个字节。可是,要知道串口的波特率是很低的,远远比单片机的处理速度低。当你接了第一个字节,将此字节做一些处理,比如存起来时,电脑可能都还没开始发第二个字节呢,因为电脑发数据的速率是以K为单位的,而单片机处理速度是以M为单位的。
因此,不用担心第二个字节会丢失。