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; //发送完关闭串口发送中断 } }
时间: 2024-10-14 07:46:56