串行通信------字符串发送和十六进制发送

ASCII码

在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了所谓的ASCII编码,统一规定了上述常用符号用哪些二进制数来表示.

A在ascii中定义为01000001,也就是十进制65,有了这个标准后,当我们输入A时,计算机就可以通过ascii码知道输入的字符的二进制编码是01000001。而没有这样的标准,我们就必须自己想办法告诉计算机我们输入了一个A;没有这样的标准,我们在别的机器上就需要重新编码以告诉计算机我们要输入A。ascii码指的不是十进制,是二进制。只是用十进制表示习惯一点罢了,比如在ascii码中,A的二进制编码为01000001,如果用十进制表示是65,用十六进制表示就是41H

下面摘录自http://www.51hei.com/bbs/dpj-22296-1.html

在串口调试助手发送选项和接收选项处,还有个“字符格式发送”和“字符格式显示”,这是什么意思呢?
先抛开我们使用的汉字不谈,那么我们常用的字符就包含了 0~9 的数字、 A~Z/a~z 的字母、还有各种标点符号等。那么在计算机系统里面我们怎么来表示它们呢? ASCII (American Standard Code for Information Interchange 即美国信息互换标准代码)可以完成这个使命:我们知道,在 计算机中一个字节的数据可以有0255256个值,我们取其中的0127128个值赋予了它另外一层涵义,即让它们分别来代表一个常用字符,其具体的对应关系如下表
11-3 ASCII
ASCII值
控制字符
ASCII值
字符
ASCII值
字符
ASCII值
字符
000
NUL
032
(space)
064
@
096
001
SOH
033
!
065
A
097
a
002
STX
034
"
066
B
098
b
003
ETX
035
#
067
C
099
c
004
EOT
036
$
068
D
100
d
005
END
037
%
069
E
101
e
006
ACK
038
&
070
F
102
f
007
BEL
039
'
071
G
103
g
008
BS
040
(
072
H
104
h
009
HT
041
)
073
I
105
i
010
LF
042
*
074
J
106
j
011
VT
043
+
075
K
107
k
012
FF
044
076
L
108
l
013
CR
045
-
077
M
109
m
014
SO
046
078
N
110
n
015
SI
047
/
079
O
111
o
016
DLE
048
0
080
P
112
p
017
DC1
049
1
081
Q
113
q
018
DC2
050
2
082
R
114
r
019
DC3
051
3
083
S
115
s
020
DC4
052
4
084
T
116
t
021
NAK
053
5
085
U
117
u
022
SYN
054
6
086
V
118
v
023
ETB
055
7
087
W
119
w
024
CAN
056
8
088
X
120
x
025
EM
057
9
089
Y
121
y
026
SUB
058
:
090
Z
122
z
027
ESC
059
;
091
[
123
{
028
FS
060
<
092
\
124
|
029
GS
061
=
093
 
125
}
030
RS
062
>
094
^
126
~
031
US
063
?
095
_
127
DEL
这样我们就在常用字符和字节数据之间建立了一一对应的关系,字节是数据存储的最小单位,存储一个字符是以字节为单位进行的(也即是8位二进制),那么现在一个字节就既可以代表一个整数又可以代表一个字符了,但它本质上只是一个字节的数据,而我们赋予了它不同的涵义,什么时候赋予它哪种涵义就看编程者的意图了。
 
  通过上述可以知道串口通信的本质是发送对应字符的以二进制表示的ASCII码:
比如:
 
  用字符格式发送一个小写的 a,a的ASCII码是二进制 0110 0001 ,十六进制的0x61,十进制是97,就是通过串口把0110 0001按位发送出去;
  用字符格式发送一个数字1,   1的ASCII码是二进制 0011 0001 ,十六进制的0x31,十进制是49,就是通过串口把0011 0001按位发送出去;
      用字符格式发送  a12b,  a12b的ASCII码是二进制 0110 0001 0011 0001 0011 0010 0110 0010,十六进制 61 31 32 62 ,就是通过串口按位发送出去,而每发送八位数据(一个字节)就有一个停止位,然后发送接下来的一个字符(8位),这样就依次发送了字符a-1-2-b 的ASCII码。
     用十六进制发送的本质就是发送对应字符的ASCII码的十六进制表示,发送框里写入十六进制,实际发送的时候仍然是十六进制转换为二进制,然后按位发送出去。 
  
                     

转载于:https://www.cnblogs.com/prayer521/p/4133632.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值