Arduino 中的 shiftIn() 和 shiftOut()
shiftIn() 和 shiftOut() 命令在 Arduino 中,從非常寬泛的角度來說,是 SPI 的軟體實現。當然,SPI 的速度要快得多,但 SPI 只能在 Arduino 的某些特定引腳上工作。shiftIn() 和 shiftOut() 可以使用 Arduino 的任意兩個 GPIO(而不是像 SPI 一樣的一些特定引腳)。
shiftIn() 和 shiftOut() 都需要兩個數字引腳,一個 dataPin 和一個 clockPin。dataPin 將一次一位地移入或移出一位元組(8 位)資料。clockPin 同步資料傳輸。它通常保持低電平,並且在每次位元傳輸時,它變為高電平,然後恢復到低電平。上升沿(從低電平到高電平)是發生位元傳輸的時間點。
語法
shiftOut 的語法如下:
shiftOut(dataPin, clockPin, bitOrder, value)
其中 dataPin 和 clockPin 表示用於移位操作的兩個引腳。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 移位暫存器介面,該暫存器用於序列到並行轉換。一個很好的例子可以在 這裡找到。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP