ด้วยอนุกรม TTL มีสองบรรทัดข้อมูลทิศทางเดียว แต่ละคนถูกขับเคลื่อนโดยผู้ส่งทั้งสูงและต่ำ 0 บิตจะถูกแทนด้วย 0V ต่อ 1 บิตโดย VCC
ควรตั้งพินของผู้รับเป็นอินพุต
ดังนั้นสำหรับไมโครคอนโทรลเลอร์เพื่อส่งไบต์ (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 แบบกลับด้าน)
แน่นอน MCUs ส่วนใหญ่มี UART ฮาร์ดแวร์ซึ่งทำสิ่งนี้ให้คุณ
นี่คือสิ่งที่คุณจะเห็นในขอบเขต:
https://www.pololu.com/docs/0J25/4.a
นี่คือวิดีโอยอดเยี่ยมจาก ladyada ที่อธิบายลำดับ:
http://www.adafruit.com/blog/2010/09/15/usb-serial-and-you-video-an-adafruit-after-school-special/