烽火村游戏活动中心

HOME> 玩家社区> 串行通信

串行通信

2026-01-29 03:54:12

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,即美国信息互换标准代码)可以完成这个使命:我们知道,在计算机中一个字节的数据可以有0~255共256个值,我们取其中的0~127共128个值赋予了它另外一层涵义,即让它们分别来代表一个常用字符,其具体的对应关系如下表。

表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码的十六进制表示,发送框里写入十六进制,实际发送的时候仍然是十六进制转换为二进制,然后按位发送出去。

最新发表
友情链接