2的7次方則是左邊的高位第八位數字(MSBFIRST)
MSBFIRST 表示 595 從左向右讀取二進制數;
LSBFIRST 則表示從右向左讀取。
shiftout(a,b,c,d);
a = 連接到595的數據輸入引腳(14號引腳)的數字輸出端口號。
b = 連接到595的時鐘端口引腳(11號引腳)的數字輸出端口號。
c 可以是 LSBFIRST 或者 MSBFIRST。MSBFIRST 表示 595 從左向右讀取二進制數;LSBFIRST 則表示從右向左讀取。
d = 實際要傳送給595用來表示二進制輸出端口狀態的數值 (0~255)。
綜合以上,個人得出的結論是,MSBFIRST及LSBFIRST只代表要從左邊開始讀二進位數值
或是從右邊開始讀二進位數值。
例如 85(十進位)換算成二進位為10101010
如果設定為MSBFIRST 則亮燈的順序 從左邊開始(10101010)
,因MSBFIRST是從左邊開始讀取二進位數,所以會先取1
如果設定為LSBFIRST 則亮燈的順序 從右邊開始(01010101)
,因LSBFIRST是從右邊開始讀取二進位數,所以會先取0
(1為亮燈0為暗)
如果串連兩顆74HC595移位暫存器,
同時下指令
shiftOut(DataPin, ClockPin, MSBFIRST, 5);
shiftOut(DataPin,ClockPin, MSBFIRST, 85);
則會發現 第一個亮的晶片是最遠的暫存器,
因此推斷當arduino丟一個8bit的資料給暫存器時,會先經由PIN 9輸出給較遠的暫存器,
當暫存器的資料滿時,再傳到原先的暫存器。
以上假設為將LatchPin拉回高電位
推斷是否正確,等明天再買一顆回來試試看。
0 意見:
張貼留言