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

ADC and LCD interfacing issue

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++);
}

Parents
  • Think twice about this statement. sprintf() can now either make a number into writable characters (ASCII) or into binary, hex etc? Next thing - what numerical bases can sprintf() use when translating a number into a sequence of ASCII characters?

    Peter:

    obviously sprintf converts to ascii. What I meant, was that it will convert your number into an
    equivalent ascii number.
    %o gives you octal
    %x gives you hex

    I have worked with a version that had a %b and would give you the result in ascii binary
    i.e. 0x31 0x30 0x31 0x31 0x30 for 10110b That is not part of the standard library

    if you do "%h",value you get base 16 or hex
    %o base 8 or octal
    %c base 256 when you think about it :)
    %u base 10

Reply
  • Think twice about this statement. sprintf() can now either make a number into writable characters (ASCII) or into binary, hex etc? Next thing - what numerical bases can sprintf() use when translating a number into a sequence of ASCII characters?

    Peter:

    obviously sprintf converts to ascii. What I meant, was that it will convert your number into an
    equivalent ascii number.
    %o gives you octal
    %x gives you hex

    I have worked with a version that had a %b and would give you the result in ascii binary
    i.e. 0x31 0x30 0x31 0x31 0x30 for 10110b That is not part of the standard library

    if you do "%h",value you get base 16 or hex
    %o base 8 or octal
    %c base 256 when you think about it :)
    %u base 10

Children
  • Base 128 if you are a 7 bit character. 256 if you are an 8 bit character.
    00-0xFF.
    Technically it has to be 256 because the definition of a base requires the number to reset to 0 when you get to the end of the range 0-0xf then 0
    0x7F +1 0x80, so if you are looking at it as a 7 bit word, and you mask the upper one off, then
    it would be base 128.

    Actually I don't know *what* sprintf would do if you gave it a 16 bit number. It might use the upper byte on one endian machine or the lower byte on a different endian machine, or it might just spit it's guts all over you at compile time, if you did your prototyping right.

    I wish the C guys had seen fit to adopt my quad for long long, but way back it got nixed.
    I still think quad would be a good one for a 64 bit variable.

  • Base 128 would imply that a 8-bit character larger than 127 would represent a printout of two ASCII characters - the high bit isn't allowed to just be masked away when talking about base-n numeric operations.

    About printf() and 16-bit values - the language standard does cover multi-character character constants, but as implementation-defined.

    I have a bit bad access to standard documents right now, but the old ISO 9899 standard (C99) has the following note (§6.4.4.4, bullet 10):
    "The value of an integer character constant containing more than one character (e.g.,
    'ab'), or containing a character or escape sequence that does not map to a single-byte
    execution character, is implementation-defined."

    And J.3.4 covers implementation-specific behavior relating to characters:
    "The value of an integer character constant containing more than one character or
    containing a character or escape sequence that does not map to a single-byte
    execution character (6.4.4.4).

    Character constants containing multiple characters are also a common cause for compilation warnings, because of the portability issues.