实际二进制值与示波器值之间的差异

电器工程 串行 示波器
2022-01-16 16:46:25

我试图用示波器查看 ASCII “A”字符,但实际二进制值和示波器值不同,这是为什么呢?ASCII "A" 二进制值 - 01000001

示波器显示此图:

ASCII A

ASCII A

我使用 Arduino Uno 使用代码发送 ASCII 值:

void setup() {  
  Serial.begin(9600);  
}  

void loop() {  
  Serial.println("A");  
  delay(1000);  
}
3个回答

以下是您读取示波器波形的方法。我花时间编辑您的波形图片并对其进行注释以显示哪个位是哪个位。微控制器每个字符发送 10 位;START,始终为 0,8 个数据位和 STOP,始终为 1。该线也停留在 1,因此第一个 START 下降沿警告接收器一个字节即将到来。这些位首先发送 LSB,因此如果您想在算法上“查看”它们,您需要水平镜像它们以使它们有意义。每个位的宽度由波特率决定,发送器和接收器都必须知道波特率是多少。

从下图中您可以看到它发送了三个字符:ASCII 字符“A”、回车符和换行符。

在此处输入图像描述

如果您查看 Arduino println()文档,您会发现它在末尾附加了一个回车符和换行符。因此,在十进制中,您最终会得到 65 (A)、13 (CR) 和 10 (LF),二进制转换为:

01000001 00001101 00001010

异步串行数据首先发送 LSB,因此变为:

10000010 10110000 01010000

您的信号处于空闲状态,因此起始位为 0,停止位为 1,因此将其添加到每个字节,最终得到:

0100000101 0101100001 0010100001

从您的图表中计算出确切的时间有点困难,但这似乎至少大致匹配,并且应该让您了解一些额外的位来自哪里以及它们为什么被重新排序。Kvegaoro 提供的 Wikipedia 链接提供了很多关于异步串行数据的良好背景信息。

如果您显示的流是异步串行的,示波器将显示相应的起始位、停止位和奇偶校验位。还要考虑您的信号是否反转以及天气是最高有效位优先还是最低有效位优先。如果您添加有关您在图片中表示的串行流的更多详细信息,我们可以为您提供更好更详细的答案,否则这只是一个有根据的猜测