We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
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(); } }
I have provided some examples in this very thread.
I call bullshit on that one. The only example of anything you've provided here is the exact same thing you've been accusing others of: blanket statements without any supporting arguments whatsoever.