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

Queries of using AT

Hi,
I am using AT89C4051 to utilize it as an AD Converter for an application as a two digit Voltmeter. I am following the circuit design given in the following address:
httpp://http://www.atmel.com/dyn/resources/prod_documents/DOC0524.PDF .
I have written a code in C (modified) and it does not work. It would be very helpful if someone were to help me if there are any mistakes in my code. My code is:

#include<AT89x051.h>
#define TON 79;
#define TOFF 79;

unsigned int ta,tb;
void delay(int count);
char a[10]={0x07,0x17,0x27,0x37,0x47,0x57,0x67,0x77,0x87,0x97};
char b[10]={0x0B,0x1B,0x2B,0x3B,0x4B,0x5B,0x6B,0x7B,0x8B,0x9B};
scanled();

void main(void)
{
int td,tc,m;
tc=TON;
td=TOFF

while(1){

P3_7=1;
for(m=0;m<tc;m++){
if(P3&0x40==0)
ta++;
}
delay(3);

P3_7=0;
for(m=0;m<td;m++){
if(P3&0x40==1)
tb++;
}
tb=tb+td;
delay(3);

scanled();

}

}

scanled(){
unsigned int i,flag=0,j;
static unsigned int k,h;
k=ta;
h=tb;

if(tb==0){

for(i=0;i<2;i++){
flag=1-flag;
if(flag==1){
P1=a[(k)/10];
for(j=0;j<32000;j++);
P1=0xFF;
}

if(flag==0){
P1=b[(k)%10];
for(j=0;j<32000;j++);
P1=0xFF;
}


}

}

else if(ta==0){
for(i=0;i<2;i++){
flag=1-flag;
if(flag==1){
P1=a[(h)/10];
for(j=0;j<32000;j++);
P1=0xFF;
}

if(flag==0){
P1=b[(h)%10];
for(j=0;j<32000;j++);
P1=0xFF;
}


}

}
}

void delay(int count)
{
int j,l;
for(j=0;j<= count;j++)
{
for (l=0;l<=120;l++);
}
}

Please do note that i am not using the lookup table. That is why i did not include that in my code. I just want to know the number of counts. From the number of counts, i could refer to the lookup table manually and get the voltage output.

Really do appreciate your help. Thank you.

0