TTL seri ile iki tek yönlü veri hattı vardır. Her biri, hem yüksek hem de düşük gönderen tarafından yönlendirilir. 0 bit, 0V ile 1 bit VCC ile temsil edilir.
Alıcının pini bir girişe ayarlanmalıdır.
Yani, bir mikrodenetleyicinin bir bayt (8-N-1 akış kontrolü yok) göndermesi için böyle bir şey yapabilir:
#define BAUDRATE 9600
#define DELAY (SYS_CLK/BAUDRATE)
#define UART_BITBANG_OFF UART_BITBANG_PORT |= _BV(UART_BITBANG_PIN)
#define UART_BITBANG_ON UART_BITBANG_PORT &= ~ _BV(UART_BITBANG_PIN)
#define UART_BITBANG_BIT(bit) {if (bit) UART_BITBANG_ON; else UART_BITBANG_OFF; _delay_us(DELAY);}
void uart_bitbang_init(void)
{
UART_BITBANG_DDR &= ~ _BV(UART_BITBANG_PIN); // TX output
}
void uart_bitbang_putc(uint8_t c)
{
UART_BITBANG_BIT(1)
UART_BITBANG_BIT((c & 0x1) == 0);
UART_BITBANG_BIT((c & 0x2) == 0);
UART_BITBANG_BIT((c & 0x4) == 0);
UART_BITBANG_BIT((c & 0x8) == 0);
UART_BITBANG_BIT((c & 0x10) == 0);
UART_BITBANG_BIT((c & 0x20) == 0);
UART_BITBANG_BIT((c & 0x40) == 0);
UART_BITBANG_BIT((c & 0x80) == 0);
UART_BITBANG_BIT(0);
}
(Bu kod, başlangıçta tersine çevrilmiş TTL serisi için tasarlandığından biraz geriye doğru okur)
Tabii ki, çoğu MCU'da tüm bunları sizin için yapan donanım UART'ları vardır.
Bir kapsamda görebilecekleriniz:
https://www.pololu.com/docs/0J25/4.a
Ladyada'dan seriyi anlatan harika bir video:
http://www.adafruit.com/blog/2010/09/15/usb-serial-and-you-video-an-adafruit-after-school-special/