()shiftOut در آردوینو یک بایت داده را به صورت سریال ارسال میکند. ()shiftOut یا از ارزشمندترین بیت (سمت چپترین) و یا کم ارزشترین (سمت راستترین) بیت شروع میکند. هر بیت به نوبت در یک پین داده نوشته میشود. پس از آن یک پین ساعت پالس میشود (بالا (high) و سپس پایین (low)) تا مشخص کند که بیت در دسترس است.
نکته: اگر با دستگاهی سر و کار دارید که با لبه بالارونده ساعت کار میکند، باید اطمینان حاصل کنید که قبل از فراخوانی ()shiftOut پین ساعت (کلاک) Low است (برای مثال با صدازدن (digitalWrite(clockPin, LOW).
این تنها یک پیادهسازی نرمافزاری است. به کتابخانهی SPI مراجعه کنید که یک پیادهسازیِ سختافزاری را فراهم میکند. پیادهسازی سختافزاری سریعتر است اما فقط روی تعدادی پین خاص کار میکند.
سینکتس (نحو)
(shiftOut(dataPin, clockPin, bitOrder, value
پارامترها:
dataPin: پینی که روی آن هر بیت بهصورت خروجی (output) قرار میگیرد. (int)
clockPin: پین برای تغییر دادن وضعیت، هنگامی که dataPin روی مقدار صحیح تنظیم شود. (int)
bitOrder: از کدام طرف بیتها را شیفت اوت کنیم؛ MSBFIRST یا LSBFIRST. (اول ارزشمندترین بیت، یا اول کم ارزشترین آن)
value: دادهای برای شیفت اوت (byte)
خروجی:
هیچ (ندارد)
مثال:
برای مدار همراه آموزش کنترل یک شیفت رجیستر 74HC595 را ببینید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | //**************************************************************// // Name : shiftOutCode, Hello World // // Author : Carlyn Maw,Tom Igoe // // Date : 25 Oct, 2006 // // Version : 1.0 // // Notes : Code for using a 74HC595 Shift Register // // : to count from 0 to 255 // //**************************************************************** //پین متصل به //ST_CP //از // 74HC595 int latchPin = 8; //پین متصل به // SH_CP //از //74HC595 int clockPin = 12; ////پین متصل به //// DS ////از ////74HC595 int dataPin = 11; void setup() { //پینها را برای خروجی ست میکند چراکه در حلقه (لوپ) اصلی بیان شدهاند pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { //روتین شمارنده //count up routine for (int j = 0; j < 256; j++) { //ground latchPin and hold low for as long as you are transmitting //و آن را تا زمانی که انتقال انجام میدهیم //LOW //نگه میداریم digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, j); // latch pin //را دوباره //HIGH //میکنیم تا به چیپ سیگنال دهیم که دیگر نیازی به شنود اطلاعات نیست digitalWrite(latchPin, HIGH); delay(1000); } } |
نکته و هشدارها:
dataPin و clockPin باید قبلاً با فراخوانی ()pinMode، بهعنوان خروجی پیکربندی شوند.
در حال حاضر ()shiftOut یک بایت (8 بیت) را در خروجی میدهد پس برای مقادیر بیشتر از 255، یک عمل دومرحلهای موردنیاز است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // این را برای سریال //MSBFIRST //انجام دهید int data = 500; // شیفت اوت بایت بالا shiftOut(dataPin, clock, MSBFIRST, (data >> 8)); // شیفت اوت بایت پایین shiftOut(dataPin, clock, MSBFIRST, data); //یا این را برای سریال //LSBFIRST //انجام دهید data = 500; // شیفت اوت بایت پایین shiftOut(dataPin, clock, LSBFIRST, data); // شیفت اوت بایت بالا shiftOut(dataPin, clock, LSBFIRST, (data >> 8)); |