目錄
1. UART中斷工作的機制
UART只有一個發(fā)送中斷向量和一個接收中斷向量,通過判斷中斷向量的標志來控制數(shù)據(jù)的收發(fā)
1.1 發(fā)送機制
當用戶想發(fā)送數(shù)據(jù)時,UxIFG產(chǎn)生一個中斷,表明UxTXBUF已經(jīng)準備好接收數(shù)據(jù)。當UxTXBUF接收字符后或中斷被執(zhí)行,URXIFG將會復位。
SWRST = 1或PUC會置位UxIFG (SWRST: 系統(tǒng)復位)
SWRST = 1或PUC會復位UxIE
1.2接收機制
UxRXBUF每次接收一個字符并加載時,URXIFGx會產(chǎn)生一個中斷標記
UxRXBUF被讀取時或中斷被執(zhí)行時,URXIFG被自動復位
當PUC或SWRST = 1時UxRXIE 復位
建議接收中斷函數(shù)的代碼要精簡,執(zhí)行時間要短,防止數(shù)據(jù)接收不全。
2. 代碼實現(xiàn)
//串口初始化模塊
void UART_Init()
{
U0CTL|=SWRST + CHAR; //復位SWRST,8位數(shù)據(jù)模式
U0TCTL|=SSEL1; //SMCLK為串口時鐘
U0BR1=baud_h; //BRCLK=8MHZ,Baud=BRCLK/N
U0BR0=baud_l; //N=UBR+(UxMCTL)/8
U0MCTL=0x00; //微調(diào)寄存器為0,波特率9600bps
ME1|=UTXE0; //UART0發(fā)送使能
ME1|=URXE0; //UART0接收使能
U0CTL&=~SWRST;
IE1|=URXIE0; //接收中斷使能位, //必須設置在SWRST之后,否則會復位
P3SEL|= BIT4 + BIT5; //設置IO口為第二功能模式,啟用UART功能
P3DIR|= BIT4; //設置TXD0口方向為輸出
}
//*************************************************************************
// 串口0發(fā)送字符串函數(shù)
//*************************************************************************
void Print_Str(uchar *s)
{
while(*s != '