TTL सीरियल के साथ, दो यूनिडायरेक्शनल डेटा लाइनें हैं। प्रत्येक प्रेषक द्वारा संचालित होता है, दोनों उच्च और निम्न। एक 0 बिट VV द्वारा 0V को 1 बिट द्वारा दर्शाया गया है।
रिसीवर का पिन एक इनपुट पर सेट होना चाहिए।
तो, एक माइक्रोकंट्रोलर के लिए एक बाइट (8-N-1 नो फ्लो कंट्रोल) भेजने के लिए यह कुछ ऐसा कर सकता है:
#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);
}
(यह कोड थोड़ा पीछे की ओर पढ़ता है क्योंकि यह मूल रूप से उल्टे TTL धारावाहिक के लिए था)
बेशक, ज्यादातर MCU में हार्डवेयर UART होते हैं जो आपके लिए यह सब करते हैं।
यहाँ वह है जो आप एक दायरे में देखेंगे:
https://www.pololu.com/docs/0J25/4.a
यहाँ पर धारावाहिक की व्याख्या करने वाली लेडीदा का एक शानदार वीडियो है:
http://www.adafruit.com/blog/2010/09/15/usb-serial-and-you-video-an-adafruit-after-school-special/