1230
Member level 3
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.
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
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.
#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;
}
}
#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]);
}
}
better if written using mikroC.
look at this more detailsthanks 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.
If you have some experience using the assembly language , it would be much easier to practice.
anyhow you must use KEIL in any case
What else do you need...
I had already provide a very simple code to you in my above post...
Have u looked at the tutorial present at this site.. what are the problems you are facing
https://sites.google.com/site/coolembeddedlaboratory/home/atmega-8/adc-interfacing
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.