Arduino 中的 shiftIn() 和 shiftOut()


shiftIn()shiftOut() 命令在 Arduino 中,從非常寬泛的角度來說,是 SPI 的軟體實現。當然,SPI 的速度要快得多,但 SPI 只能在 Arduino 的某些特定引腳上工作。shiftIn()shiftOut() 可以使用 Arduino 的任意兩個 GPIO(而不是像 SPI 一樣的一些特定引腳)。

shiftIn()shiftOut() 都需要兩個數字引腳,一個 dataPin 和一個 clockPindataPin 將一次一位地移入或移出一位元組(8 位)資料。clockPin 同步資料傳輸。它通常保持低電平,並且在每次位元傳輸時,它變為高電平,然後恢復到低電平。上升沿(從低電平到高電平)是發生位元傳輸的時間點。

語法

shiftOut 的語法如下:

shiftOut(dataPin, clockPin, bitOrder, value)

其中 dataPinclockPin 表示用於移位操作的兩個引腳。bitOrder 可以是 MSBFIRST 或 LSBFIRST,指示從哪裡開始傳輸。value 是需要移出的位元組(8 位)資料。

類似地,shiftIn 的語法如下:

byte incoming = shiftIn(dataPin, clockPin, bitOrder)

在這裡,我們讀取一個位元,而不是傳送。因此,它只接收 3 個引數,並輸出一個位元組。

請注意,對於 shiftOut(),dataPin 必須定義為 OUTPUT,對於 shiftIn(),則必須定義為 INPUT。在兩種情況下,clockPin 都必須定義為 OUTPUT。當與由上升沿時鐘控制的裝置介面時,請確保在呼叫 shiftOut() 之前,時鐘引腳處於低電平 (digitalWrite(clockPin,LOW))。

應用

如上所述,shiftIn()shiftOut() 就像 SPI 的軟體實現。它們有助於減少資料傳輸所需的引腳數量。與其透過 8 條線並行傳送 8 位,不如透過一條線逐位序列傳送,操作由時鐘線同步。

一個常見的應用是與 74HC595 移位暫存器介面,該暫存器用於序列到並行轉換。一個很好的例子可以在 這裡找到。

更新於:2021 年 7 月 30 日

2K+ 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.