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

linking error in the program . can not find the solution

I am a newbee in Microcontroller programing . the code I have written in C was from a book and it is giving linker error. please help me to solve the problem.
I am sending the code:

/*reading pwm waveform and calculation of frequency using microcontroller*/
#include<reg52.h>
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;

sbit IN=P2^4;

void delay(void);
void INIT(void);
void ENABLE(void);
void LINE(int);

int ONTIME(int);
int offtime(int);
/*declaration of functions complete*/
//
void LINE(int i)
{ if(i==1) { RS=0; RW=0; P1=0x80; ENABLE(); RS=1; } else { RS=0; RW=0; P1=0xC0; ENABLE(); RS=1; }
}

/*dealy subroutine*/

void delay(void)
{ int i,j; for(j=0;j<10;j++) { for(i=0;i<100;i++); }
}

/*delay complete*/

/*Enable subroutine*/
void ENABLE(void)
{ EN=1; delay(); EN=0; delay();
}

/*initialisation of LCD giving proper command*/

void INIT(void)
{ RS=0; RW=0; EN=0; P1=0x38;// 2 Lines and 5*7 matrix LCD ENABLE(); ENABLE(); ENABLE(); P1=0x06; // Shift cursor to left ENABLE(); P1=0x0E; //display on, cursor blinking ENABLE(); P1=0x01; //clear display screen ENABLE();
} /* measuring ontime*/
int ONTIME(int m)
{ if(m==1) { IN=1; /*input to 8051 is from 555 osc*/ TMOD=0x01; TR0=0; TF0=0; TL0=0x00; TH0=0x00; while(IN); /*check for rising edge*/ while(!IN); TR0=1; while(IN); TR0=0; }

/* TO MEASURE OFFTIME*/

if(m==2) { IN=1; TMOD=0x01; TR0=0; TF0=0; TL0=0x00; TH0=0x00;

while(!IN); // check for falling edge while(IN); TR0=1; while(!IN); // CHECK FOR RISING EDGE TR0=0; } return((TH0*256)+TL0);
}

void main(void)
{ int unit, tens, hundred, thousand, tenthou, x; char code dis3[]="Fre in HZ="; char *p; int i,j,k,freq,l; while(1) { for(x=1;x<=3;x++) { if(x==1) { i=ONTIME(x); k=i; }

if(x==2) { i=offtime(x); l=i; } if(x==3) { freq=k+1; i=1/freq; } }

unit=(i%10); tens=(i/10)%10; hundred=(i/100)%10; thousand=(i/1000)%10; tenthou=(i/1000)%10; unit=unit+0x30; tens=tens+0x30; hundred=hundred+0x30; thousand=thousand+0x30; tenthou=tenthou+0x30; INIT(); LINE(0);

p=&dis3;

for(j=0;j<8;j++) { P1=*p++; ENABLE(); }

LINE(2); P1=tenthou; ENABLE(); P1=thousand; ENABLE(); P1=hundred; ENABLE(); P1=unit; ENABLE(); }
}

Parents
  • but that's not the issue with the delay loop itself: it is an issue with documentation or user education.

    I think I've told you the same in another thread, but it looks like you need a repeat lesson: you're making quite an effort only to prove you have no idea what you're talking about.

    That for loop delay shown by the OP won't work, and yes, that's an issue with that code itself. Your statement that this were a problem with documentation or user education just goes to show you don't even understand the problem.

Reply
  • but that's not the issue with the delay loop itself: it is an issue with documentation or user education.

    I think I've told you the same in another thread, but it looks like you need a repeat lesson: you're making quite an effort only to prove you have no idea what you're talking about.

    That for loop delay shown by the OP won't work, and yes, that's an issue with that code itself. Your statement that this were a problem with documentation or user education just goes to show you don't even understand the problem.

Children
No data