Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Help me to write code for ADC...

Status
Not open for further replies.

1230

Member level 3
Joined
Jun 18, 2002
Messages
62
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,286
Activity points
355
Pls favour me for complete adc code for 8051,using embedded C. i am a beginner for adc, so write comments for respective statement,which will help me for advancement with adc.better if written using mikroC.
 

Pls favour me for complete adc code for 8051,using embedded C. i am a beginner for adc, so write comments for respective statement,which will help me for advancement with adc.better if written using mikroC.


this source code maybe this could help
Code:
#include <AT89X52.H> 
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7, 
0xef,0xdf,0xbf,0x7f}; 
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 
                           0x6d,0x7d,0x07,0x7f,0x6f,0x00}; 
unsigned char dispbuf[8]={10,10,10,10,10,0,0,0}; 
unsigned char code tab[]={0,0,  0,	1,	0,	2,	0,	0,	3,	0 ,
                         4,	0,	0,	5,	0,	6,	0,	0,	7,	0 ,
                         8,	0,	0,	9,	0,	0,	10,	0,	11,	0 ,
                         0,	12,	0,	13,	0,	0,	14,	0,	15,	0 ,
                         0,	16,	0,	17,	0,	0,	18,	0,	19,	0,
                         0,	20,	0,	0,	21,	0,	22,	0,	0,	23,
                         0,	24,	0,	0,	25,	0,	26,	0,	0,	27,
                         0,	28,	0,	0,	29,	0,	0,	30,	0,	31,
                         0,	0,	32,	0,	33,	0,	0,	34,	0,	35,
                         0,	0,	36,	0,	37,	0,	0,	38,	0,	39,
                         0,	0,	40,	0,	0,	41,	0,	42,	0,	0,
                         43,0,	44,	0,	0,	45,	0,	46,	0,	0,
                         47,0,	48,	0,	0,	49,	0,	50,	0,	0,
                         51,0,	0,	52,	0,	53,	0,	0,	54,	0 ,
                         55,0,	0,	56,	0,	57,	0,	0,	58,	0,
                         59,0,	0,	60,	0,	0,	61,	0,	62,	0,
                         0,	63,	0,	64,	0,	0,	65,	0,	66,	0,
                         0,	67,	0,	68,	0,	0,	69,	0,	70,	0,
                         0,	71,	0,	0,	72,	0,	73,	0,	0,	74,
                         0,	75,	0,	0,	76,	0,	77,	0,	0,	78,
                         0,	79,	0,	0,	80,	0,	0,	81,	0,	82,
                         0,	0,	83,	0,	84,	0,	0,	85,	0,	86,
                         0,	0,	87,	0,	88,	0,	0,	89,	0,	90,
                         0,	0,	91,	0,	0,	92,	0,	93,	0,	0,
                         94,0,	95,	0,	0,	96,	0,	97,	0,	0,
                         98,0,	99,	0,	0,	100,0,	0,	0};
unsigned char dispcount; 

unsigned int R1;

sbit ST=P3^0; 
sbit OE=P3^1; 
sbit EOC=P3^2; 
unsigned char channel=0xbc; //1011 1100£¬ABC£½110Ñ¡ÔñµÚÈýͨµÀͬʱʹST=0£¬OE=0Êä³öÊý¾ÝÏ߳ʸß×è״̬£¬EOC=1¡£
unsigned char getdata;   
void main(void) 
{ 
  TMOD=0x01; 
  TH0=(65536-4000)/256; 
  TL0=(65536-4000)%256; 
  TR0=1; 
  ET0=1; 
  EA=1; 
  P3=channel; 
  
  while(1) 
    { 
      ST=0; 
      ST=1; 
      ST=0; 
      while(EOC==0); 
      OE=1; 
      getdata=P0; 
      OE=0;	
	  getdata=tab[getdata];
	  R1=getdata%2;
      getdata=getdata/2;    
      dispbuf[5]=getdata/10; 
      dispbuf[6]=(getdata%10);
	  if(R1==1)
	    dispbuf[7]=5;
	  else
	    dispbuf[7]=0;  
    } 
}   
void t0(void) interrupt 1 using 0 
{ 
  TH0=(65536-350)/256; 
  TL0=(65536-350)%256; 
  P2=0xff;
  if(dispcount==5)
  {P1=dispcode[dispbuf[dispcount]]|0x80; 
  P2=dispbitcode[dispcount]; }
  else
  {P1=dispcode[dispbuf[dispcount]]; 
  P2=dispbitcode[dispcount]; }
  dispcount++; 
  if(dispcount==8) 
    { 
      dispcount=0; 
    } 
}
 
  • Like
Reactions: 1230

    1230

    Points: 2
    Helpful Answer Positive Rating
Have a look at this link

https://sites.google.com/site/coolembeddedlaboratory/home/atmega-8/adc-interfacing

You will find the code with Proper Explanation..

Code:
#include <REGX51.H>
#include<stdio.h>
#include<string.h>

sbit INTR = P3^5;
sbit RD_ADC = P2^4;
sbit WR_ADC = P2^3;
sfr MYDATA = 0x80;        //Port-0
sfr LcdData = 0x90;        //Port-1
sbit RS =  P2^5;
sbit RW =  P2^6;
sbit EN =  P2^7;
void lcdcmd(unsigned char value);
void lcddata(unsigned char value);
void lcdstr(unsigned char msg[]);
void Delay(unsigned int itime);
void SerTX(unsigned char x);
void SerTX_str(unsigned char msg[]);
unsigned char msg[] = "VOLTAGE --->";
void main()
{
    unsigned int temp;
    int hundreds,tens,ones;
    unsigned char buffer[10];
    TMOD = 0x20;    //Timer-1, 8-Bit Auto Reload Mode
    TH1 = 0xFD;        //9600 Baud Rate When Crystal Used is 11.0592MHZ
    SCON = 0x50;
    TR1 = 1;        //Start Timer
    MYDATA = 0xFF;    //Making P1 as Input Port
    INTR = 1;
    RD_ADC = 1;        //Set RD high
    WR_ADC = 1;        //Set WR high
    lcdcmd(0x38);
    Delay(1);
    lcdcmd(0x0E);
    Delay(1);
    lcdcmd(0x01);
    Delay(1);
    lcdcmd(0x80);
    lcdstr("VOLTAGE");
    lcdcmd(0x0C);
    while(1)
    {     
        lcdcmd(0xC0);                                                               
        WR_ADC = 0;        //Send WR Pulse
        Delay(1);
        WR_ADC = 1;        //Low-High Pulse means Start of Conversion
        while(INTR == 1);    //Wait until End of Conversion
        //When Conversion Gets Completed the INTR Pin Goes Low we get out of the Loop
        RD_ADC = 0;        //Send RD Pulse
        temp = MYDATA * 2;
        //Conversion Process Starts Here       
            ones = temp%10;
            temp = temp/10;
            tens = temp%10;
            hundreds = temp/10;
            sprintf(buffer,"%d.%d%d Volts",hundreds,tens,ones);
            lcdstr(buffer);
            SerTX_str(msg);
            SerTX_str(buffer);
            SerTX(13);
            SerTX(13);
            Delay(10);
            Delay(10);
            RD_ADC = 1;
    }
}
void lcdcmd(unsigned char value)
{
    LcdData = value;
    RS = 0;
    RW = 0;
    EN = 1;
    Delay(1);
    EN = 0;
}
void lcddata(unsigned char value)
{
    LcdData = value;
    RS = 1;
    RW = 0;
    EN = 1;
    Delay(1);
    EN = 0;
}
void Delay(unsigned int itime)
{
    unsigned int i,j;
    for(i=0;i<1275;i++)
    for(j=0;j<itime;j++);
}
void lcdstr(unsigned char msg[])
{
    unsigned short int len,i;
    len = strlen(msg);
    for(i=0;i<len;i++)
    {
        lcddata(msg[i]);
        Delay(1);
    }
}
void SerTX(unsigned char x)
{
    SBUF = x;
    while(TI == 0);
    TI = 0;
}
void SerTX_str(unsigned char msg[])
{
    unsigned short len,i;
    len = strlen(msg);
    for(i=0;i<len;i++)
    {   
        SerTX(msg[i]);
    }
}

Simple Voltmeter project using AT89C51
 
  • Like
Reactions: 1230

    1230

    Points: 2
    Helpful Answer Positive Rating
thanks Li_ereunpisan ...ofcourse it helped me. but unfortunately i am understanding only 30-40% of it...but thanks a lot for trying to help me.better if could something be more easily understandable. :)
 

better if written using mikroC.

My Personal Advice is to use Keil C Compiler's not mikroC, they are good and popular for PIC.

Have a look at my thread, that is self explainatory
 

thanks Li_ereunpisan ...ofcourse it helped me. but unfortunately i am understanding only 30-40% of it...but thanks a lot for trying to help me.better if could something be more easily understandable. :)
look at this more details
View attachment ADC0809ad.7z
 
  • Like
Reactions: 1230

    1230

    Points: 2
    Helpful Answer Positive Rating
If you have some experience using the assembly language , it would be much easier to practice.

anyhow you must use KEIL in any case
 

If you have some experience using the assembly language , it would be much easier to practice.

anyhow you must use KEIL in any case


:( i dont have any idea over assembly...

---------- Post added at 17:55 ---------- Previous post was at 16:22 ----------

Thanks to all....:)
if got some more code for ADC, pls share it....
 


Just refer to the tutorials on this site
 

yes ofcourse you had provided me with a code, which is easily understandable. But i think, by seeing more and more codes, i can get some newer idea.
This is why i asked. :)

Write to write your own code's and if face some problem, then post that code here, we will try to help you..
The best way to learn the things is to practice them by own.
:)
 
  • Like
Reactions: 1230

    1230

    Points: 2
    Helpful Answer Positive Rating
Write to write your own code's and if face some problem, then post that code here, we will try to help you..
The best way to learn the things is to practice them by own.
:)

Ok... and thanks... :)
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top