Bit-banging 是一种用软件替代专职硬件的串行通信的技术。软件直接对微处理器的管脚的状态进行设置和采样,其功能涵盖诸如:时 钟,电平,同步等所有参数。与此不同的是(传统的串行通信技术中),专职硬件诸如 modem、UART 或者 位移寄存器等一般是用来处理这些参数并且提供一个(缓存)的数据接口,软件在这种情况下同信号处理无关。实现 Bit-banging 技术的成本可以是很低的,比如利用 嵌入式系统。

  尽管它同“骇客”有些关联,bit-banging 具有明显优点诸如:让相同的设备运行不同的协议而只需很小的(甚至不需)硬件的改动。借助很少的额外设备,我们也许可以从数字管脚(数字终端)可以得到视频信号。   bit-banging 也有一些明显的缺点。在软件仿真的过程中消耗的能量比同样功能的专职硬件大。微处理器过忙地从管脚采样和发送采样信号到管脚。在同等微处理器处理能力下, 系统常常会有些噪音。尽管如此,如果bit-banging 仅仅是相应硬件中断的例程的话,这些影响便微乎其微。   C 代码例程   // transmit byte serially, MSB first   void send_8bit_serial_data(unsigned char data)   {   unsigned char 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);   }