I have written a code for getting input from ADC 0804 and then display the value on 16x2 lcd I need help in writing a function to convert ADC output into a value which can be displayed in 16x2 lcd. ADC is used to convert temperature output from lm35. 5V supply voltage and Vref=2.5V. I need code for - convert_display(value) Also keil compiler gives error - adc_inter.c(16): error C141: syntax error near '='. I am unable to understand what should be done?
#include <reg51.h> #include <stdio.h> #include <string.h> void msdelay(unsigned int time); void convert_display(unsigned char value); #define RD P2^5; #define WR P2^6; #define INTR P2^7; unsigned long MYDATA;
void main() { unsigned char value; MYDATA = P1; MYDATA = 0xFF; INTR = 1; RD = 1; WR = 1; while(1) { WR=0; WR=1; while(INTR==1) { } RD=0; value=MYDATA; convert_display(value); RD=1; } }
void msdelay(unsigned int time) { unsigned char x,y; for(x=0;x<=time;x++) for(y=0;y<=1275;y++); }
The #defines don't need semicolons?
For some reason, people seems to forget that it sometimes helps to perform a preprocessor expansion and look at what the "real" code actually looks like. That will quickly explain why the compiler is unhappy...
For some reason, people seems to forget
I'm regrettably sure it's worse than that. To be in a position to forget something, you have to know it first. The people we're dealing with here, never did.
This particular preprocessor mystery is a classic beginner's mistake; one which everyone has committed at least once in their career as a C programmer. The difference is in how you deal with it, and how often, until the lesson is fully learned: C compilers like their semicolons in exactly the right places, period.
www.8052.com/.../29152
Not specific to C51; Not specific to Keil; Not specific to embedded
oh! that was big shot. thanks for help. Still I am unable to understand bit handling. for expression - RD = 1; I get an error - " syntax error near '=' " I didn't get what does it mean?
I didn't get what does it mean? It means you may have thanked us for the help, but you didn't actually follow it.
So post the current failing code, using PRE tags so the formatting is clear.
#include <reg51.h> #include <stdio.h> #include <string.h> void msdelay(unsigned int time); void convert_display(unsigned char value);
int INTR; #define RD = P2^5 #define WR = P2^6; unsigned long MYDATA;
void main() { unsigned char value; RD = 1; WR = 1; INTR = P2^7; INTR = 1; MYDATA = P1; MYDATA = 0xFF; while(1) { WR=0; WR=1; while(INTR==1) { } RD=0; value=MYDATA; convert_display(value); RD=1; } }
void convert_display(unsigned char value) { unsigned char x,d1,d2,d3; x=value/10; d1=value%10; d2=value/10; d3=x/10; P0=d1; msdelay(250); P0=d2; msdelay(250); P0=d3; msdelay(250); }
Error is displayed at line 15,16,23,27,30. Error - "syntax error near '=' ". At every line I pass some int value to WR,RD, error is displayed.
The preprocessor is an _almost_ totally stupid search-and-replace function.
You have
#define RD P2^5;
So where you use RD, the preprocesor removes RD and inserts "P2^5;". How fun is that in your expression:
RD = 1;
where you end up with
P2^5; = 1;
Does the above look like valid C code? How many ';' does it take for a single C statement?
int INTR; #define RD = P2^5 #define WR = P2^6 unsigned long MYDATA;
Error - syntax error near '='. I think I'm making some mistake in passing value to RD,WR
Read the posting notes lest it be obvious you didn't bother. Place source code between PRE tags, otherwise the line relationships are lost. http://www.keil.com/forum/tips.asp
Too late - it is obvious!
And if you can so totally fail to spot & follow such such obviously-placed, clearly-stated, easy instruction - even having had them pointed-out to you several times - that doesn't bode well for success in any kind of programming.
www.danlhenry.com/.../keil_code.png
Where it should be blatantly obvious that there is a, "syntax error near '=' " - isn't it?
Which is almost exactly the same as the example I gave you earlier: www.8052.com/.../29152
Can be "translated to"
First a meaningless pin read without any use of the result.
Then a very interesting expression where some magic "nothing" should be given the value 1.
I don't blame the compiler for not liking a statement starting with a '='.
Please will you give me c code? I'll study the code. - Take input from ADC 0804 and display it at 16x2 lcd display.