UART_RxTail = x; UART_RxHead = x; UART_TxTail = x; UART_TxHead = x; }
/* interrupt handlers */
void UART_interrupt( void ) interrupt 4 { if (TI)
{ // 是否是发送中断 unsigned char tmptail; TI=0;
if (UART_TxTail==UART_TxHead) {
fSeri0_Send_Ok=0; /*已发送完毕*/ } else {
tmptail = ( UART_TxTail + 1 ) & UART_TX_BUFFER_MASK; UART_TxTail = tmptail; /* store new index */ SBUF = UART_TxBuf[tmptail]; /* start transmition */ } } if (RI) {
unsigned char revdata; unsigned char tmphead; RI=0;
revdata = SBUF;
tmphead = ( UART_RxHead + 1 ) & UART_RX_BUFFER_MASK; UART_RxHead = tmphead; /* store new index */
UART_RxBuf[tmphead] = revdata; /* store received data in buffer */ } }
unsigned char ReceiveByte( void ) {
unsigned char tmptail;
while ( UART_RxHead == UART_RxTail );/* wait for incomming data */
tmptail = ( UART_RxTail + 1 ) & UART_RX_BUFFER_MASK;/* calculate buffer index */ UART_RxTail = tmptail; /* store new index */ return UART_RxBuf[tmptail]; /* return data */ }
voidTransmitByte( unsigned char senddata ) {
unsigned char tmphead;
tmphead = ( UART_TxHead + 1 ) & UART_TX_BUFFER_MASK; UART_TxBuf[tmphead] = senddata; /* store data in buffer */ UART_TxHead = tmphead; /* store new index */ if(fSeri0_Send_Ok==0) {
fSeri0_Send_Ok=1; TI=1; } }