Idle : High
Start bit : Low
Data : LSB first
也可以透過電腦終端機軟體Tera Term了解以下資訊 :
Port : 跟PC的哪個COM port連線
Baud rate : 傳送速度(每秒多少位元,常見9600 bit per second)
Data : 8bit or 9bit(常見為8bit)
Parity : 同位元檢查(錯誤檢查用,若只是用來做開發的Debug用途,可以選none)
Stop : 1 / 1.5 / 2 bit(通常為1bit)
Flow control : 流量控制(基本上MCU不需要使用到)
(1)設定GPIO為輸出
(2)設定timer中斷或者使用delay,我最常用是使用timer中斷,設定方法為先知道傳送速度,假設為9600bps,也就是說每104us送一個bit,因此timer interval先設定為104us,當要傳送時,開啟timer計數等待中斷發生之後傳送第一個Start bit,接著等下一次中斷傳送LSB,繼續等待下次中斷直到LSB送完之後並且送完Stop bit;一個bit一個bit緊接著傳送的方式要有移位的觀念,假設MCU使用的是PIC16系列程式如下:
volatile unsigned char TX_Data;
volatile unsigned char Cnt = 0;
#define TX LATCbits.LATC7
// Cnt = 0 : Start bit
// Cnt = 1~8 : Data bit
// Cnt = 9 : Stop bit
void interrupt ISR(void)
{
if(TMR2IF && TMR2IE)
{
TMR2IF = 0;
if(Cnt == 0)
{
TX = 0; // Start bit
}
else if(Cnt < 9) // Data bit : 1 ~ 8
{
if ((TX_Data >> (Cnt - 1)) & 0x01) /* bit to send */
TX = 1;
else
TX = 0;
}
else
{
TX = 1; // Stop bit
TMR2ON = 0;
Cnt = 0;
return;
}
Cnt++;
}
void main(void)
{
Init_MCU();
Init_Timer2(); // 104us interval
TX_Data = 0x55;
TMR2ON = 1; // Start UART TX
PEIE = 1;
GIE = 1;
while(1);
return;
}