static struct _USART_BUF_FIFO_
{
U8 wr;
U8 rd;
U8 ct;
U8 buff[USART_BUF_LEN];
};
struct _USART_BUF_FIFO_ TX_fifo , RX_fifo;
void usart_tx_interrupt(void)
{
U8 i;
i = TX_fifo.ct;
// 继续发送缓冲区内数据
if (i != 0)
{
// 数据字节长度减一
TX_fifo.ct = --i;
// 读索引值读取数据
i = TX_fifo.rd;
TXREG = TX_fifo.buff[i++];
// 读索引值自动回零
TX_fifo.rd = i % USART_BUF_LEN;
}
// 长度为零数据全部发送
else
{
PIE1bits.TXIE = 0; //发送完关闭串口发送中断
}
}
void usart_tx_interrupt(void)
{
U8 *p;
U8 *p1;
U8 *p2;
p = &TX_fifo.ct;
p1 = &TX_fifo.rd;
p2 = &TX_fifo.buff;
if (*p != 0)
{
// 数据字节长度减一
(*p)--;
// 读索引值读取数据
TXREG = *(p2+(*p1));
(*p1)++;
// 读索引值自动回零
*p1 = (*p1) % USART_BUF_LEN;
}
// 长度为零数据全部发送
else
{
PIE1bits.TXIE = 0; //发送完关闭串口发送中断
}
}