推薦中山精品網(wǎng)站建設(shè)杭州網(wǎng)絡(luò)排名優(yōu)化
在發(fā)送模式下,UART 的串行數(shù)據(jù)發(fā)送電路主要包括一個(gè)發(fā)送移位寄存器(TSR),TSR 功能是將數(shù)據(jù)
逐個(gè)移位送出。待發(fā)數(shù)據(jù)必須先寫(xiě)到發(fā)送緩沖區(qū)中。
TXIFx 是發(fā)送中斷標(biāo)志位,可配置為發(fā)送緩沖區(qū)空或TSR 空。
數(shù)據(jù)的發(fā)送支持7bit 、8bit 或9bit 數(shù)據(jù)格式, 如果使用9bit 的數(shù)據(jù)格式, 必須先設(shè)置RXSTA.PDSEL[1:0]=11,第9 位數(shù)據(jù)要被放入TXSTA.TX9D 位之中。在數(shù)據(jù)發(fā)送之前,必須先將此位寫(xiě)入,然后再把8 位的值寫(xiě)入TXREG 中。因?yàn)橐坏㏕XREG 寄存器被寫(xiě)入數(shù)據(jù)后,這個(gè)8 位的數(shù)據(jù)可能馬上就會(huì)被放入TSR 寄存器開(kāi)始發(fā)送工作,所以為了數(shù)據(jù)發(fā)送正確性,必須先寫(xiě)入第9 位的值。
一般情況下,一開(kāi)始TSR 寄存器是空的,數(shù)據(jù)的發(fā)送需先設(shè)定波特率SPBRG,使能發(fā)送模塊(設(shè)定TXEN 為1),然后寫(xiě)入TXREG 寄存器開(kāi)始發(fā)送。也可以在設(shè)定好波特率SPBRG 后,先寫(xiě)入TXREG寄存器,然后再設(shè)定TXEN 使能發(fā)送模塊來(lái)開(kāi)始數(shù)據(jù)發(fā)送。如果在數(shù)據(jù)發(fā)送過(guò)程中將發(fā)送模塊使能位TXEN 清0,那么數(shù)據(jù)發(fā)送工作就會(huì)被中斷,發(fā)送模塊也會(huì)被復(fù)位。
下圖是UART異步發(fā)送的兩種工作模式:
設(shè)置異步發(fā)送操作的步驟如下:
- 根據(jù)CPU 的工作時(shí)鐘,選擇合適的波特率,初始化SPBRG
- 若需要中斷,置相應(yīng)的UARTIE.TXIE=1
- 決定數(shù)據(jù)發(fā)送的格式。設(shè)定RXSTA.PDSEL[1:0]位,決定發(fā)送8 位數(shù)據(jù)還是9 位數(shù)據(jù);設(shè)定TXSTA.STOPSEL位,決定發(fā)送 1 位還是 2 位停止位
- 如果希望發(fā)送的串行數(shù)據(jù)紅外調(diào)制,向 IRCON 寄存器寫(xiě)入合適的值來(lái)獲得相應(yīng)的調(diào)制頻率和占空比,并置TXSTA.IREN=1
- 使能發(fā)送模塊。置 TXSTA.TXEN=1
- 如果選擇發(fā)送 9 位數(shù)據(jù),第 9 位應(yīng)先寫(xiě)入 TXSTA.TX9D 位
- 將 8 位要發(fā)送的數(shù)據(jù)寫(xiě)入 TXREG 寄存器 啟動(dòng)發(fā)送