This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

AT89C51CC03 : 10-Bit ADC Problems

Hello,

i have problems to get a 10-Bit result from the internal adc of the AT89C51CC03.

I always got only a 8-Bit result, though setting the PSIDLE-Bit.
Also i did not need the adc-eoc-interrupt to continue after the conversion,
as it is explained in the device manual.

So it seems to me, i made something wrong in setting up the adc for 10-Bit resolution.

I include the following code, which should not run with disabled eoc-interrupt.
But it runs !!!

#include "AT89C51CC03.h"
unsigned int i;
void main(void)
{
        ADCF = 0x20;  /* configure channel P1.5(AN5) for ADC */
        ADCLK = 0x00;  /* init prescaler for adc clock */
        ADCON = 0x20;  /* Enable the ADC */

        EA = 0;  /* disable interrupts */
        EADC = 0;

        P31 = 1;   // signal running via txd pin
        for (i=0; i< 20000; i++);

        while(1)
        {
                ADCON &= ~0x07;  /* Clear the channel field ADCON[2:0] */
                ADCON |= 0x05;   /* Select channel 5 */
                ADCON |= 0x40;   /* 10 bit mode */
                ADCON |= 0x08;   /* Start conversion */

                P31 = ~P31;       // signal running via txd pin
                while (!(ADCON & 0x10));
                ADCON &= 0xef;
                for (i=0; i< 20000; i++);

        }
}

So please contact me, if you have any ideas, hints, solutions, etc.

Parents
  • i tried your code, but i always got only an 8-Bit result.
    No. You appear to have somewhat strange ideas of what makes a result a 10-bit one. You appear to be talking about the values of 10 different bits, so what exactly is 8-Bit about that?

    (ADDH toggles +- 1LSB, and ADDL toggles from 0..3)
    I think with 10 Bit precision, ADDH should be stable.

    That thought is incorrect. You're talking about a digital value here. All bits can change for a 1-bit change in the value: 0x1ff -> 0x200

Reply
  • i tried your code, but i always got only an 8-Bit result.
    No. You appear to have somewhat strange ideas of what makes a result a 10-bit one. You appear to be talking about the values of 10 different bits, so what exactly is 8-Bit about that?

    (ADDH toggles +- 1LSB, and ADDL toggles from 0..3)
    I think with 10 Bit precision, ADDH should be stable.

    That thought is incorrect. You're talking about a digital value here. All bits can change for a 1-bit change in the value: 0x1ff -> 0x200

Children
No data