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

SPI Protocol Problem in AT89C51ED2

Hi Frnds,

I am working on a SPI based ADC MCP3202, using Atmel 89C51ED2 micro controller..,I am facing problem in Implementation of protocol.

1. The ADC is of 12 bit ADC, but the problem is SPDAT is 8 bit data register and how can i acesses remaining 4 bits of data ???

Just to try I gave some data 0x00 on SPDAT register after acessesing 8 bit of data from adc in order to get remaining Data from ADC,

Is the methodlogy what i have used is right???
I am not able to get the ADC data!!!
If there is any solution to the problem , plz guide me...

I am attaching the code with message.

#include <REG51xD2.H>
#include<stdio.h>
#include<stdlib.h>
#include"display.h"

sbit  CS    = P1^0;


 unsigned int call_adc(unsigned char Channel);


         unsigned int call_adc(unsigned char Ch)
         {

                  unsigned int Data1,Data2;
                  unsigned char Channel;

                  CS=0;                                                 /* Chip Select for ADC Active State     */

                  if(Ch==0)                                             /* Channel Select                                               */
                  Channel=0x0D;                                 /* Channel -1                                                   */
                  else
                  Channel=0x0F;                                 /* Channel -2                                                   */

                  SPDAT=Channel;                                /* Channel i/p for SPI                                  */
                  while(!(SPSTA&0x80));
                  Data1=SPDAT;                                  /* Higher 8bit of ADC  value                    */
                  SPSTA|=0x7F;                                  /* Clear Trasmit Flag            */
                  Data1=Data1<<8;
                  SPDAT=0x00;
                  while(!(SPSTA&0x80));
                  SPSTA|=0x7F;                                   /* Clear Trasmit Flag      */
                  Data2=SPDAT;                                   /* Lower 8bit of ADC value */
                  Data1|=Data2;                                  /* 12 Bit ADC Value        */

                  CS=1;                                                  /* Chip Select for ADC off State*/

                  return (Data1>>4);                       /* 12 Bit ADC Data              */

         }



        void main()
        {
                unsigned int Adc_Data=0;
                static unsigned char Buffer[10];

                SPCON |=  0x10;                /* Master mode                                   */
                SPCON |=  0x82;                /* Fclk Periph/128                               */
                SPCON &= ~0x08;                /* CPOL=0; transmit mode example */
                SPCON |=  0x04;                /* CPHA=1; transmit mode example */
                SPCON |=  0x40;                /* run spi                                               */
                SPSTA |=  0x7F;                            /* Clear Trasmit Flag            */


                Initlcd();

                while(1)
                {
                 Adc_Data=call_adc(0);
                 sprintf(Buffer,"%d",(unsigned int)Adc_Data);
                 display(Buffer,0x80);
                }


        }










0