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 직렬을위한 것이기 때문에 약간 뒤로 읽습니다)
물론 대부분의 MCU에는 이러한 모든 작업을 수행하는 하드웨어 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/