ضرب البت أو تقسيم البت (Bit Banging) هو عبارة عن تقنية في التواصل التسلسلي، تستخدم البرمجيات بدلاً عن عتاد مستقل. حيث يقوم البرنامج بتجميع و أخذ عينات عن حالة إبر التوصيل على المتحكم المصغر، ويكون مسؤولاً عن كل بارامترات الإشارة: التوقيت، المستويات، التزامن... إلخ.
على عكس البرمجيات، يعالج العتاد المستقل ( كالمودم، UART، أو مسجلات الإزاحة) هذه البارامترات و توفر واجهة بيانات في أنظمة أخرى، لذا فليست هناك ضرورة لتعديل الإشارة عن طرق البرمجيات. يتميز تقسيم البوت بسهولة تطبيقه بكلفة رخيصة جدا، ويتم استخدامه على سبيل المثال في الأنظمة المضمنة.
على الرغم من اعتباره hack، إلا أنه يسمح باستخدام عدة بروتوكولات مختلفة على نفس الجهاز بدون أي تعديلات على العتاد المستخدم في أغلب الأحيان.
يوجد بعض المشاكل في استخدام bit banging، حيث تستهلك البرمجيات التي تقوم بالعملية مواد معالجة أكثر من العتاد المستقل. حيث يمضي المتحكم المصغر أغلب وقته بقراءة وإرسال العينات من و عن طريق إبر توصيله Pin، مستهلكا من وقت العمليات الأخرى. كما أنّ الإشارة المولدة عن طريقه لديها عادة jitter or glitches أكثر، خاصة إذا كان المعالج يقوم بمعالجة مهام أخرى غير التواصل. لكن في حال تم تطبيق برنامج bit-banging بأسلوب معالجة المقاطعات interrupt-driven، لا تعد هذه المشاكل ذات أهمية، خصوصاً إذا توفرت إشارات التحكم مثل RTS، CTS أو DCD.
مثال بلغة C
// transmit byte serially, MSB first void send_8bit_serial_data(unsigned char data) { int i; // select device output_high(SD_CS); // send bits 7..0 For (i=0; I < 8; i++) { // consider leftmost bit // set line high if bit is 1, low if bit is 0 if (data & 0x80) output_high(SD_DI); else output_low(SD_DI); // pulse clock to indicate that bit value should be read output_low(SD_CLK); output_high(SD_CLK); // shift byte left so next bit will be leftmost data <<= 1; } // deselect device output_low(SD_CS); }
المراجع
1. Michael Predko (2000). Programming and customizing PICmicro microcontrollers (2nd ed.). McGraw-Hill Professional. pp. 10–12. .
وصلات خارجية
- نقل تسلسلي غير متزامن Asynchronous Serial (RS-232).