
flag = 0;

////////// DAC ROUTINE //////////
void dac(void) {
	if(RI) {
		a = SBUF;	// read from UART
		nine = RB8;
		RI = 0;

		if(nine) {	// receive HHHHLLLL
			high = (a&0xF0) >> 4;	// high: 0000HHHH
			low = (a&0x0F) << 4;	// low: LLLL0000
			flag = 1;
		}
		else if(flag) {	// receive LLLLHHHH
			low |= (a&0xF0) >> 4;	// low: LLLL0000 | 0000LLLL = LLLLLLLL
			DAC0H = high;	// output high 4bits
			DAC0L = low;	// output low 8bits			
			high = a&0x0F;	// high: 0000HHHH
			flag = 2;
		}
		else if(flag==2) {	// receive LLLLLLLL
			low = a;	// low: LLLLLLLL
			DAC0H = high;	// output high 4bits
			DAC0L = low;	// output low 8bits
			flag = 0;
		}
	}
}

+--------+--------+--------+--------+--------+--------+--------+--------+
|9th bit |    1   |    0   |    0   |    1   |    0   |    0   |        |
|data bit|HHHHLLLL|LLLLHHHH|LLLLLLLL|HHHHLLLL|LLLLHHHH|LLLLLLLL| repeat |
|flag    |    0   |    1   |    2   |    0   |    1   |    2   |        |
+--------+--------+--------+--------+--------+--------+--------+--------+
