
void serial0_ISR(void) interrupt 4 using 2{
	if(RI) {
		RI = 0;	// Always acknowledge the interrupt
		if(RX_EMPTY_0 || (((RX_IN_PTR_0 + 1) % RX_BUF_SIZE_0) != RX_OUT_PTR_0)) { // buffer full if in+1 == out

			RX_BUF_0[RX_IN_PTR_0]=SBUF0;

			RX_IN_PTR_0 = (RX_IN_PTR_0 + 1) % RX_BUF_SIZE_0;

			RX_EMPTY_0 = 0; // not empty any more
		}
	}
	else {
		TI = 0; // always acknowledge interrupt

		// put_char routine must not fill the buffer such that in ptr catches out ptr
		if(TX_OUT_PTR_0 != TX_IN_PTR_0) {

			SBUF0 = TX_BUF_0[TX_OUT_PTR_0];

			TX_OUT_PTR_0 = (TX_OUT_PTR_0 + 1) % TX_BUF_SIZE_0;
		}
		else TX_EMPTY_0 = 1; // we are done when out ptr catches in ptr
	}
}

void serial1_ISR(void) interrupt 7 using 2{

	if(RI1) {
		RI1 = 0;	// Always acknowledge the interrupt
		if(RX_EMPTY_1 || (((RX_IN_PTR_1 + 1) % RX_BUF_SIZE_1) != RX_OUT_PTR_1)) { // buffer full if in+1 == out

			RX_BUF_1[RX_IN_PTR_1]=SBUF1;

			RX_IN_PTR_1 = (RX_IN_PTR_1 + 1) % RX_BUF_SIZE_1;

			RX_EMPTY_1 = 0; // not empty any more
		}
	}
	else {
		TI1 = 0;

		// put_char routine must not fill the buffer such that in ptr catches out ptr
		if(TX_OUT_PTR_1 != TX_IN_PTR_1) {
			REN1 = 0; // can't send and recieve at the same time
			TEN = 1;
			SBUF1 = TX_BUF_1[TX_OUT_PTR_1];
			TX_OUT_PTR_1 = ++TX_OUT_PTR_1 % TX_BUF_SIZE_1;
		}
		else {
			TX_EMPTY_1 = 1; // we are done when out ptr catches in ptr
			TEN = 0;
			REN1 = 1; // finished talking, now we listen
		}
	}
}
