Arduino 中的 shiftIn() 和 shiftOut()

阅读 610 收藏 0 点赞 0 评论 0

shiftIn()shiftOut()Arduino 中的命令,非常松散地说,是 SPI 的软件实现。当然,SPI 要快得多,但 SPI 只能在 Arduino 的某些特定引脚上工作。shiftIn()并且shiftOut()可以使用 Arduino 的任意两个 GPIO(不是某些特定的引脚,如 SPI)。

二者shiftIn()shiftOut()需要两个数字引脚,一个dataPin和一个clockPin .The dataPin将在移位或在一个时间移出数据的一个字节(8个比特),1比特。该clockPin同步数据传输。它通常保持低电平,并且对于每个位传输,它变为高电平,然后返回低电平。上升沿(从低到高)是位传输发生的时间。

语法

shiftOut的语法是 -

shiftOut(dataPin, clockPin, bitOrder, value)

其中dataPinclockPin表示用于移位操作的两个引脚。bitOrder可以是 MSBFIRST 或 LSBFIRST,指示从哪里开始传输。该值是需要移出的字节(8 位)数据。

同样,shiftIn的语法是 -

byte incoming = shiftIn(dataPin, clockPin, bitOrder)

在这里,我们正在阅读,而不是发送。因此,它只接受 3 个参数,并输出一个字节。

请注意,必须将dataPin定义为 OUTPUT forshiftOut()和 INPUT for shiftIn()。在这两种情况下,clockPin都必须定义为 OUTPUT。与由上升沿提供时钟的设备连接时,请确保digitalWrite(clockPin,LOW)在调用 之前时钟引脚为低电平 ( ) shiftOut()

应用

如上所述,shiftIn()shiftOut()像SPI的软件实现。它们有助于减少用于数据传输的引脚数量。不是通过 8 条线并行发送 8 位,而是通过一条线一个一个地串行发送位,操作由时钟线同步。

一种流行的应用是与 74HC595 移位电阻的接口,用于串行到并行转换。一个很好的例子可以在这里找到。

评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号