zoukankan      html  css  js  c++  java
  • 串行通信------字符串发送和十六进制发送

    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码的十六进制表示,发送框里写入十六进制,实际发送的时候仍然是十六进制转换为二进制,然后按位发送出去。 
      
                         
  • 相关阅读:
    题解 LNOI2014 LCA
    题解 P3413 【SAC#1
    题解 P3372 【【模板】线段树 1】(珂朵莉树解法)
    题解 P2610 【[ZJOI2012]旅游】
    题解 CF911D 【Inversion Counting】
    题解 CF1037D 【Valid BFS?】
    bootstrap常用部件下载
    sql获取上月同期
    VSS配置
    SQL中的union,except,intersect用法
  • 原文地址:https://www.cnblogs.com/prayer521/p/4133632.html
Copyright © 2011-2022 走看看