当UART模块成功地接收到一个字节的数据后,会把接收到的数据载人接收缓冲寄存器(P_UART_Data),如果此时在P_UART_Status中的RXIE位为1,则会自动将RXIF标志位置1;之后读取P_UART_Data会自动将RXIF标志位清零。
当P_UART_Status中的TXIE位为1时,若TXIF位置1则表示UART模块完成数据发送并准备好进行下一次发送,如果状态寄存器中“ 1 ” 标志位为0(总中断打开)则会发生一次UART发送中断。写数据到P_UART_Data寄存器会自动将TXIF位清零。BUSY为只读的标志位,当其置1时代表UART模块正在忙,当传输完成BUSY标志位会自动清零;P_UART_Status中的其他标志位还有OERR、PERR和FERR,都为帧错误信息标志,向对应的寄存器位写入“ 1 ” 可清除OERR(溢出错误标志)、PERR(奇偶校验错误标志)与FERR(帧错误标志)。
在软件向P_UART_Data寄存器写入数据后,UART开始发送。UART在TX引脚上发送数据按照以下顺序:起始位、8位数据(低位在前)、奇偶校验位(奇偶校验使能的情况下有效)、停止位。发送停止位后再经过两个CPU时钟周期,寄存器P_UARTl_Status中的TXIF位被置1。
当P_UART_Ctrl寄存器中的RXEN位使能接收功能后,如果RX引脚接收到一个开始位的下降沿,标志着接收数据开始。在停止位时间周期内,串口检查以下条件:如果满足RXIF=0且RXIE=1的条件,寄存器串口向P_UART_Data写入接收字节并置RXIF位为1;如果不满足,则丢失接收数据,不会载人到寄存器P_UART_Data中。在停止位时间过了一半之后,串口开始等待RX引脚上的下一个开始位下降沿。
与UART有关的两个中断:发送中断和接收中断。发送中断信号实际上是“发送数据准备好”标志触发的。
产生UART中断需要以下步骤。
(1)用“SEI”指令关闭总的中断开关。
(2)设置UART相关寄存器。
(3)在P_UART_Ctrl($46)寄存器使能发送/接收中断。
(4)用“CLI”指令打开总的中断开关。
(5)等待中断产生。
![](http://blog.eccn.com/UploadFiles/2007-11/1120797903.jpg)
![](http://blog.eccn.com/UploadFiles/2007-11/1120877224.jpg)