奥林首先也注意到了一些:电平与微控制器通常输出的相反:
不用担心,我们也会看到我们也可以这样阅读。我们只需要记住,示波器上的起始位为a 1
,终止位为0
。
接下来,您有错误的时基来正确阅读此内容。每秒9600位(比波特更合适的单位,尽管后者在每sé上都没错)是每秒钟104 s,这是当前设置的1/10分度。放大,然后在第一条边上设置垂直光标。那是您开始的起点。将第二个光标移动到每个下一个边缘。光标之间的差应为104 s的倍数。每104 s是一个比特,第一起始位(),则8个数据位,总时间832 S,和一个停止位()。 μ μ μμμμ1
μ0
屏幕数据看起来与发送的数据不匹配0x00
。你应该看到一个窄1
位(起始位),其次是一个较长的低级别(936秒,8个零数据位+停止位)。
与您发送的邮件相同;您应该会看到一个较长的高电平(再次是936 μs,这次是起始位+ 8个数据位)。所以这应该是您当前设置的近1格,但这不是我所看到的。
它看起来更像是在第一个屏幕截图中发送两个字节,在后四个屏幕中发送第二个和第三个相同的值。 μμ
0xFF
μ
猜测:
0b11001111 = 0xCF
0b11110010 = 0xF2
0b11001101 = 0xCD
0b11001010 = 0xCA
0b11001010 = 0xCA
0b11110010 = 0xF2
编辑
Olin是绝对正确的,这类似于ASCII。事实上,它是ASCII 的1的补码。
0xCF〜的0x30 = '0'
0xCE〜0X31 = '1'
0XCD〜0x32 = '2'
的0xCC〜0x33 = '3'
0xCB〜0x34 = '4'
0xCA〜0x35 = '5'
0xF2〜0x0D = [CR]
这证实了我对屏幕截图的解释是正确的。
编辑2(我如何根据普遍的要求解释数据:-))
警告:这是一个很长的故事,因为它是我尝试解码类似内容时脑海中所发生的记录。仅当您想学习一种解决方法时,才阅读它。
示例:第一个屏幕截图的第二个字节,从2个窄脉冲开始。我故意从第二个字节开始,因为边缘比第一个字节多,因此更容易正确处理。每个窄脉冲大约为一个分之一的十分之一,因此每个窄脉冲可能为1位高,中间为低位。我也看不到比这更狭窄的东西,所以我想这只是一点点。那是我们的参考。
然后,101
在较低水平下存在较长时间之后。看起来比以前宽两倍00
。跟随的高点又是宽度的两倍,所以将是1111
。现在,我们有9位:起始位(1
)加8个数据位。所以下一位将是停止位,但是因为0
它不是立即可见的。因此,将所有内容放在一起1010011110
,包括开始和停止位。如果停止位不为零,我会在某个地方做出错误的假设!
请记住,UART首先发送LSB(最低有效位),因此我们必须将8个数据位取反:11110010
= 0xF2
。
现在,我们知道一个位,一个双位和一个4位序列的宽度,我们来看看第一个字节。第一个高电平周期(宽脉冲)比1111
第二个字节的宽度稍宽,因此将为5位宽。紧随其后的低和高周期与另一个字节中的双位一样宽,因此我们得到111110011
。同样是9位,因此下一个应该是低位,即停止位。可以,因此,如果我们的猜测正确,则可以再次反转数据位:11001111
= 0xCF
。
然后我们从奥林那里得到了提示。第一个通信的长度为2个字节,比第二个通信的长度短2个字节。并且“ 0”也比“ 255”短2个字节。因此它可能类似于ASCII,尽管不完全相同。我还注意到“ 255”的第二个和第三个字节是相同的。太好了,它将是双“ 5”。我们做的很好!(您必须时常鼓励自己。)在解码“ 0”,“ 2”和“ 5”之后,我注意到前两个代码之间的差异为2,而最后两个代码之间的差异为3。二。最后,我注意到这0xC_
是的补充0x3_
,这是ASCII中的数字模式。