PBASIC 编程/串行通信
外观
如果我们想发送 16 位的数据,就像我们在上一章中所做的那样,我们需要定义 16 个输出端口,然后将数据写入这些引脚。以下是一个将每个端口输出 1 的示例
DIRS = %1111111111111111 OUTS = 255
不幸的是,这个系统没有给我们留下任何额外的引脚。我们没有可用的引脚用于输入或其他输出。在这样的情况下,我们想要使用串行通信。
并行通信,我们到目前为止一直在做的,使用许多平行排列的电线。每个数据位都在自己的电线上传输,因此要发送x位,我们需要使用x条电线。在串行系统中,我们不是使用 16 根电线,而是只使用一根电线,并将所有数据位按顺序发送到那根电线上。目标计算机,接收数据的计算机,会逐个读取每个位,并将其存储在一个变量中。
要使用串行 I/O,我们使用 SERIN 和 SEROUT 函数
串行 I/O 比并行数据明显复杂一些。例如,我们需要知道数据发送的速度,以便目标计算机能够以相同的速度读取数据。我们还需要知道一些其他信息
- 奇偶校验
- 奇偶校验为我们传输的每个字节添加一个额外的位。这个额外的位可以用来确定传输中是否存在错误。奇偶校验可以设置为“奇数”、“偶数”或“无”。
- 波特率
- “波特率”是每秒传输的脉冲数。发送方和接收方都需要使用相同的波特率。
- 数据位
- 数据位是指每“块”信息的位数。通常有 8 位数据,但在某些硬件上也可能为 7 位。
发送方和接收方都需要对奇偶校验、波特率和数据位具有相同的值。如果这些不匹配,通信将无法正常工作。
- 端口
- 这是用于发送或接收数据的端口号。可以是任何常规数据端口 0 - 15,也可以是专用串行端口 16。端口 16 是用于编程 BasicStamp 的端口。如果您使用端口 16,您将有一个漂亮的串行插头可以使用,但您将无法使用 BasicStamp 的调试功能。发送方和接收方可以使用不同的端口。
要发送串行输出,我们使用 SEROUT 命令。如果我们想读取串行数据,我们使用 SERIN 命令。由于串行可以将位逐个发送,因此除了发送单个数据字节外,我们还可以一次发送长的数据数组。如果需要,我们可以发送整个字符串或数组。