肉嘟嘟的程序媛
认证:普通会员
所在专题目录 查看专题
暴揍单片机知识点 4 -- 51的手表和闹钟 (1)
暴揍单片机知识点 5 -- 51的手表实操(2)
暴揍单片机知识点 6 -- 51的闹钟 + 闹铃
暴揍单片机知识点 7 -- 打电话
暴揍单片机知识点 8 -- 破解密文
暴揍单片机知识点 9 -- 串口实操纪实
作者动态 更多
git 情景 4 —— 永世不灭
2021-12-16 22:14
git 情景 3 —— 多重分身
2021-08-06 17:28
git 情景 2 —— 时空穿梭
2021-06-08 01:20
git 情景 1 —— 封存历史,探索代码的前世今生
2021-05-13 21:11
git 版本管理 —— 使用场景以及入门
2021-05-11 13:12

暴揍单片机知识点 8 -- 破解密文

    上节咱们说到,我们已经可以实现两个单片机之前通讯了,这次我们就需要来研究一下,他们之间到底说了些什么,以及他们之间是怎么说的?以下所有内容和说明的类比对象,都以串口(Usart 为例子,以串口机制来讲解传输的原理,然后推广到其他方面的传输接口)。
    首先,还记得我们之前说的两个单片机之间通讯是通过单片机 A 的 Tx 和单片机 B 的 Rx 连接在一起的,然后进行的数据传输。那么,我们就想一下,这两个单片机,一个是小明,一个是小红。他们如何通过一个手电筒来进行信息传递的。

  1. 首先,我想问问大家,还记得我们单片机的引脚可以干嘛的吗?对了,就是可以控制外部输出,你想想一下,比如小明的 Tx 引脚输出高电平,那么如果小红的 Rx 引脚此时处于接受状态的话是不是就可以收到一个高电平?当然是可以的。那么小明就做到了给小红传输一个高低的信号(也就是所说的 0 或则 1)。如果小红和小明之间规定 0 代表关门, 1代表开门。那么小红在收到小明的指令后,就会按照事先的规定按步执行了。
  2. 有没有感觉一根线上只是传输了一个 0 或则 1 有点浪费?这确实浪费了,那么好了,想象一下,一个字节是多少位的?1byte = 8bit。一个字节是 8 位。有没有什么办法,直接将一个字节在这根线上传输呢?也就是说,小明这边传输一个 8 bit 数据,而小红那边接受一个 8 bit 数据呢?(有人会想:每次传输 1 位,传输 8 次,这样全部信息不就传输过去了???)大方向是这样的,但是有所欠缺,下面我就详细的给大家讲解一下,为什么有缺陷。
  3. 比如,小明在传输完成 8 bit 数据之后小红按照指令去把风扇打开了,可是小明突然感觉到冷想让小红再把风扇关掉。可惜小红正在认真听讲没有注意小明又给她传输信息。结果他们就错过了彼此。小明也随即冻死在了教室里。针对这个矛盾点,我们可以让小明在要传输的时候先叫一声,“小红,我要开始装逼了,你快看过来。”这也就是我们常说的:起始标志(或则起始码,起始位。。。)。它在此的作用也就预示着一段信息传输即将开始。有开始当然也需要结束啦,有始有终才是一个合格的男孩子嘛。就这样,小明在传输完成之后也会在末尾增加一个停止位。这样小红就知道什么时候需要看着小明那边来等待小明传输的信息。
  4. 其实 8bit 数据包里面还有部分需要注意的地方,比如两个相邻的低电平是如何区分的,比如小明连续传送了两次低电平,小红如何区分?这其实得益于小红和小明各自的手表(也就是串口规定的通讯波特率)。比如小明每个发送的状态都持续 1s 。小红每次观察小明发过来的信息只持续 1s。超过 1s 就算到了下一个 bit 上。
  5. 以上几点说明简化如下:开始位 + 数据位 + 停止位 == 1字节传输结构。 

    现在我们实现了小明给小红传输 8bit 的数据。这也就是单片机之间交流的最小单元(1字节)。那么有人会问,8bit 的数据最多可以包含 256 种情况,如果我们传输的可能状态是 10000 种,那该怎么办呢?(那我们传输两次就好啦,一次一个字节,两次就是两个字节,这样直接就传输了一个 16bit 的信息,那么最多包含 65536 种状态了)。为什么不是 16bit 添加开头和结尾这种模式传输呢?因为我们 51 单片机是一个 8 位机,每次只能处理 8 bit 的数据。所以得分两次发送,通过程序逻辑来处理两次的数据。
    你可以任意规定两个单片机传输一个字节代表什么含义,比如传输:一个字节为:0x12代表开风扇,0x22代表关风扇。。。等等等等!!!而外国棒子就将1个字节编码成了对应的字符信息形成了 ascii 码的“密码表”。比如 0x30 代表字符“0”,0x31代表字符“1”。这里不了解也没关系,我们后面还会继续详细说明,在此只是点一下。这就好像 apple = 苹果。它们只是中国人和外国佬对于苹果这个东西的一种称呼。ascii 码0x30 是计算机对于看到的符号 “0” 的叫法,而 零 是我们的叫法。
声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 2
收藏 2
关注 54
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧