بیت بنگ
بیت بنگ روشی برای ارتباطات سریال با پیادهسازی نرمافزاری بهجای سخت افزار اختصاصی میباشد. برنامه نرمافزاری مستقیماً چگونگی پایههای میکروکنترلر را ساماندهی کرده یا نمونه برداری کرده و وظیفه همه پارامترهای سیگنال از جمله زمان بندی، سطوح، همزمانی و غیره را برعهده دارد. در مقایسه با بیت بنگ، سخت افزار اختصاصی (مانند یک مودم، یوارت یا شیفت رجیستر) همه این پارامترها را کنترل کرده و یک اینترفیس داده بافر شده در دیگر سیستمها فراهم میکند، به فرمی که نرمافزاری برای دمدوله کردن سیگنال مورد نیاز نمیباشد. فرایند ببت بنگ را میتوان با قیمت بسیار پایینی انجام داد و برای نمونه در سیستمهای امبدد (توکار) به کار گرفت.[۱]
هرچند گاهی بیت بنگ کردن نوعی هک کردن به حساب میاید، ولی این امکان را میدهد که با کمترین یا بدون هرگونه تغییراتی، از پروتکلهای گوناگون برای ارتباط با انواع دستگاههای ارتباط سریال از جمله انواع مودمهای وایرلس (بی سیم) FSK و GFSK و FM و PLC (دیتا روی برق شهر) و GSM و پیامک SMS و اینترنت GPRS و مکان یاب GPS و پل یا بریجهای USB به سریال و SPI و I2C و شبکه اترنت (Ethernet) و کارت خوانهای مغناطیسی و الکترومغناطیسی RFID برای کاربردهای شناسایی و ساعت زنی ، ماژولهای اثر انگشت و تشخیص نشت گاز و سنسورهای گوناگون و غیره بهره گرفت.
مشکلاتی هم در این روش وجود دارد. پروسه شبیه سازی نرمافزاری توان پردازشی بیشتری نسبت به سخت افزار اختصاصی مصرف میکند. میکروکنترلر نسبت به حجم دیگر وظایفش، بیشتر زمان خود را صرف خواندن یا نوشتن نمونهها از پایه ورودی یا روی پایه خروجی میکند. سیگنال تولید شده شامل جیتر و گلیچهای بیشتری خواهد بود، مخصوصا اگر پردازنده در هنگام ارتباط سریال وظایف دیگری را هم پردازش نماید. با این وجود، اگر برنامه بیت بنگ به حالت وقفه(اینتراپت) سیگنال انجام شود، این مشکل کمتر نمود پیدا میکند مخصوصا اگر سیگنالهای کنترلی مانند 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);
}
منابع
[ویرایش]- ↑ Michael Predko (2000). Programming and customizing PICmicro microcontrollers
(2nd ed.). McGraw-Hill Professional. p. 10–12. ISBN 978-0-07-136172-9.
پیوند به بیرون
[ویرایش]- Asynchronous Serial (RS-232)
- I2C Bus
- SPI Bus
- Efficient bit-banged SPI for 8051 microcontroller بایگانیشده در ۲۳ اوت ۲۰۱۲ توسط Wayback Machine