ADC 0804 interfacing with microcontroller

Thread Starter

bmnaik.ec

Joined Nov 1, 2011
3
actually i'm supposed to design fire alarm system in embedded system so i want to interface adc 0804 with 8051 microcontroller, but it is not giving me the correct digital output. this output has to be considered for high temperatures i mean threshold voltage.
 

Attachments

Georacer

Joined Nov 25, 2009
5,182
Some people prefer to read all their stuff on the browser:
Rich (BB code):
org 00h
mov p1,#0xff; input configuration
clr p3.0;     chip select
setb p3.1 ;RD= 1
clr p3.3   ;WR= 0
setb p3.3  ;WR= 1
wait:jb p3.2,wait ;INTR 
clr p3.0;  Chip select low means adc enabled 
clr p3.1; RD= 0
setb p3.1;RD=1 makes data reading from adc
mov a,p1;
 LCD_RS    BIT     P2.5
 LCD_EN    BIT     P2.4

 LCD       EQU     P0

CALL    INIT_LCD
       
      
                 
again:
        CALL    GET_SENSOR_DATA
       
        MOV               A,#81H  
                CALL        WR_LCD_COMMAND
               CALL DELAY

                JNC HERE
                MOV       A,#' '
                CALL        WR_LCD_CHR
                MOV       A,#'F'
                CALL        WR_LCD_CHR
                MOV       A,#'I'
                CALL        WR_LCD_CHR
                MOV       A,#'R'
                CALL        WR_LCD_CHR
                MOV       A,#'E'
                CALL        WR_LCD_CHR
                MOV       A,#' '
                CALL        WR_LCD_CHR
                MOV       A,#'A'
                CALL        WR_LCD_CHR
                MOV       A,#'L'
                CALL        WR_LCD_CHR
                MOV       A,#'A'
                CALL        WR_LCD_CHR
                MOV       A,#'R'
                CALL        WR_LCD_CHR
                MOV       A,#'M'
                CALL        WR_LCD_CHR
                MOV       A,#' '
                CALL        WR_LCD_CHR
                MOV       A,#'#'
                CALL        WR_LCD_CHR
                MOV       A,#' '
                CALL        WR_LCD_CHR
       
        CLR     P2.3

       
        MOV               A,#31H
                CALL        WR_LCD_CHR

        JMP    AGAIN

HERE:   MOV          A,#' '
                CALL        WR_LCD_CHR
                MOV       A,#' '
                CALL        WR_LCD_CHR
                MOV       A,#' '
                CALL        WR_LCD_CHR
                MOV       A,#' '
                CALL        WR_LCD_CHR
                MOV       A,#'N'
                CALL        WR_LCD_CHR
                MOV       A,#'O'
                CALL        WR_LCD_CHR
                MOV       A,#'R'
                CALL        WR_LCD_CHR
                MOV       A,#'M'
                CALL        WR_LCD_CHR
                MOV       A,#'A'
                CALL        WR_LCD_CHR
                MOV       A,#'L'
                CALL        WR_LCD_CHR
                MOV       A,#' '
                CALL        WR_LCD_CHR
                MOV       A,#' '
                CALL        WR_LCD_CHR
                MOV       A,#' '
                CALL        WR_LCD_CHR
                MOV       A,#' '
                CALL        WR_LCD_CHR
                MOV       A,#' '
                CALL        WR_LCD_CHR

        SETB    P2.3
              
        JMP AGAIN



INIT_LCD:
        MOV      A,#38H                ;2 line 5x7
        CALL    WR_LCD_COMMAND   
        MOV      A,#0EH                ;LCD on cursor on
        CALL    WR_LCD_COMMAND
        MOV      A,#01H                ;clear LCD
        CALL    WR_LCD_COMMAND
        MOV      A,#06H                ;shift cursor right
        CALL    WR_LCD_COMMAND
DISP:       MOV       A, #81H  ; Curser at LINE # 1, Position # 3
                CALL        WR_LCD_COMMAND
RET



WR_LCD_COMMAND:
                CALL DELAY
                MOV  LCD,A
        CLR  LCD_RS
      ;  CLR  LCD_RW
        SETB LCD_EN
        CLR  LCD_EN
RET


WR_LCD_CHR:
                CALL DELAY
                MOV  LCD,A
        SETB LCD_RS
       ; CLR  LCD_RW
        SETB LCD_EN
        CLR  LCD_EN
        
RET


DELAY:
                mov        r5, #0ffh                 ; delay loop instead of checking bit-7
                djnz        r5, $
RET

GET_SENSOR_DATA:

        MOV C, P1.4
        ANL C, P1.5
    
mov r1,#3
mov a,p1
loop:rlc a
jnc next
RET
next: djnz r1,loop
RET
END
 
Last edited:

Thread Starter

bmnaik.ec

Joined Nov 1, 2011
3
org 00h
mov p1,#0xff; input configuration
clr p3.0; chip select
setb p3.1 ;RD= 1
clr p3.3 ;WR= 0
setb p3.3 ;WR= 1
wait:jb p3.2,wait ;INTR
clr p3.0; Chip select low means adc enabled
clr p3.1; RD= 0
setb p3.1;RD=1 makes data reading from adc
mov a,p1;
LCD_RS BIT P2.5
LCD_EN BIT P2.4

LCD EQU P0

CALL INIT_LCD



again:
CALL GET_SENSOR_DATA

MOV A,#81H
CALL WR_LCD_COMMAND
CALL DELAY

JNC HERE
MOV A,#' '
CALL WR_LCD_CHR
MOV A,#'F'
CALL WR_LCD_CHR
MOV A,#'I'
CALL WR_LCD_CHR
MOV A,#'R'
CALL WR_LCD_CHR
MOV A,#'E'
CALL WR_LCD_CHR
MOV A,#' '
CALL WR_LCD_CHR
MOV A,#'A'
CALL WR_LCD_CHR
MOV A,#'L'
CALL WR_LCD_CHR
MOV A,#'A'
CALL WR_LCD_CHR
MOV A,#'R'
CALL WR_LCD_CHR
MOV A,#'M'
CALL WR_LCD_CHR
MOV A,#' '
CALL WR_LCD_CHR
MOV A,#'#'
CALL WR_LCD_CHR
MOV A,#' '
CALL WR_LCD_CHR

CLR P2.3


MOV A,#31H
CALL WR_LCD_CHR

JMP AGAIN

HERE: MOV A,#' '
CALL WR_LCD_CHR
MOV A,#' '
CALL WR_LCD_CHR
MOV A,#' '
CALL WR_LCD_CHR
MOV A,#' '
CALL WR_LCD_CHR
MOV A,#'N'
CALL WR_LCD_CHR
MOV A,#'O'
CALL WR_LCD_CHR
MOV A,#'R'
CALL WR_LCD_CHR
MOV A,#'M'
CALL WR_LCD_CHR
MOV A,#'A'
CALL WR_LCD_CHR
MOV A,#'L'
CALL WR_LCD_CHR
MOV A,#' '
CALL WR_LCD_CHR
MOV A,#' '
CALL WR_LCD_CHR
MOV A,#' '
CALL WR_LCD_CHR
MOV A,#' '
CALL WR_LCD_CHR
MOV A,#' '
CALL WR_LCD_CHR

SETB P2.3

JMP AGAIN



INIT_LCD:
MOV A,#38H ;2 line 5x7
CALL WR_LCD_COMMAND
MOV A,#0EH ;LCD on cursor on
CALL WR_LCD_COMMAND
MOV A,#01H ;clear LCD
CALL WR_LCD_COMMAND
MOV A,#06H ;shift cursor right
CALL WR_LCD_COMMAND
DISP: MOV A, #81H ; Curser at LINE # 1, Position # 3
CALL WR_LCD_COMMAND
RET



WR_LCD_COMMAND:
CALL DELAY
MOV LCD,A
CLR LCD_RS
; CLR LCD_RW
SETB LCD_EN
CLR LCD_EN
RET


WR_LCD_CHR:
CALL DELAY
MOV LCD,A
SETB LCD_RS
; CLR LCD_RW
SETB LCD_EN
CLR LCD_EN

RET


DELAY:
mov r5, #0ffh ; delay loop instead of checking bit-7
djnz r5, $
RET

GET_SENSOR_DATA:

MOV C, P1.4
ANL C, P1.5

mov r1,#3
mov a,p1
loop:rlc a
jnc next
RET
next: djnz r1,loop
RET
END
 

t06afre

Joined May 11, 2009
5,934
Your block diagram looks OK. Then problems like this arise. The first thing I do is fire up my debugger. Have you tried that. And you also say "but it is not giving me the correct digital output" can you elaborate on this matter. Aslo do you have a schematic of your circuit you can post. That would help
 

Thread Starter

bmnaik.ec

Joined Nov 1, 2011
3
i don't have a schematic for the circuit i planned to do through the block diagram which is attached above.i'm giving the lm35(temperature sensor)output to adc which is around 0.305volts.
 
Top