跳转到内容

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 的调试功能。发送方和接收方可以使用不同的端口。

设置值

[编辑 | 编辑源代码]

SERIN 和 SEROUT

[编辑 | 编辑源代码]

要发送串行输出,我们使用 SEROUT 命令。如果我们想读取串行数据,我们使用 SERIN 命令。由于串行可以将位逐个发送,因此除了发送单个数据字节外,我们还可以一次发送长的数据数组。如果需要,我们可以发送整个字符串或数组。

华夏公益教科书