help me ADC on LPC2148

I use TWO ADC1 (ADC1.0 and ADC1.1) and they are work together. And I have some problem my program loop forever when I read ADC1.1(see below) > Help me to solve that problem! Thank

#include "LPC214x.H" 	                                	// LPC2148 MPU Register
#include <stdio.h>											// For Used Function printf 

/* pototype  section */
void init_serial0 (void); 									// Initil UART-0
int putchar (int ch);  										// Put Char to UART-0
int getchar (void);  										// Get Char From Uart-0
void delay(unsigned long int);								// Delay Time Function
unsigned int count;
unsigned long int tempx,tempy;
unsigned int valx;		   									// ADC Result (HEX)
unsigned int valy;
float voltx;													// ADC Result Volt
float volty;
float ax,ay,a;


int main(void)
{  

PCONP|=1<<20;//set PDA1 cap nguon cho adc1

init_serial0();				   							// Initial UART0 = 9600,N,8,1
  
  //chon ADC1.1 = P0.8 va ADC1.0=P0.6     
  PINSEL0 |= 0x000033000; 									// Select ADC8 Pin Connect P0.6
  
  // Initial ADC8 (ADCR=0x01210601)    
  AD1CR &= 0x00000000;										// Clear All Bit Control
  AD1CR |= 0x00000003;										// Select ADC1.0 va ADC1.1
  AD1CR |= 0x00000600;										// ADC Clock = VBP(PCLK) / 7
  AD1CR |= 0x00010000;                                      // Busrt = 1 = Conversion Continue
  AD1CR &= 0xFFF1FFFF;										// CLKS = 000 = 10Bit : 11 Cycle Clock Conversion 
  AD1CR |= 0x00200000;										// PDN = 1 = Active ADC Module
  AD1CR &= 0xFF3FFFFF;										// TEST[1:0] = 00 = Normal Mode
  AD1CR &= 0xF7FFFFFF;										// EDGE = 0 = Conversion on Falling Edge  
  AD1CR |= 0x01000000;										// START = 001 = Start Conversion Now
    //p0.6= Ax gia toc theo truc x																				   
  // Start Test Read ADC8 and Display on UART0 //
  while(1)													// Loop Continue  
  {
     count=1;
	 tempx=tempy=0;
	 while(count--)
	 {
		//doc gia tri ADC1.0=ax=valx
		
	    do
        {
        valx = AD1DR0;       					// Read A/D Data Register and clear DONE bit 
		}        
        while ((valx & 0x80000000) == 0);  					// Wait ADC Conversion Complete	
		 valx = (valx >> 6) & 0x03FF;
		 // printf("volt"); 
//		doc gia tri ADC1.1 =ay=valy
	    do			  											// Loop Read ADC1.1(ADC8)
        {
        valy = AD1DR1;   
		// Read A/D 

//READ Data Register and clear DONE bit 
		}        //why my program loop forever here
       while ((valy & 0x80000000) == 0); 	// Wait ADC Conversion Complete	
	  
	   valy = (valy >> 6) & 0x03FF;
       tempx+=valx;
	   tempy+=valy;
	  }
	  volty = tempy * 3.3 / 1023.0/100.0;						 	        
	  voltx = tempx * 3.3 / 1023.0/500.0;
	  printf("voltx = %1.2f \n ",voltx); 		
	  printf("voly = %1.2f \n ",volty);
	  delay(10000);
    }
}

/******************************/
/* Initial UART0 = 9600,N,8,1 */
/* VPB(pclk) = 60.00 MHz      */
/******************************/
void init_serial0 (void)  
{
  PINSEL0 &= 0xFFFFFFF0;									// Reset P0.0,P0.1 Pin Config
  PINSEL0 |= 0x00000001;									// Select P0.0 = TxD(UART0)
  PINSEL0 |= 0x00000004;									// Select P0.1 = RxD(UART0)

  U0LCR &= 0xFC;											// Reset Word Select(1:0)
  U0LCR |= 0x03;											// Data Bit = 8 Bit
  U0LCR &= 0xFB;											// Stop Bit = 1 Bit
  U0LCR &= 0xF7;											// Parity = Disable
  U0LCR &= 0xBF;											// Disable Break Control
  U0LCR |= 0x80;											// Enable Programming of Divisor Latches

  // U0DLM:U0DLL = 60.00 MHz / [16 x Baud]
  //             = 60.00 MHz / [16 x 9600]
  //             = 390.6 = 391 = 0187H
  U0DLM = 0x01;												// Program Divisor Latch(391) for 9600 Baud
  U0DLL = 0x87;

  U0LCR &= 0x7F;											// Disable Programming of Divisor Latches

  U0FCR |= 0x01;											// FIF0 Enable
  U0FCR |= 0x02;											// RX FIFO Reset
  U0FCR |= 0x04;											// TX FIFO Reset
  U0FCR &= 0x3F;                      
}

/****************************/
/* Write Character To UART0 */
/****************************/
int putchar (int ch)  
{                  
  if (ch == '\n')  
  {
    while (!(U0LSR & 0x20));  								// Wait TXD Buffer Empty
    U0THR = 0x0D;                          					// Write CR
  }
  while (!(U0LSR & 0x20));									// Wait TXD Buffer Empty
  return (U0THR = ch);										// Write Character
}

/*****************************/
/* Read Character From UART0 */
/*****************************/
int getchar (void)  
{                    
  while (!(U0LSR & 0x01));									// Wait RXD Receive Data Ready
  return (U0RBR);											// Get Receice Data & Return
}

/***********************/
/* Delay Time Function */
/*    1-4294967296     */
/***********************/
void delay(unsigned long int count1)
{
  while(count1 > 0) {count1--;}								// Loop Decrease Counter	
}

As long as you keep reading the adc value and clearing the done bit, the done bit will alwyas be clear in the while clause. How abiout waiting for done and then reading the value?